自然语言处理:分词(断词)与关键词提取方法(一)

自然语言处理:scrapy爬取关键词信息(二)
自然语言处理:问答语料生成词汇表,词转向量(三)

1 分词工具

  • jieba
pip/pip3 install jieba
  • pynlpir
pip/pip3 install pynlpir

2 jieba分词

  • Demo
import jieba

#use jieba cut words
str = "我是最懂你的聊天机器人小辛!"
#分词
segWords_allmode = jieba.cut(str,cut_all=True)
segWords_accuratemode = jieba.cut(str,cut_all=False)
segWords_defaultmode = jieba.cut(str)
segWords_searchenginemode = jieba.cut_for_search(str)
#class generator
print(type(segWords_allmode))
#输出结果转为string类型,用“/”隔开
allmode = "/".join(segWords_allmode)
accmode = "/".join(segWords_accuratemode)
defaultmode = "/".join(segWords_defaultmode)
searchmode = "/".join(segWords_searchenginemode)
#class str
print(type(allmode))
#分词结果容器:list
segResults = []
# class list
print(type(segResults))
#添加分词结果
segResults.append(allmode)
segResults.append(accmode)
segResults.append(defaultmode)
segResults.append(searchmode)
#输出结果
print("全模式分词结果:"+segResults[0])
print("精确模式分词结果:"+segResults[1])
print("默认模式分词结果:"+segResults[2])
print("搜索引擎分词结果:"+segResults[3])
#list转为string
outputResults = "".join(segResults)
# class str
print(type(outputResults))
#保存结果值segResults.txt中
output = open('segResults.txt','w',encoding='utf-8')
#save results in segResults.txt
# print(segResults,file = output)
output.write(outputResults)
output.close()

  • Result
全模式分词结果:我/是/最/懂/你/的/聊天/天机/机器/机器人/小/辛//
精确模式分词结果:我/是/最/懂/你/的/聊天/机器人/小辛/!
默认模式分词结果:我/是/最/懂/你/的/聊天/机器人/小辛/!
搜索引擎分词结果:我/是/最/懂/你/的/聊天/机器/机器人/小辛/!

3 pynlpir

3.1 分词(断词)

  • 函数
    pynlpir.segment(s, pos_tagging=True, pos_names=‘parent’, pos_english=True)

  • 参数描述

序号参数描述
1s待分割的中文文本,编码为Unicode或UTF-8的字符串
2pos_taggingbool,设置是否包含语音标记,默认True,即是否显示词性
3pos_names返回发音部分的类型名称,有三种:parent,child和all,
parent为通用名称
child为特定名称
all返回全部名称
4pos_englishbool,设置返回发音部分名称的语言True为英语,False为汉语
  • Demo
import pynlpir

s = "我是一个大坏蛋"
# open API
pynlpir.open()
# segmention word
segments = pynlpir.segment(s, pos_tagging=True, pos_names='all', pos_english=False)
print("Type of segmention words: {}".format(type(segments)))
print("Segmention words: {}".format(segments))
print("分词", '\t', 'parent:child')
for segment in segments:
	print(segment[0], '\t', segment[1])
# close API
pynlpir.close()
  • Result
Type of segmention words: <class 'list'>
Segmention words: [('我', '代词:人称代词'), ('是', '动词:动词"是"'), ('一个', '数词:数量词'), ('大', '形容词'), ('坏蛋', '名词')]
分词 	 parent:child
我 	     代词:人称代词
是 	     动词:动词"是"
一个 	 数词:数量词
大 	     形容词
坏蛋 	 名词
  • Analysis
    (1) 分词返回结果为list,列表中元素为tuple;
    (2) tuple由两部分组成:(token, pos),第一个元素为分词结果,第二个元素为词性,词性分为两部分:parent和child;

3.2 关键词提取

  • 函数
    pynlpir.get_key_words(s, max_words=50, weighted=False)

  • 参数描述

序号参数描述
1s待分割的中文文本,编码为Unicode或UTF-8的字符串
2max_words关键词的最大数量,默认为50个
3weightedbool,设置是否返回关键词在文本中的权重
  • Demo
import pynlpir

s = "我是一个大坏蛋"
# open API
pynlpir.open()
# extraction keywords
keywords = pynlpir.get_key_words(s, weighted=True)
print("Type of keywords: {}".format(type(keywords)))
print("Keywords: {}".format(keywords))
print("keywords",  'weights')
for keyword in keywords:
	# print("Type of keyword: {}".format(type(keyword)))
	# print("Keyword value: {}".format(keyword))
	print(keyword[0], '\t', keyword[1])
# close API
pynlpir.close()
  • Result
Type of keywords: <class 'list'>
Keywords: [('坏蛋', 1.2), ('一个', 0.4)]
keywords weights
坏蛋 	 1.2
一个 	 0.4

[参考文献]
[1]https://pynlpir.readthedocs.io/en/latest/api.html#pynlpir-nlpir
[2]http://www.shareditor.com/blogshow/?blogId=74


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天然玩家

坚持才能做到极致

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值