Tokenize
进行nlp任务都需要进行Tokenize,Tokenize可以理解为是把长句子拆分成有”意义"的小部件,这里的有"意义"是指最终能够使得计算机理解。
使用nltk进行tokenize
import nltk
sentence = = 'hello,world'
tokens = nltk.word_tokenize(sentence)
print(tokens)
#['hello',',','world']
中英文NLP的区别
区别1:分词方式不同,中文更难
英文有天然的空格作为分隔符,但是中文没有。所以如何切分是一个难点,再加上中文里一词多意的情况非常多,导致很容易出现歧义。下文中难点部分会详细说明。
区别2:英文单词有多种形态
英文单词存在丰富的变形变换。为了应对这些复杂的变换,英文NLP相比中文存在一些独特的处理步骤,我们称为词形还原(Lemmatization)和词干提取(Stemming)。中文则不需要
词性还原:does,done,doing,did 需要通过词性还原恢复成 do。
词干提取:cities,children,teeth 这些词,需要转换为 city,child,tooth”这些基本形态
区别3:中文分词需要考虑粒度问题
例如「中国科学技术大学」就有很多种分法:
- 中国科学技术大学
- 中国 \ 科学技术 \ 大学
- 中国 \ 科学 \ 技术 \ 大学
粒度越大,表达的意思就越准确,但是也会导致召回比较少。所以中文需要不同的场景和要求选择不同的粒度。这个在英文中是没有的。
社交网络上文本数据的Tokenize
有时候Tokenize没那么简单,在社交网络上,乱七八糟的不合语法不合正常逻辑的语言很多:比如@某人,表情符号,URL,#话题符号
这种情况下应该使用正则表达式辅助进行文本的预处理