2013-02-16 113 views
0

我知道這個問題之前已經被問過了,並且有很多鏈接。我經歷過他們,無論如何他們中的大多數人,但可悲的是沒有找到一個簡單而簡潔的反應。文件的數量約爲4800.在Python中對文檔進行聚類

所以,它就是這樣。

我正在使用nltk來羣集多個文本文檔。我所做的到現在是

  1. 解析和符號化
  2. 停用詞和詞幹

,我做的是找到每個文檔的TF-IDF矢量下一步。所以我有n個向量長度相等的n個文檔。

現在我需要將這些向量喂入我的K均值函數並讓它翻轉。

問題是,我做對了嗎?

下一個問題是有關的代碼:

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-means不是* sparse * vectors的最佳主意。尤其是,您需要考慮在計算距離時利用稀疏性來改進算法。 – 2013-02-20 19:27:39

回答

0

你寫的那裏有4800個文件,但沒有指定文件的長度。無論如何,8小時真的很長時間(TF_IDF與一些標準的歐幾里得距離並不太昂貴)。

如果您想知道它是否在計數,只需查看負載平衡(例如,在Linux中爲uptime)。最可能出現問題,你應該照看日誌信息...