赞
踩
分词 >_<,英文tokenization,也叫word segmentation,是一种操作,它按照特定需求,把文本切分成一个字符串序列(其元素一般称为token,或者叫词语)。
英文分词极为简单,下面给出两种分词思路:
import re
text = 'Lolita,light of my life,fire of my loins.My sin,my soul.'
# 分割的方式
pattern1 = re.compile(' ')
list1 = pattern1.split(text)
# 查找的方式
pattern2 = re.compile('\w+')
list2 = pattern2.findall(text)
# 打印出来,比较一下
print(list1)
print(list2)
无论是通过空格符进行分割出单词,还是直接正则匹配出单词,其实都是可以通过优化这个正则表达式进行优化分词效果。
我们意识到,我们仅仅用了两种简单的逻辑、短短的几行代码,分词的效果就特别特别好!!!
根源在于,英文本身就已经通过空白符进行了分词!!!
NLP中,其他的一些语言显然没这么幸运:
当然,自然语言处理时,中文也有比英文方便的地方:词形还原(Lemmatization)和词干提取(Stemming)
- 词形还原:英文中有时态的概念(go,going,gone),因此英文NLP需要对此进行还原
- 词干提取:即词根(beautiful-ful,quickly-ly),中文其实也有类似的成分,即偏旁部首(狗,猫)。但是,就在此刻,你在读这句话的时候会特意去看偏旁部首吗完全?没必要。
▶ 基于词典的分词方法
即字符串匹配。按照一定的策略将待分词的汉字串与一个充分大的机器词典中的词条进行匹配, 若匹配成功,则识别出一个词。
这里有三个关键点,其实都很好理解:
▶ 基于统计的分词方法
预先统计训练文本中相邻出现的各个字的组合的频度,然后计算它们之间的互现信息( 它体现了汉字之间结合关系的紧密程度),当该值高于某一个阈值时,便可以认为此字组可能构成了一个词。
模型:n-gram模型,HMM模型,最大熵模型
需要大量的训练文本,用以建立统计模型的参数。即,前面训练的越多,后面对未知的猜测或判断越准确。
▶ 基于语义、理解的分词方法
模拟人对句子的理解过程。
由于汉语语言知识的模糊性、复杂性,难以将各种语言信息组织成机器可直接读取的形式,因此目前基于理解的分词系统还不能取得令人满意的效果。
▶ 两种歧义
交集歧义 | 组合歧义 |
---|---|
在哪儿切? | 切不切? |
“网球场”,“真正在” | “才能”,“与其” |
▶ 如何消歧
▶ 什么是未登录词?
语言在使用时会现场创造或使用词典中没有的词,这些词统称为未登录词。
新词识别准确率已经成为评价一个分词系统性能的重要标志。
▶ 未登录词分类
▶ 未登录词识别
▶ 难点
指标:精度(Precision)、召回率(Recall)、F值(F-mesure)
P = 切 出 的 正 确 的 词 数 / 切 出 的 所 有 的 词 数 P = 切出的正确的词数 / 切出的所有的词数 P=切出的正确的词数/切出的所有的词数
R = 切 出 的 正 确 的 词 数 / 人 切 出 的 所 有 的 词 数 R = 切出的正确的词数 / 人切出的所有的词数 R=切出的正确的词数/人切出的所有的词数
准确率和召回率在某种程度上是矛盾的。
刻意地追求准确率会造成召回率的下降,同样,刻意地追求召回率也会造成准确率的下降。
F值作为准确率和召回率的调和平均数,可以有效地在二者之间作出一个平衡。
▶ jieba
jieba.cut(sentence, cut_all = False, HMM = False)
cut_all ----> True代表全模式,False代表精确模式。默认精确模式。
HMM --------> True表示采用HMM(隐马尔可夫模型)。默认不使用。
import jieba
list1 = list(jieba.cut('中华人民共和国万岁,世界人民大团结万岁'))
print(list1)
▶ thulac
import thulac
thu = thulac.thulac() # 默认模式
list2 = thu.cut('中华人民共和国万岁,世界人民大团结万岁')
print(list2)
# thulac是清华大学自研的分词库,但是因为源码使用了py3遗弃的语法,可能会导致问题
# 需要修改一小处源码才行(按照error信息改就行)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。