专栏首页润风拂过存甘霖实体知识+字典树辅助jieba的分词(并对三国演义进行简单分析)

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

在做中文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">

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • pyDatalog: python的逻辑编程引擎【四:从文件中加载和执行程序】

    之前的教程中,所有的操作,包括定义数据等都是在python里面进行的。但是当我们处理庞大的知识库的时候,我们肯定不希望把所有的数据都写在一个py文件里,而是希望...

    blmoistawinde
  • 基于知识图谱的文本自动注释(python+html)

    在探索知识图谱的过程中,发现它可以做一个有趣的应用——文本自动注释。在此整理并分享给大家。为了具体说明它的效果,让我们先来看一个例子:

    blmoistawinde
  • pyDatalog: python的逻辑编程引擎(用于推理、查询等)【一:序言】

    在探索"知识推理"的时候找到了pyDatalog这个工具。它借鉴了Datalog这种声明式语言,可以很方便自然地表达一些逻辑命题和数学公式,并且它是在我...

    blmoistawinde
  • OpenShift 3.11 离线安装

    泽阳
  • objective-C中的序列化(serialize)与反序列化(deserialize)

    obj-c中有一类对象:NSArray,NSDictionary,NSString,NSNumber,NSDate,NSData以及它们的可变版本(指NSMut...

    菩提树下的杨过
  • 【每周一坑】三门问题

    《卖油翁》欧阳修 陈康肃公尧咨善射,当世无双,公亦以此自矜。尝射于家圃,有卖油翁释担而立,睨之,久而不去。见其发矢十中八九,但微颔之。 康肃问曰:“汝亦知射乎...

    Crossin先生
  • 九年程序人生

    一次做规划局的项目,规划局的职员很是钦佩地说:“你们真了不起,在电脑上敲敲键盘就能做出软件来。”,

    程序员宝库
  • 谷歌发布世界最大任务型对话数据集SGD,让虚拟助手更智能

    近日,谷歌软件工程师Abhinav Rastogi和工程主管Pranav Khaitan称在谷歌虚拟助手中,已经引入了新的方法,更好地支持新服务。

    新智元
  • 图的深度优先搜索

    图有两种最基本的搜索算法,一种是深度优先搜索,另一种是广度优先搜索。本节先介绍深度优先搜索。

    海天一树
  • R语言与数据分析之二:绘图

    ? 图形展示是最高效且形象的数据描述手段,因此巧妙的图像展示是高质量数据分析报告的必备内容,因此强大的图形展示功能也是统计分析软件的必备功能。R语言提供了强大...

    小莹莹

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动