用Python 写一个TF-ITF算法例子
时间: 2023-06-25 13:08:11 浏览: 187
人工智能-项目实践-文档相关性搜索-用python实现TF-IDF算法,用于文档的相关性搜索
TF-IDF(Term Frequency-Inverse Document Frequency)是一种用于信息检索和文本挖掘的常用加权技术。它可以用来评估一个单词对于一个文档集或一个语料库中的某个文档的重要程度。
下面是Python实现TF-IDF算法的示例代码:
```python
import math
from collections import Counter
def tf(word, doc):
return doc.count(word) / len(doc)
def n_containing(word, doclist):
return sum(1 for doc in doclist if word in doc)
def idf(word, doclist):
return math.log(len(doclist) / (1 + n_containing(word, doclist)))
def tfidf(word, doc, doclist):
return tf(word, doc) * idf(word, doclist)
doclist = ['This is a sample document.', 'Another sample document.', 'And a third one.', 'Is this the first document?']
all_words = []
for doc in doclist:
all_words += doc.lower().split()
word_count = Counter(all_words)
for word in word_count:
word_count[word] = word_count[word] / float(len(all_words))
unique_words = set(all_words)
tfidf_dict = {}
for word in unique_words:
tfidf_dict[word] = tfidf(word, doclist[0], doclist)
for word in sorted(tfidf_dict, key=tfidf_dict.get, reverse=True):
print(word, tfidf_dict[word])
```
首先,我们定义了四个函数:
- `tf(word, doc)`:计算单词在文档中的出现频率。
- `n_containing(word, doclist)`:计算包含指定单词的文档数量。
- `idf(word, doclist)`:计算指定单词的逆文档频率。
- `tfidf(word, doc, doclist)`:计算指定单词在文档中的TF-IDF值。
然后,我们定义了一个包含多个文档的列表和一个包含所有单词的列表。这里使用了Python的`collections`库中的`Counter`函数来计算单词出现的次数,并将其除以单词总数得到每个单词的频率。
接下来,我们计算每个单词的TF-IDF值,并将其存储在一个字典中。最后,我们按照TF-IDF值进行排序,并输出结果。
注意,这里的示例代码是使用Python的基本数据结构实现的,实际应用中可能需要使用更高效的数据结构和算法来处理大规模数据。
阅读全文