2013-02-16 2 views
0

Я понимаю, что этот вопрос задан раньше, и есть много ссылок. Я прошел через них, но большинство из них в любом случае, но, к сожалению, не смогли найти простой и краткий ответ. Количество документов составляет около 4800.Кластеризация документов в Python

Итак, вот оно.

Я использую nltk для группировки множества текстовых документов. То, что я сделал до сих пор

  1. Синтаксический и лексического
  2. стопслов и Морфологический

Следующий шаг, который я делаю, чтобы найти вектор 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 занимает такое количество времени.

+0

Обратите внимание, что k-средство - не самая лучшая идея для * редких * векторов. В частности, вам необходимо рассмотреть, чтобы улучшить алгоритм таким образом, чтобы он использовал разреженность при вычислении расстояний. –

ответ

0

Вы написали 4800 документов, но не указали длину документов. Во всяком случае, 8 часов действительно долгое время (TF_IDF с некоторым стандартным эвклидовым расстоянием не слишком дорого).

Если вы хотите узнать, подсчитывает ли он, просто посмотрите на баланс нагрузки (например, uptime в linux). Скорее всего, что-то не так, и вы должны следить за информацией о регистрации ...

Смежные вопросы