训练一个关键词提取算法需要以下几个步骤:
1)加载已有的文档数据集;
2)加载停用词表;
3)对数据集中的文档进行分词;
4)根据停用词表,过滤干扰词;
5)根据数据集训练算法;
根据训练好的关键词提取算法对新文档进行关键词提取要经过以下环节:
1)对新文档进行分词;
2)根据停用词表,过滤干扰词;
3)根据训练好的算法提取关键词;
1 加载模块
import math
import jieba
import jieba.posseg as psg
from gensim import corpora, models
from jieba import analyse
import functools
2 定义好停用词表的加载方法
def get_stopword_list():
# 停用词表存储路径,每一行为一个词,按行读取进行加载
# 进行编码转换确保匹配准确率
stop_word_path = './stopword.txt'
stopword_list = [sw.replace('/n', '') for sw in open(stop_word_path).readlines()]
return stopword_list
3 定义一个分词方法
def seg_to_list(sentence, pos=False):
''' 分词方法,调用结巴接口。pos为判断是否采用词性标注 '''
if not pos:
# 不进行词性标注的分词方法
seg_list = jieba.cut(sentence)
else:
# 进行词性标注的分词方法
seg_list = psg.cut(sentence)
return seg_list
4 定义干扰词过滤方法
def word_filter(seg_list, pos=False):
'''
1. 根据分词结果对干扰词进行过滤;
2. 根据pos判断是否过滤除名词外的其他词性;
3. 再判断是否在停用词表中,长度是否大于等于2等;
'''
stopword_list = get_stopword_list() # 获取停用词表
filter_list = [] # 保存过滤后的结果
# 下面代码: 根据pos参数选择是否词性过滤
## 下面代码: 如果不进行词性过滤,则将词性都标记为n,表示全部保留
for seg in seg_list:
if not pos:
word = seg
flag = 'n'
else:
word = seg.word # 单词
flag = seg.flag # 词性
if not flag.startswith('n'):
continue
# 过滤停用词表中的词,以及长度为<2的词
if not word