【问题标题】:Clustering Documents in Python在 Python 中聚类文档
【发布时间】:2013-02-01 04:39:10
【问题描述】:

我知道这个问题之前已经被问过并且有很多链接。我已经浏览了它们,无论如何,它们中的大多数都没有找到一个简单而简洁的回复。文档数量在4800左右。

就这样吧。

我正在使用 nltk 对大量文本文档进行聚类。到目前为止我所做的是

  1. 解析和标记化
  2. 停用词和词干

我要做的下一步是为每个文档找到一个 TF-IDF 向量。这样我就有 n 个长度相等的向量用于 n 个文档。

现在我需要将这些向量输入到我的 K-means 函数中并让它撕裂。

问题是,我做得对吗?

下一个问题与代码有关:

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-means 并不是 sparse 向量的最佳方法。特别是,您需要考虑在计算距离时以利用稀疏性的方式改进您的算法。

标签: machine-learning cluster-analysis k-means


【解决方案1】:

您写了有 4800 个文档,但没有指定文档的长度。无论如何,8 小时真的很长(带有一些标准欧几里德距离的 TF_IDF 并不算太贵)。

如果您想知道它是否在计数,只需查看负载平衡(例如 linux 中的uptime)。很可能有问题,您应该注意日志信息...

【讨论】:

    猜你喜欢
    • 2015-01-24
    • 1970-01-01
    • 2012-09-05
    • 2015-05-13
    • 2012-03-01
    • 2015-04-27
    • 2011-12-24
    • 2019-01-06
    • 2015-03-09
    相关资源
    最近更新 更多