用python编写一个TF-IDF算法的完整代码。 要求:使用Counter包,语料库为整个csv文件,将已分词后的csv文件中的每行信息作为一个文档,并以列表形式呈现; 第一部分为导入信息; 第二部分为统计词频; 第三部分为TF计算过程; 第四部分为IDF计算过程; 第五部分为TF-IDF的计算过程; 第六部分为TF-IDF值排序(从大到小)及信息储存。 输入输出标注清楚;输入为已分词后的评论信息的csv文件(无需再分词),输出结果为排序后的词语及TF-IDF值,且无重复词语同时出现,输出形式为csv文档;标注详细清晰;以注释形式描述所使用的公式;计算过程均不运用向量。
时间: 2024-03-11 10:46:56 浏览: 65
以下是使用Python编写的TF-IDF算法的完整代码:
```python
import csv
from collections import Counter
import math
# 第一部分:导入信息
with open('data.csv', 'r', encoding='utf-8') as f:
reader = csv.reader(f)
corpus = [row for row in reader]
# 第二部分:统计词频
word_count = Counter()
for doc in corpus:
word_count.update(doc)
# 第三部分:TF计算过程
tf = {}
for doc in corpus:
doc_len = len(doc)
tf_doc = Counter(doc)
for word in tf_doc:
tf[(doc, word)] = tf_doc[word] / doc_len
# 第四部分:IDF计算过程
idf = {}
N = len(corpus)
for word in word_count:
count = sum(1 for doc in corpus if word in doc)
idf[word] = math.log(N / count)
# 第五部分:TF-IDF的计算过程
tf_idf = {}
for doc in corpus:
for word in set(doc):
tf_idf[(doc, word)] = tf[(doc, word)] * idf[word]
# 第六部分:TF-IDF值排序及信息储存
sorted_words = sorted(tf_idf, key=tf_idf.get, reverse=True)
unique_words = set(word for doc, word in sorted_words)
with open('tf_idf.csv', 'w', encoding='utf-8', newline='') as f:
writer = csv.writer(f)
writer.writerow(['Word', 'TF-IDF'])
for word in unique_words:
writer.writerow([word, tf_idf[(doc, word)]])
```
其中,`data.csv`为已分词后的评论信息的csv文件,每一行代表一个文档。算法的主要过程如下:
1. 统计词频:使用`Counter`包对整个语料库中的词语进行统计;
2. 计算TF值:对于每个文档中的每个词语,计算其在文档中的出现频率除以文档长度;
3. 计算IDF值:对于每个词语,计算其在语料库中出现的文档数,然后用语料库的文档总数除以该值,再取对数;
4. 计算TF-IDF值:将TF值和IDF值相乘;
5. 排序并储存:将TF-IDF值从大到小进行排序,并将结果储存在`tf_idf.csv`文件中。
在运行代码前,请将`data.csv`文件放在同一目录下,并且确保文件中的每一行都已经进行了分词。输出结果为排序后的词语及TF-IDF值,且无重复词语同时出现,输出形式为csv文档。
阅读全文