Я использую код TF-IDF от здесь в моем наборе документов, который состоит из 3 документов PDF, каждый размером около 270 страниц.
# Calculating the Term Frequency, Inverse Document Frequency score
import os
import math
from textblob import TextBlob as tb
def tf(word, blob):
return tb(blob).words.count(word) / len(tb(blob).words)
def n_containing(word, bloblist):
return sum(1 for blob in bloblist if word in tb(blob).words)
def idf(word, bloblist):
return math.log(len(bloblist) / (1 + n_containing(word, bloblist)))
def tfidf(word, blob, bloblist):
return tf(word, blob) * idf(word, bloblist)
# Stemming the articles
from nltk.stem import PorterStemmer
port = PorterStemmer()
bloblist = []
doclist = [pdf1, pdf2, pdf3] # Defined earlier, not showing here as it is not relevant to the question
for doc in doclist:
bloblist.append(port.stem(str(doc)))
# TF-IDF calculation on the stemmed articles
for index, blob in enumerate(bloblist):
print("Top words in document {}".format(index + 1))
scores = {word: tfidf(word, blob, bloblist) for word in tb(blob).words}
sorted_words = sorted(scores.items(), key=lambda x: x[1], reverse=True)
i=1
for word, score in sorted_words[:5]:
print("\tWord "+str(i)+": {}, TF-IDF: {}".format(word, round(score, 5)))
i+=1
Проблема в том, чтопросто продолжает работать, не отображая ничего, кроме Top words in document 1
.Почему вычисление scores
занимает так много времени?Я держал его в течение часа, и код не закончился.Ранее я опробовал код для 50 нечетных текстовых файлов, которые были значительно короче (например, 2-3 абзаца в среднем), и там он мог мгновенно показывать результаты TF-IDF.Что не так с 3 документами по 270 страниц каждый?