十、半个小时搞定词性标注与关键词提取
发布日期:2021-10-02 10:16:28 浏览次数:16 分类:技术文章

本文共 6466 字,大约阅读时间需要 21 分钟。


想要做到和人聊天,首先得先读懂对方在说什么,所以问句解析是整个聊天过程的第一步,问句解析是一个涉及知识非常全面的过程,几乎涵盖了自然语言处理的全部,本节让我们尝试一下如何分析一个问句

请尊重原创,转载请注明来源网站以及原始链接地址

问句解析的过程

一般问句解析需要进行分词、词性标注、命名实体识别、关键词提取、句法分析以及查询问句分类等。这些事情我们从头开始做无非是重复造轮子,傻子才会这么做,人之所以为人是因为会使用工具。网络上有关中文的NLP工具有很多,介绍几个不错的:

第一个要数哈工大的LTP(语言技术平台)了,它可以做中文分词、词性标注、命名实体识别、依存句法分析、语义角色标注等丰富、 高效、精准的自然语言处理技术

第二个就是博森科技了,它除了做中文分词、词性标注、命名实体识别、依存文法之外还可以做情感分析、关键词提取、新闻分类、语义联想、时间转换、新闻摘要等,但因为是商业化的公司,除了分词和词性标注免费之外全都收费

第三个就是jieba分词,这个开源小工具分词和词性标注做的挺不错的,但是其他方面还欠缺一下,如果只是中文分词的需求完全可以满足

第四个就是中科院张华平博士的NLPIR汉语分词系统,也能支持关键词提取

我们优先选择NLPIR

 

NLPIR使用

文档在

首先安装pynlpir库

pip install pynlpir

写个小程序测试一下分词效果:

# coding:utf-8import sysreload(sys)sys.setdefaultencoding( "utf-8" )import pynlpirpynlpir.open()s = '聊天机器人到底该怎么做呢?'segments = pynlpir.segment(s)for segment in segments:    print segment[0], '\t', segment[1]pynlpir.close()

执行效果如下:

聊天     verb机器人     noun到底     adverb该     verb怎么     pronoun做     verb呢     modal particle?     punctuation mark

下面我们再继续试下关键词提取效果:

key_words = pynlpir.get_key_words(s, weighted=True)for key_word in key_words:    print key_word[0], '\t', key_word[1]

输出如下:

聊天     2.0机器人     2.0

 

从这个小程序来看,分词和关键词提取效果很好

 

下面我们再来试验一个,这一次我们把分析功能全打开,部分代码如下:

s = '海洋是如何形成的'segments = pynlpir.segment(s, pos_names='all')

执行后效果如下:

海洋     noun是     verb:verb 是如何     pronoun:interrogative pronoun:predicate interrogative pronoun形成     verb的     particle:particle 的/底海洋     2.0形成     2.0

 

如果我们把segments在加上一个参数pos_english=False,也就是不使用英语,那么输出就是

海洋     名词是     动词:动词"是"如何     代词:疑问代词:谓词性疑问代词形成     动词的     助词:的/底海洋     2.0形成     2.0

解释一下

这里的segment是切词的意思,返回的是tuple(token, pos),其中token就是切出来的词,pos就是语言属性

调用segment方法指定的pos_names参数可以是'all', 'child', 'parent',默认是parent, 表示获取该词性的最顶级词性,child表示获取该词性的最具体的信息,all表示获取该词性相关的所有词性信息,相当于从其顶级词性到该词性的一条路径

请尊重原创,转载请注明来源网站以及原始链接地址

词性分类表

查看nlpir的源代码中的pynlpir/docs/pos_map.rst,可以看出全部词性分类及其子类别如下:

