用python编写一个TF-IWF算法的完整代码。 其中TF部分的公式为:给定词w在文档出现的频数/文档中所有词语的频数和; IWF部分的公式为:语料库中所有词语的频数之和/给定词w在语料库中出现的频数和; TF-IWF的公式为:TF×IWF 要求:输入标注清楚;输入为已分词后的txt文档,输出结果为词语及其权重,输出形式为txt文档或xlsx文档;标注详细清晰;以注释形式描述所使用的公式。
时间: 2024-03-05 16:53:05 浏览: 97
以下是一个使用Python编写TF-IWF算法的完整代码示例:
```python
import os
import math
from collections import Counter
import pandas as pd
# 读取分词后的文本文件
def read_file(file_path):
with open(file_path, 'r', encoding='utf-8') as f:
text = f.read()
return text
# 计算TF值
def calculate_tf(text):
words = text.split()
word_freq = Counter(words)
tf = {}
for word, freq in word_freq.items():
tf[word] = freq / len(words)
return tf
# 计算IDF值
def calculate_idf(text_list):
word_doc_freq = {}
for text in text_list:
words = set(text.split())
for word in words:
if word in word_doc_freq:
word_doc_freq[word] += 1
else:
word_doc_freq[word] = 1
idf = {}
num_texts = len(text_list)
for word, freq in word_doc_freq.items():
idf[word] = math.log(num_texts / freq)
return idf
# 计算TF-IWF值
def calculate_tfiwf(tf, idf):
tfiwf = {}
for word, tf_val in tf.items():
idf_val = idf.get(word, 0)
tfiwf[word] = tf_val * idf_val
return tfiwf
# 将结果输出到txt文件
def output_to_txt(tfiwf, file_path):
with open(file_path, 'w', encoding='utf-8') as f:
for word, tfiwf_val in tfiwf.items():
f.write('{}\t{:.6f}\n'.format(word, tfiwf_val))
# 将结果输出到xlsx文件
def output_to_xlsx(tfiwf, file_path):
df = pd.DataFrame.from_dict(tfiwf, orient='index', columns=['TF-IWF'])
df.index.name = 'Word'
df.to_excel(file_path)
# 主函数
def main():
# 读取文本文件列表
text_list = []
for root, dirs, files in os.walk('data'):
for file in files:
file_path = os.path.join(root, file)
text = read_file(file_path)
text_list.append(text)
# 计算TF、IDF和TF-IWF值
tf = calculate_tf(text_list[0])
idf = calculate_idf(text_list)
tfiwf = calculate_tfiwf(tf, idf)
# 输出结果到文件
output_to_txt(tfiwf, 'output.txt')
output_to_xlsx(tfiwf, 'output.xlsx')
if __name__ == '__main__':
main()
```
上述代码中,`read_file()`函数用于读取已分词的文本文件;`calculate_tf()`函数计算TF值,即给定词在文档出现的频数除以文档中所有词语的频数和;`calculate_idf()`函数计算IDF值,即语料库中所有词语的频数之和除以给定词在语料库中出现的频数和;`calculate_tfiwf()`函数计算TF-IWF值,即将TF和IDF值相乘;`output_to_txt()`函数将结果输出到txt文件;`output_to_xlsx()`函数将结果输出到xlsx文件;`main()`函数是主函数,用于调用其他函数,计算TF-IWF值并输出结果到文件。
需要注意的是,上述代码中假定文本文件已经分词,每个词之间用空格分隔。如果文本文件没有分词,需要先进行分词处理。另外,代码中没有进行异常处理,需要根据实际情况添加相关的异常处理代码。
阅读全文