利用train函数、viterbi函数和cut函数对文本news.txt进行高频词提取¶
时间: 2024-01-08 08:02:26 浏览: 92
首先需要对文本进行分词和词性标注,可以使用jieba库和pynlpir库。这里以jieba库为例。
import jieba
import jieba.posseg as pseg
# 读取文本
with open('news.txt', 'r', encoding='utf-8') as f:
text = f.read()
# 分词和词性标注
words = pseg.cut(text)
# 统计词频
freq = {}
for word, pos in words:
if pos.startswith('n') or pos.startswith('v'): # 只考虑名词和动词
freq[word] = freq.get(word, 0) + 1
# 按词频排序
freq_sorted = sorted(freq.items(), key=lambda x: x[1], reverse=True)
# 输出前10个高频词
for word, count in freq_sorted[:10]:
print(word, count)
接下来使用train函数、viterbi函数和cut函数对文本进行高频词提取。需要注意的是,对于中文文本,需要使用自定义的HMM模型,因为jieba库默认的HMM模型对中文的处理效果不是很好。
import jieba
import jieba.posseg as pseg
import jieba.analyse
# 读取文本
with open('news.txt', 'r', encoding='utf-8') as f:
text = f.read()
# 训练自定义的HMM模型
jieba.load_userdict('userdict.txt')
jieba.train('train.txt')
# 提取关键词
keywords = jieba.analyse.extract_tags(text, topK=10, withWeight=True)
# 输出关键词及权重
for keyword, weight in keywords:
print(keyword, weight)
其中,userdict.txt是一个用户自定义的词典,用于jieba库的分词。train.txt是一个训练集,用于训练自定义的HMM模型。这两个文件需要提前准备好。
阅读全文