英文分词和中文分词
英文分词
由于英语的基本组成单位就是词,所以相对来说简单很多。
大致分为三步(3S):
根据空格拆分单词(Split)
排除停止词(Stop Word)
提取词干(Stemming)
1、根据空格拆分单词
这一步是是最简单的一步,英语的句子基本上就是由标点符号、空格和词构成,那么只要根据空格和标点符号将词语分割成数组即可。
如“Nobody knows how ancient people started using fire”分割成{"Nobody","knows","how","ancient","people","started","using","fire"}。
2、排除停止词
停止词,是由英文单词:stopword翻译过来的,原来在英语里面会遇到很多a,the,or等使用频率很多的字或词,常为冠词、介词、副词或连词等。如果搜索引擎要将这些词都索引的话,那么几乎每个网站都会被索引,也就是说工作量巨大。可以毫不夸张的说句,只要是个英文网站都会用到a或者是the。那么这些英文的词跟我们中文有什么关系呢? 在中文网站里面其实也存在大量的stopword,我们称它为停止词。比如,我们前面这句话,“在”、“里面”、“也”、“的”、“它”、“为”这些词都是停止词。这些词因为使用频率过高,几乎每个网页上都存在,所以搜索引擎开发人员都将这一类词语全部忽略掉。如果我们的网站上存在大量这样的词语,那么相当于浪费了很多资源。
如{"Nobody","knows","how","ancient","people","started","using","fire"}去掉停止词后得到 {"Nobody","ancient","people","started","fire"}
常见停止词请看
>>> wordEngStop = nltk.corpus.stopwords.words('english')
>>> wordEngStop
[u'i', u'me', u'my', u'myself', u'we', u'our', u'ours', u'ourselves', u'you', u'your', u'yours', u'yourself', u'yourselves', u'he', u'him', u'his', u'himself', u'she', u'her', u'hers', u'herself', u'it', u'its', u'itself', u'they', u'them', u'their', u'theirs', u'themselves', u'what', u'which', u'who', u'whom', u'this', u'that', u'these', u'those', u'am', u'is', u'are', u'was', u'were', u'be', u'been', u'being', u'have', u'has', u'had', u'having', u'do', u'does', u'did', u'doing', u'a', u'an', u'the', u'and', u'but', u'if', u'or', u'because', u'as', u'until', u'while', u'of', u'at', u'by', u'for', u'with', u'about', u'against', u'between', u'into', u'through', u'during', u'before', u'after', u'above', u'below', u'to', u'from', u'up', u'down', u'in', u'out', u'on', u'off', u'over', u'under', u'again', u'further', u'then', u'once', u'here', u'there', u'when', u'where', u'why', u'how', u'all', u'any', u'both', u'each', u'few', u'more', u'most', u'other', u'some', u'such', u'no', u'nor', u'not', u'only', u'own', u'same', u'so', u'than', u'too', u'very', u's', u't', u'can', u'will', u'just', u'don', u'should', u'now', u'd', u'll', u'm', u'o', u're', u've', u'y', u'ain', u'aren', u'couldn', u'didn', u'doesn', u'hadn', u'hasn', u'haven', u'isn', u'ma', u'mightn', u'mustn', u'needn', u'shan', u'shouldn', u'wasn', u'weren', u'won', u'wouldn']
3、提取词干
提取词干是西方语言特有的处理,比如说英文单词有 单数复数的变形,-ing和-ed的变形,但是在计算相关性的时候,应该当做同一个单词。比如 apple和apples,doing和done是同一个词,提取词干的目的就是还原成最基本的词。
同时我们可以将所有的大小写统一。
{"Nobody","ancient","people","started","fire"}处理成{"nobody","ancient","people","start","fire"}
经过上面三个步骤基本上一个英文句子就处理完了。
中文分词
对于中文而言,词是承载语义的最小单元,由词构成语句,又由语句构成篇章。但是,中文文本是由连续的字序列构成,词与词之间是没有天然的分隔符 ,所以中文分词相对来说困难很多。中文分词目前来说基本上都还是基于分词用的词典来进行分词的,将字和字组成不同的词然后放入词典中查找。
中文分词面临着相当多的挑战,首当其冲的就是歧义问题,不同的分割方式会导致不同的意思。
如:结婚/的/和尚/未/结婚/的 和 结婚/的/和/尚未/结婚/的
还有个重要的挑战就是未登录词,用人话就是没有收录进词典的词,人名就是最简单的例子,还有就是网友发明的词,诸如:“草泥马”、“不明觉厉”之类云云。
所以一个好的分词词典是决定中文分词质量的关键,还有就是做中文分词的话必须经常更新、与时俱进。
大致可以将中文分词算法分为两种:
1、词典分词
词典分词简单来说就是直接将句子拆成字,然后字和字组合进入词典中匹配,这种方式虽然简单直接但是容易引起歧义问题。比如jieba分词。
2、基于统计的分词
通过人工标注,对中文建模然后将准备好的语料进行训练,通过计算不同阶段下出现的概率并选出概率最大的情况作为结果来进行分词。
这种分词方法虽然能尽量避免分词导致的歧义,但却需要耗费相当大的性能。
还有一种是基于语义,但是目前还没有很好的方案所以姑且不议。
在常见的分词中建议是使用第一种,并且将常见的、唯一的词如地名、人名等等先单独建个词库,分词前先将这些词提取出来然后再进行分词。然后可以针对自身的情况的建一个歧义纠正词库,将一些分词结果进行纠正。
如分词结果为“王/小明”(这个名字在未登录的情况下),但是在纠正词库中已经记录了“王小明”,所以最终结果为“王小明”。