自然语言处理: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) -
参数描述
序号 | 参数 | 描述 |
---|---|---|
1 | s | 待分割的中文文本,编码为Unicode或UTF-8的字符串 |
2 | pos_tagging | bool,设置是否包含语音标记,默认True,即是否显示词性 |
3 | pos_names | 返回发音部分的类型名称,有三种:parent,child和all, parent为通用名称 child为特定名称 all返回全部名称 |
4 | pos_english | bool,设置返回发音部分名称的语言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) -
参数描述
序号 | 参数 | 描述 |
---|---|---|
1 | s | 待分割的中文文本,编码为Unicode或UTF-8的字符串 |
2 | max_words | 关键词的最大数量,默认为50个 |
3 | weighted | bool,设置是否返回关键词在文本中的权重 |
- 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
-
Analysis
(1) 关键词提取返回为list,列表元素由tuple组成;
(2) tuple元素由两部分组成:(word, weight),第一个元素为关键词,第二个元素为关键词权重;
[参考文献]
[1]https://pynlpir.readthedocs.io/en/latest/api.html#pynlpir-nlpir
[2]http://www.shareditor.com/blogshow/?blogId=74