我正在尝试为TF-IDF矢量化计算IDF值。我正在尝试计算包含词汇的每个唯一词的文档数。
这是语料库:
语料库= ['这是第一个文档',“本文件是第二份文件”,“这是第三个”,“这是第一份文件吗?”
我的代码:
...
for i in range(0,len(corpus)):
o=corpus[i].split(' ')
c=0
for wor in n:
for k in range(0,len(corpus)):
if wor in o[k]:
c=c+1
print(wor, c)
...
我得到的输出是:和0文件0前1是3一三第二三4第三四这5和0文件1前1是3一三第二三4第三四这5和1文件1前1是3一三第二三4第三四这5和0文件0前1是3一三第二三4第三四这5
我需要的输出:这4是44前2文件3第二个1和1第三名一个1
这对于Counter
包中的collections
类是完美的
from collections import Counter
words = ' '.join(corpus)
output = Counter(words.split()).most_common()
我假设n
包含您的词汇。然后您可以执行此操作:
wordsets = [ frozenset(document.split(' ')) for document in corpus ]
results = []
for word in n:
count = sum( 1 for s in wordsets if word in s )
results.append((count, word))
for count, word in sorted(results, reverse=True):
print(word, count)
您可以执行此操作。但是,您要计算的不是IDF。这只是所有文档中特定单词的出现频率。
for i in range(0,len(corpus)):
words=corpus[i].split(' ')
for word in words:
if word in freq:
freq[word] = freq[word] + 1
else:
freq[word] = 1
print(freq)