中文分词
在建立文本检索系统的过程中,需要进行分词的处理,中文分词是中文文本挖掘中的一个基础步骤,也是中文自然语言处理中的基础模块。中文不同于英文,由于中文句子的词与词之间没有任何空格之类的显示标志来指示词的边界,因此在中文进行自然语言处理时,需要使用专门的算法进行分词。分词的效果将直接影响词性、句法树、特征值提取等后续算法的处理效果。
当前有两类比较常用的分词算法:
1.基于词典的分词算法:
基于词典的分词算法,也被称为字符串匹配分词算法。该算法按照一定的策略,将待匹配的字符串和一个已经建立好的、充分大的词典中的词语进行匹配,如果找到某个词条,说明匹配成功,识别了该词,常见的匹配方式有:正向最大匹配、逆向最大匹配和双向匹配等方法。
2.基于统计的机器学习算法:
常见的有HMM隐马尔科夫模型、CRF条件随机场,还有深度学习,这些都会应用到的中文分词中。以CRF为例,基本思路是对汉字进行标注训练,不仅考虑了词语出现的频率、还考虑上下文。因此对于歧义词和未收录的词语都有良好的识别效果。
jieba分词器
为了实现文本分类中的特征提取,就需要实现中文分词的功能。当前有很多中文分词的工具包,最常用的是jieba分词器,它可以对中文文本进行分词、词性标注、关键词提取等功能,并且支持自定义的词典。
jieba包括3种分词模式:
1.精确模式:
精确模式会将句子精确的进行分词,一般分析文本的时候会用这种方式,结果中不存在冗余的单词。
例如:中文分词是文本处理不可或缺的一步
得到:'中文' '分词' '是' ’文本处理' '不可或缺' '的' '一步'
2.全模式:
全模式会将句中所有可以成词的词语都提取出来,分词后的信息再组合起来会有冗余,不再是原来的文本。
例如:中文分词是文本处理不可或缺的一步
得到:'中文' '分词' '是' ’文本' '文本处理' '本处' '处理' '不可' '不可或缺' '或缺' '的' '一步'
3.搜索引擎模式:
搜索引擎模式类似于全模式,在精确模式的基础上对长词再次切分,提高召回率。应用于搜索引擎中的词语匹配,一般在某些模糊匹配的场景下才会使用到全模式或搜索引擎模式。
具体代码:
import jieba
#导入jieba模块
if __name__=='__main__':
#设置待切词的中文句子
sent="自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。"
seg_result=jieba.cut(sent)#调用默认的精准模式进行分词
tokens=list()
for token in seg_result:
tokens.append(token)
print("精确模式:")
print(tokens)
#调用全模式
tokens=jieba.lcut(sent,cut_all=True)
print("全模式:")
print(tokens)
#调用搜素引擎模式
tokens=jieba.lcut_for_search(sent)
print("搜索引擎模式:")
print(tokens)
运行结果:
精确模式:
['自然语言', '处理', '是', '计算机科学', '领域', '与', '人工智能', '领域', '中', '的', '一个', '重要', '方向', '。']
全模式:
['自然', '自然语言', '语言', '处理', '是', '计算', '计算机', '计算机科学', '算机', '科学', '领域', '与', '人工', '人工智能', '智能', '领域', '中', '的', '一个', '重要', '方向', '。']
搜索引擎模式:
['自然', '语言', '自然语言', '处理', '是', '计算', '算机', '科学', '计算机', '计算机科学', '领域', '与', '人工', '智能', '人工智能', '领域', '中', '的', '一个', '重要', '方向', '。']
Process finished with exit code 0