我现在有一个已经分过词并且去除过停用词的名为“2015.txt”的文档,其内容为“词:词频”形式的字典。要对“2015.txt”基于TF-IDF抽取关键词,另有一个文档,其中包含了很多篇子文档,每篇子文档都以“本篇文章为:”开头,要将这个文档作为TF-IDF的语料库,提取“2015.txt”的关键词,用词在“2015.txt”中出现的次数除以语料库中包含词的文档数表示tf-idf,请你用python实现,请直接从读取语料库这一步开始
时间: 2023-12-26 12:06:43 浏览: 277
好的,以下是实现代码:
```python
import jieba
import math
# 读取语料库
corpus = []
with open('corpus.txt', 'r', encoding='UTF-8') as f:
content = f.read()
docs = content.split('本篇文章为:')[1:]
for doc in docs:
corpus.append(list(jieba.cut(doc)))
# 读取2015.txt
word_dict = {}
with open('2015.txt', 'r', encoding='UTF-8') as f:
for line in f:
word, freq = line.strip().split(':')
word_dict[word] = int(freq)
# 计算每个词的tf-idf值
word_tfidf = {}
doc_num = len(corpus)
for word, freq in word_dict.items():
word_count = 0
for doc in corpus:
if word in doc:
word_count += 1
tf = freq / sum(word_dict.values())
idf = math.log(doc_num / (word_count + 1))
word_tfidf[word] = tf * idf
# 排序并输出前N个关键词
N = 10
keywords = sorted(word_tfidf.items(), key=lambda x: x[1], reverse=True)[:N]
for keyword in keywords:
print(keyword[0])
```
假设语料库文件名为“corpus.txt”,将上述代码保存为.py文件后运行即可。其中,jieba用于分词,math用于计算对数,N表示要提取的关键词个数,可以自行设置。
阅读全文