当前位置:网站首页 > 技术博客 > 正文

结巴分词 词性标注



导读:近年来,随着NLP技术的日益成熟,开源实现的分词工具越来越多,如Ansj、盘古分词等。在本文中,我们选取了Jieba进行介绍和案例展示,主要基于以下考虑:

作者:涂铭 刘祥 刘树春

如需转载请联系大数据(ID:hzdashuju)

Jieba分词官网地址是: https://github.com/fxsjy/jieba

可以采用如下方式进行安装:

Jieba分词结合了基于规则基于统计这两类方法。

首先基于前缀词典进行词图扫描,前缀词典是指词典中的词按照前缀包含的顺序排列,例如词典中出现了“上”,之后以“上”开头的词都会出现在这一部分,例如“上海”,进而会出现“上海市”,从而形成一种层级包含结构。

如果将词看作节点,词和词之间的分词符看作边,那么一种分词方案则对应着从第一个字到最后一个字的一条分词路径。

因此,基于前缀词典可以快速构建包含全部可能分词结果的有向无环图,这个图中包含多条分词路径,有向是指全部的路径都始于第一个字、止于最后一个字,无环是指节点之间不构成闭环。

基于标注语料,使用动态规划的方法可以找出最大概率路径,并将其作为最终的分词结果。对于未登录词,Jieba使用了基于汉字成词的HMM模型,采用了Viterbi算法进行推导。(进一步了解中文分词算法,请点击:)

01 Jieba的三种分词模式

Jieba提供了三种分词模式:

下面是使用这三种模式的对比。

运行结果如下:

可以看到,全模式和搜索引擎模式下,Jieba将会把分词的所有可能都打印出来。一般直接使用精确模式即可,但是在某些模糊匹配场景下,使用全模式或搜索引擎模式更适合。

接下来将结合具体案例,讲解Jieba分词的具体用法。

02 实战之高频词提取

高频词一般是指文档中出现频率较高且非无用的词语,其一定程度上代表了文档的焦点所在。针对单篇文档,可以作为一种关键词来看。对于如新闻这样的多篇文档,可以将其作为热词,发现舆论焦点。

高频词提取其实就是自然语言处理中的TF(Term Frequency)策略。其主要有以下干扰项:

下面采用Jieba分词,针对搜狗实验室的新闻数据,进行高频词的提取。

数据见:

https://github.com/nlpinaction/learning-nlp chapter3/data/news下,包括9个目录,目录下均为txt文件,分别代表不同领域的新闻。

该数据本质上是一个分类语料,这里我们只挑选其中一个类别,统计该类的高频词。

首先,进行数据的读取:

该函数用于加载指定路径下的数据。

定义高频词统计的函数,其输入是一个词的数组:

最后,主函数如下,这里仅列举了求出高频词的前10个:

运行主函数,结果如下:

通过上面的结果,我们可以发现,诸如“的”“,”“。”“说”等词占据着很高的位置,而这类词对把控文章焦点并无太大意义。我们需要的是类似“尘肺病”这种能够简要概括重点的词汇。常用的办法,是自定义一个停用词典,当遇到这些词时,过滤掉即可。

因此,我们可以自定义词典,然后按照如下方式来进行优化。

首先,整理常用的停用词(包括标点符号),按照每行一个写入到一个文件中(data目录下的stop_words.utf8)。然后定义如下函数,用于过滤停用词:

接下来修改main函数中第11行分词的部分,改为:

高频词前10位结果如下:

对比之前的结果,会发现效果要想有所提升,必须去除了无用标点符号以及“的”等干扰词。注意,本节实战中所用的停用词典为笔者整理的通用词典,一般实践过程中,需要根据自己的任务,定期更新维护。

上面演示了通过Jieba按照常规切词来提取高频词汇的过程。事实上,常用的中文分词器在分词效果上差距并不是特别大,但是在特定场景下常常表现的并不是那么尽如人意。

通常这种情况下,我们需要定制自己的领域词典,用以提升分词的效果。Jieba分词就提供了这样的功能,用户可以加载自定义词典:

Jieba要求的用户词典格式一般如下:

每一行为三个部分:词语词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒。该词典文件需为utf8编码。

在提取高频词时,通过更合理的自定义词典加载,能够获得更佳的效果。当然这里仅仅演示了一篇文档的高频词计算,多篇文档的高频词提取也可按照该思路进行整体统计计算。

关于作者:涂铭,阿里巴巴数据架构师,对大数据、自然语言处理、Python、Java相关技术有深入的研究,积累了丰富的实践经验。

刘祥,百炼智能自然语言处理专家,主要研究知识图谱、NLG等前沿技术,参与机器自动写作产品的研发与设计。

刘树春,七牛云高级算法专家,七牛AI实验室NLP&OCR方向负责人,主要负责七牛NLP以及OCR相关项目的研究与落地。

本文摘编自《Python自然语言处理实战:核心技术与算法》,经出版方授权发布。

延伸阅读《Python自然语言处理实战》

版权声明


相关文章:

  • kdump already running2024-11-05 22:30:05
  • okhttp3(OKHttp3使用详解)2024-11-05 22:30:05
  • 移位指令的用途2024-11-05 22:30:05
  • 深入理解计算机系统怎么2024-11-05 22:30:05
  • ip命令详解2024-11-05 22:30:05
  • springboot文件上传配置2024-11-05 22:30:05
  • 安全测试怎么做的2024-11-05 22:30:05
  • 51单片机移位函数2024-11-05 22:30:05
  • 匿名内部类可以实现接口吗2024-11-05 22:30:05
  • 树状数组简单易懂的详解2024-11-05 22:30:05