Я понимаю, что этот вопрос задан раньше, и есть много ссылок. Я прошел через них, но большинство из них в любом случае, но, к сожалению, не смогли найти простой и краткий ответ. Количество документов составляет около 4800.Кластеризация документов в Python
Итак, вот оно.
Я использую nltk для группировки множества текстовых документов. То, что я сделал до сих пор
- Синтаксический и лексического
- стопслов и Морфологический
Следующий шаг, который я делаю, чтобы найти вектор TF-IDF для каждого документа. Итак, у меня есть n векторов равной длины для n документов.
Теперь мне нужно передать эти векторы в мою функцию K-mean и позволить ей копировать.
Вопрос: я делаю это правильно?
Следующий вопрос связан с кодом:
corpus = []
unique_terms = []
def TFIDF(document):
start_time = time.time()
word_tfidf = []
for word in unique_terms:
word_tfidf.append(collection.tf_idf(word,document))
print time.time() - start_time
return word_tfidf
if __name__ == '__main__':
count = 0
corpus = cPickle.load(open('C:\\Users\\Salman\\Desktop\\Work\\NLP\\Corpus\\FB\\save-3.p', 'rb')) ##read the corpus from file
collection = nltk.TextCollection(corpus)
unique_terms = list(set(collection))
vectors = [numpy.array(TFIDF(f)) for f in corpus]
print "Vectors created."
print "First 10 words are", unique_terms[:10]
print "First 10 stats for first document are", vectors[0][0:10]
Я уже скачал корпус (список векторов для каждого документа перед TF-IDF) в файл, который я читал в корпусе.
Проблема в том, что прошло 8 часов, и этот процесс еще не завершен. Я что-то пропустил? Или, как правило, TF-IDF занимает такое количество времени.
Обратите внимание, что k-средство - не самая лучшая идея для * редких * векторов. В частности, вам необходимо рассмотреть, чтобы улучшить алгоритм таким образом, чтобы он использовал разреженность при вычислении расстояний. –