前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >实体知识+字典树辅助jieba的分词(并对三国演义进行简单分析)

实体知识+字典树辅助jieba的分词(并对三国演义进行简单分析)

作者头像
blmoistawinde
发布2019-10-30 18:23:55
9300
发布2019-10-30 18:23:55
举报

在做中文NLP的时候,分词可谓是基础中的基础。然而这个基础部分的内容直到今天还是让人不省心,在实际应用中【尤其是在人名等实体的识别上】总是显得漏洞百出。下面以python上比较流行的一个中文分词库jieba为例,看看它的一次表现:

import jieba
print(" ".join(jieba.cut("""玄德谢别二客,便命良匠打造双股剑。
云长造青龙偃月刀,又名“冷艳锯”,重八十二斤。
张飞造丈八点钢矛。各置全身铠甲。
共聚乡勇五百余人,来见邹靖。邹靖引见太守刘焉。""")))

玄德谢 别二客 , 便命 良匠 打造 双股 剑 。 云长造 青龙 偃月 刀 , 又名 “ 冷艳 锯 ” , 重 八十二斤 。 张飞 造丈 八点 钢矛 。 各置 全身 铠甲 。 共聚 乡勇 五百余 人 , 来见 邹靖 。 邹靖引 见 太守 刘焉 。

这里它犯了多次错误(“玄德谢”,”云长造”,”邹靖引”),并且对同一人名也会有前后不一致的情况(“邹靖”,”邹靖引”)。假设我要对文章中的人物出场频次进行统计,那么基于这种分词的方法看来是完全靠不住的。

这时我就有一种想法:如果能够基于现有的知识(三国演义中已知的人名和字号),对分词结果再进行一次干预,矫正其中的结果,是不是就可以解决这个问题了呢?

这个想法还有一个另外的好处:在古文中,同一个人物会以姓名、字号甚至是代称等多种不同形式出现,而我们希望在统计时能够把它们归入同一个人(实体)名下。实体知识就能够帮助我们完成这种归化。‘

实践证明这个想法是可行的。其主要思路是,利用字典树(Trie)预先扫描文本,并把识别到的实体替换为一个标准词(这里我用了”人占位符”),再使用jieba的add_word使得标准词一定会被分词器识别出来,最后再在分词结果中把标准词按照位置换回原文或者标准实体名。

首先简单提一下这里用python构建字典树的思路。这里采用嵌套字典的形式【与这篇文章的结构相似:飘逸的python - 实现trie树】。但是与上面不同的一点是,这里为了匹配到实体,我们要在字典树的叶结点[这里我起名为leaf]上挂上实体【或者多个实体,如果他们共享一个名字的话】,大致是这样:

>>> trie["刘"]["备"]
{'leaf':{'刘备'}}
>>> trie["玄"]["德"]
{'leaf':{'刘备'}}
>>> trie["子"]["上"]      #数据库中有两个人字“子上”
{'leaf': {'司马昭', '纪陟'}}

下面还是用我喜欢的jupyter notebook展开具体思路:

src="https://nbviewer.jupyter.org/github/blmoistawinde/simpleSanGuoNLP/blob/master/demo_KGsegmenter.ipynb?flush_cache=true" width="720" height="2000">

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-09-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
NLP 服务
NLP 服务(Natural Language Process,NLP)深度整合了腾讯内部的 NLP 技术,提供多项智能文本处理和文本生成能力,包括词法分析、相似词召回、词相似度、句子相似度、文本润色、句子纠错、文本补全、句子生成等。满足各行业的文本智能需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档