POS_MAP = {        'n': ('名词', 'noun', {            'nr': ('人名', 'personal name', {                'nr1': ('汉语姓氏', 'Chinese surname'),                'nr2': ('汉语名字', 'Chinese given name'),                'nrj': ('日语人名', 'Japanese personal name'),                'nrf': ('音译人名', 'transcribed personal name')            }),            'ns': ('地名', 'toponym', {                'nsf': ('音译地名', 'transcribed toponym'),            }),            'nt': ('机构团体名', 'organization/group name'),            'nz': ('其它专名', 'other proper noun'),            'nl': ('名词性惯用语', 'noun phrase'),            'ng': ('名词性语素', 'noun morpheme'),        }),        't': ('时间词', 'time word', {            'tg': ('时间词性语素', 'time morpheme'),        }),        's': ('处所词', 'locative word'),        'f': ('方位词', 'noun of locality'),        'v': ('动词', 'verb', {            'vd': ('副动词', 'auxiliary verb'),            'vn': ('名动词', 'noun-verb'),            'vshi': ('动词"是"', 'verb 是'),            'vyou': ('动词"有"', 'verb 有'),            'vf': ('趋向动词', 'directional verb'),            'vx': ('行事动词', 'performative verb'),            'vi': ('不及物动词', 'intransitive verb'),            'vl': ('动词性惯用语', 'verb phrase'),            'vg': ('动词性语素', 'verb morpheme'),        }),        'a': ('形容词', 'adjective', {            'ad': ('副形词', 'auxiliary adjective'),            'an': ('名形词', 'noun-adjective'),            'ag': ('形容词性语素', 'adjective morpheme'),            'al': ('形容词性惯用语', 'adjective phrase'),        }),        'b': ('区别词', 'distinguishing word', {            'bl': ('区别词性惯用语', 'distinguishing phrase'),        }),        'z': ('状态词', 'status word'),       'r': ('代词', 'pronoun', {            'rr': ('人称代词', 'personal pronoun'),            'rz': ('指示代词', 'demonstrative pronoun', {                'rzt': ('时间指示代词', 'temporal demonstrative pronoun'),                'rzs': ('处所指示代词', 'locative demonstrative pronoun'),                'rzv': ('谓词性指示代词', 'predicate demonstrative pronoun'),            }),            'ry': ('疑问代词', 'interrogative pronoun', {                'ryt': ('时间疑问代词', 'temporal interrogative pronoun'),                'rys': ('处所疑问代词', 'locative interrogative pronoun'),                'ryv': ('谓词性疑问代词', 'predicate interrogative pronoun'),            }),            'rg': ('代词性语素', 'pronoun morpheme'),        }),        'm': ('数词', 'numeral', {            'mq': ('数量词', 'numeral-plus-classifier compound'),        }),        'q': ('量词', 'classifier', {            'qv': ('动量词', 'verbal classifier'),            'qt': ('时量词', 'temporal classifier'),        }),        'd': ('副词', 'adverb'),        'p': ('介词', 'preposition', {            'pba': ('介词“把”', 'preposition 把'),            'pbei': ('介词“被”', 'preposition 被'),        }),        'c': ('连词', 'conjunction', {            'cc': ('并列连词', 'coordinating conjunction'),        }),        'u': ('助词', 'particle', {            'uzhe': ('着', 'particle 着'),            'ule': ('了/喽', 'particle 了/喽'),            'uguo': ('过', 'particle 过'),            'ude1': ('的/底', 'particle 的/底'),            'ude2': ('地', 'particle 地'),            'ude3': ('得', 'particle 得'),            'usuo': ('所', 'particle 所'),            'udeng': ('等/等等/云云', 'particle 等/等等/云云'),            'uyy': ('一样/一般/似的/般', 'particle 一样/一般/似的/般'),            'udh': ('的话', 'particle 的话'),            'uls': ('来讲/来说/而言/说来', 'particle 来讲/来说/而言/说来'),            'uzhi': ('之', 'particle 之'),            'ulian': ('连', 'particle 连'),        }),       'e': ('叹词', 'interjection'),        'y': ('语气词', 'modal particle'),        'o': ('拟声词', 'onomatopoeia'),        'h': ('前缀', 'prefix'),        'k': ('后缀' 'suffix'),        'x': ('字符串', 'string', {            'xe': ('Email字符串', 'email address'),            'xs': ('微博会话分隔符', 'hashtag'),            'xm': ('表情符合', 'emoticon'),            'xu': ('网址URL', 'URL'),            'xx': ('非语素字', 'non-morpheme character'),        }),        'w': ('标点符号', 'punctuation mark', {            'wkz': ('左括号', 'left parenthesis/bracket'),            'wky': ('右括号', 'right parenthesis/bracket'),            'wyz': ('左引号', 'left quotation mark'),            'wyy': ('右引号', 'right quotation mark'),            'wj': ('句号', 'period'),            'ww': ('问号', 'question mark'),            'wt': ('叹号', 'exclamation mark'),            'wd': ('逗号', 'comma'),            'wf': ('分号', 'semicolon'),            'wn': ('顿号', 'enumeration comma'),            'wm': ('冒号', 'colon'),            'ws': ('省略号', 'ellipsis'),            'wp': ('破折号', 'dash'),            'wb': ('百分号千分号', 'percent/per mille sign'),            'wh': ('单位符号', 'unit of measure sign'),        }),    }

好,这回我们一下子完成了分词、词性标注、关键词提取。命名实体识别、句法分析以及查询问句分类我们之后再研究

转载地址:https://blog.csdn.net/jiangjingxuan/article/details/54729120 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:十一、0字节存储海量语料资源
下一篇:九、聊天机器人应该怎么做

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年04月22日 13时43分33秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章