tf-idf有点大(65k)的文本文件

KBA*_*KBA 2 nlp nltk tf-idf scikit-learn

我想用scikit-learn尝试tfidf(或者nltk或者对其他建议持开放态度).我拥有的数据是相当多的讨论论坛帖子(~65k)我们已经抓取并存储在mongoDB中.每个帖子都有帖子标题,帖子的日期和时间,帖子消息的文本(或者re:如果对现有帖子的回复),用户名,消息ID以及是否是子帖或父帖(在帖子中) ,你有原始帖子,然后回复此操作,或嵌套回复,树).

我想每个帖子,将是一个单独的文档,类似于20newsgroups,每个文档将有我在顶部提到的字段,并在底部的消息发布的文本,我将从mongo中提取并写入到每个文本文件所需的格式.

为了将数据加载到scikit,我知道的:
http://scikit-learn.org/dev/modules/generated/sklearn.datasets.load_files.html (但我的数据未分类) 的http:// scikit学习. org/stable/modules/generated/sklearn.feature_extraction.text.TfidfVectorizer.html - 对于输入,我知道我会使用文件名,但因为我会有大量的文件(每个帖子),有没有办法要么从文本文件中读取文件名?或者是否有某些示例实现有人可以指向我?

此外,任何关于为每个这些讨论论坛帖子构建文件名的建议,以便稍后识别我何时获得tfidf向量和余弦相似性数组

谢谢

ogr*_*sel 5

您可以传递python生成器或文件名或字符串对象的生成器表达式而不是列表,因此可以随时从驱动器中进行延迟加载数据.这是一个CountVectorizer将生成器表达式作为参数的玩具示例:

>>> from sklearn.feature_extraction.text import CountVectorizer
>>> CountVectorizer().fit_transform(('a' * i for i in xrange(100)))
<100x98 sparse matrix of type '<type 'numpy.int64'>'
    with 98 stored elements in Compressed Sparse Column format>
Run Code Online (Sandbox Code Playgroud)

请注意,生成器支持可以直接从MongoDB查询结果迭代器向量化数据,而不是通过文件名.

另外一个包含10个字符的65k文件名的列表,每个内存只有650kB(+ python列表的开销),所以提前加载所有文件名应该不是问题.

关于为每个这些讨论论坛帖子构建文件名的任何建议,以便稍后确定何时获得tfidf向量和余弦相似性数组

只需使用确定性排序即可在将文件名列入向量化程序之前对文件名列表进行排序.