中文文本分析--------关键词提取
1. 添加自定义词库,保证准确率(根据具体语境建立词库);
jieba.load_userdict(file_name) #file_name为自定义语料库的路径。
2.加载停用词词库;
jieba.analyse.set_stop_words(file_name) #file_name为自定义语料库的路径。
关键词提取所使用停用词(Stop Words)文本语料库可以切换成自定义语料库的路径。
如:jieba.analyse.set_stop_words("../extra_dict/stop_words.txt")
3.根据词语权重提取关键词
import jieba.analyse
jieba.analyse.extract_tags(sentence, topK = 20, withWeight = False, allowPOS = ())
# sentence:待提取的文本。
# topK:返回几个 TF/IDF 权重最大的关键词,默认值为20。
# withWeight:是否一并返回关键词权重值,默认值为False。
# allowPOS:仅包括指定词性的词,默认值为空,即不进行筛选。
1,2,3是jieba库的具体函数方法使用,自定义词库,停用词词库就要根据实际情况进行创建。
执行代码如下:(路径及词库需要更改)
[Python] 纯文本查看 复制代码 # -*- coding: utf-8 -*-
# @Author : Jia
# @Version : Python3.6
# 对输入的文本内容,返回其特征词(词数上限为5)
import os
# from glob import glob
import re
import sys
import jieba
from jieba import analyse
def run():
# 添加自定义词库,保证准确率
sys_path = sys.path[0]
jieba.load_userdict(os.path.join(sys_path, 'dict', 'extract_tags_dict.txt'))
'''
基本方法:jieba.analyse.extract_tags(sentence, topK)
需要先import jieba.analyse,其中sentence为待提取的文本,topK为返回几个TF/IDF权重最大的关键词,默认值为20
1. 预处理,首先进行分词和词性标注,将满足指定词性的词作为候选词;
2. 分别计算每个词的TF-IDF值;
3. 根据每个词的TF-IDF值降序排列,并输出指定个数的词汇作为可能的关键词;
'''
tfidf = analyse.extract_tags
'''
# 关键词提取所使用停用词(Stop Words)文本语料库可以切换成自定义语料库的路径。
# jieba.analyse.set_stop_words(file_name) #file_name为自定义语料库的路径。
# 如:jieba.analyse.set_stop_words("../extra_dict/stop_words.txt")
主要思想是分词过后,遍历一下停用词表,去掉停用词。
'''
analyse.set_stop_words(os.path.join(sys_path, 'dict', 'stopfile_taibao_tags.txt'))
# 词性限制集合为["ns", "n", "vn", "v", "nr"],表示只能从词性为地名、名词、动名词、动词、人名这些词性的词中抽取关键词。
allowPOS = ["n", "vn", "v", "nt", "nz"]
withWeight = False
withFlag = False
tags = []
info = {}
# 获取命令行参数
text = sys.argv[-1]
print(text)
# text = re.split('(来电|致电|客户|保险?人|业务员|(投|被)保人|员工).{0,5}(表示|称|询问|投诉|反映|要求|(查|咨)询|报案)|(客户|保险?人|业务员|(投|被)保人|员工).{0,5}(来电|致电)|来电|致电', text, 1)[-1]
#
# print(text)
# text = re.split('[,。!、,](烦)?请(贵部|相关部门|有关部门)?.*?(核实|处理|联系|知晓)|联系电话|,谢谢|谢谢|电话?号|预警', text, 1)[0]
# print(text)
'''
来电业务员,表示反要求报案
# import jieba.analyse
# jieba.analyse.extract_tags(sentence, topK = 20, withWeight = False, allowPOS = ())
# sentence:待提取的文本。
# topK:返回几个 TF/IDF 权重最大的关键词,默认值为20。
# withWeight:是否一并返回关键词权重值,默认值为False。
# allowPOS:仅包括指定词性的词,默认值为空,即不进行筛选。
'''
keywords = tfidf(text, topK=5, withWeight=withWeight, allowPOS=allowPOS, withFlag=withFlag)
print(keywords)
cut_result = jieba.cut(text)
print(type(cut_result))
cut_result = [i for i in cut_result]
print('/'.join(cut_result))
index = {}
for item in keywords:
# 分别为关键词和相应的权重
# item[0], item[1]
try:
index[item] = cut_result.index(item)
except:
index[item] = len(cut_result)-1
# 升序排列
print(index)
index = sorted(index.items(), key=lambda x: x[1], reverse=False)
for key, value in index:
tags.append(key)
# print(key, end='/')
info['rulename'] = '特征词抽取'
info['bool'] = 'true'
info['tag'] = tags
info['keytext'] = '{}'
print(info)
if __name__ == '__main__':
run()
# python3 /home/python/Desktop/药品/1jieba/py/py/py/taibao_tags_extract.py '是电话推销的,70周岁返还有点不太现实,要求退保'
下图是在终端的测试及结果图片:
小结:
jieba分词库可以简单快速的处理中文文本,可以用于分词,词性输出,关键词输出,词频统计等。
|