用python编写一个TF-IDF算法的完整代码,该代码用于计算评论信息。 要求:输入输出标注清楚;输入为已分词后的txt文档,输出结果为排序后的词语及TF-IDF值,输出形式为xlsx文档;标注详细清晰;以注释形式描述所使用的公式。
时间: 2024-03-05 09:54:11 浏览: 69
好的,以下是Python编写的评论TF-IDF算法的完整代码:
```python
import math
import pandas as pd
from collections import Counter
# 计算TF值
def calc_tf(word_list):
word_count = Counter(word_list)
word_num = len(word_list)
tf_dict = {}
for word, count in word_count.items():
tf_dict[word] = count / word_num
return tf_dict
# 计算IDF值
def calc_idf(word_lists):
idf_dict = {}
doc_num = len(word_lists)
word_sets = set(word for word_list in word_lists for word in word_list)
for word in word_sets:
count = sum(1 for word_list in word_lists if word in word_list)
idf_dict[word] = math.log(doc_num / count)
return idf_dict
# 计算TF-IDF值
def calc_tfidf(tf_dict, idf_dict):
tfidf_dict = {}
for word, tf in tf_dict.items():
idf = idf_dict[word]
tfidf_dict[word] = tf * idf
return tfidf_dict
# 读取评论文本文件并分词
def read_file(file_path):
with open(file_path, 'r', encoding='utf-8') as f:
lines = f.readlines()
word_lists = []
for line in lines:
word_list = line.strip().split()
word_lists.append(word_list)
return word_lists
# 将TF-IDF结果保存为Excel文件
def save_to_excel(tfidf_dict, file_path):
sorted_tfidf = sorted(tfidf_dict.items(), key=lambda x: x[1], reverse=True)
data = {'word': [], 'tf-idf': []}
for word, tfidf in sorted_tfidf:
data['word'].append(word)
data['tf-idf'].append(tfidf)
df = pd.DataFrame(data)
df.to_excel(file_path, index=None)
if __name__ == '__main__':
# 读取评论文本文件并分词
word_lists = read_file('comments.txt')
# 计算TF值
tf_dicts = []
for word_list in word_lists:
tf_dict = calc_tf(word_list)
tf_dicts.append(tf_dict)
# 计算IDF值
idf_dict = calc_idf(word_lists)
# 计算TF-IDF值
tfidf_dicts = []
for tf_dict in tf_dicts:
tfidf_dict = calc_tfidf(tf_dict, idf_dict)
tfidf_dicts.append(tfidf_dict)
# 将TF-IDF结果保存为Excel文件
save_to_excel(tfidf_dicts[0], 'comments_tfidf.xlsx')
```
以上是完整的评论TF-IDF算法代码,下面是对代码中的各个函数和变量进行详细说明:
- `calc_tf(word_list)`:计算一条评论的TF值,其中`word_list`为已分词的单词列表。
- `calc_idf(word_lists)`:计算多条评论的IDF值,其中`word_lists`为已分词的单词列表的列表。
- `calc_tfidf(tf_dict, idf_dict)`:根据给定的TF值和IDF值计算TF-IDF值,其中`tf_dict`为一条评论的TF值,`idf_dict`为多条评论的IDF值。
- `read_file(file_path)`:读取指定路径下的评论文本文件,并分词得到单词列表的列表。
- `save_to_excel(tfidf_dict, file_path)`:将TF-IDF值结果保存为Excel文件,其中`tfidf_dict`为计算得到的TF-IDF值字典,`file_path`为保存的文件路径。
在主函数中,我们首先读取评论文本文件并计算它们的TF-IDF值,然后将结果保存为Excel文件。需要注意的是,这里我们假设每条评论为一行,因此需要使用`readlines()`读取每一行评论。另外,需要使用`strip()`去除每行评论末尾的空白符,以免影响分词结果。
阅读全文