я написал функцию, которая в основном вычисляет обратную частоту документа (логарифмическая база 10 (общее количество документов/количество документов, содержащих определенное слово))
Мой код:
def tfidf(docs,doc_freqs):
res = []
t = sum(isinstance(i, list) for i in docs)
for key,val in doc_freqs.items():
res.append(math.log10(t/val))
pos = defaultdict(lambda:[])
for docID, lists in enumerate(docs):
for element in set(lists):
pos[element].append([docID] + res)
return pos
Мой вывод:
index = tfidf([['a', 'b', 'c'], ['a']], {'a': 2., 'b': 1., 'c': 1.})
index['a']
[[0, 0.0, 0.3010299956639812, 0.3010299956639812], [1, 0.0, 0.3010299956639812, 0.3010299956639812]]
index['b']
[[0, 0.0, 0.3010299956639812, 0.3010299956639812]]
Желаемый результат:
index = tfidf([['a', 'b', 'c'], ['a']], {'a': 2., 'b': 1., 'c': 1.})
index['a']
[[0, 0.0], [1, 0.0]]
index['b']
[[0, 0.3010299956639812]]
Поэтому в основном я хочу отображать только docid, в котором встречается этот термин, а затем только его значение idf. (т. е.) в приведенном выше примере, поскольку термин «a» встречается в обоих документах, значение idf равно 0 .
Может ли кто-нибудь предложить, какие изменения мне нужно внести в мой код, чтобы печатать только соответствующие значения idf в соответствии с термином, указанным во время выполнения??
Пожалуйста помоги !!! Заранее спасибо.