2013-02-16 125 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)。最可能出现问题,你应该照看日志信息...