【发布时间】:2018-12-25 21:54:18
【问题描述】:
我有一个包含 1000 万条新闻文章记录的大型 pandas 数据框。所以,这就是我申请TfidfVectorizer的方式。
from sklearn.feature_extraction.text import TfidfVectorizer
tfidf = TfidfVectorizer()
feature_matrix = tfidf.fit_transform(df['articles'])
处理所有文件需要很长时间。我只想一次迭代数据框中的每篇文章,还是我可以分块传递文档并不断更新现有词汇表而不覆盖旧的词汇表?
我已经完成了这个 SO post,但不完全了解如何将它应用到 pandas。我也听说过Python generators,但不知道它在这里是否有用。
【问题讨论】:
-
这就是 tfidfvectorizer 正在做的事情。它一次迭代一个文档并更新词汇表。你还想做什么。请详细说明。
-
@VivekKumar 感谢您的评论。我只想减少使用 TfidfVectorizer 处理文档的迭代时间。我现在做的好像是在计算结果矩阵时花费更多时间,因为它一次处理所有 df['article'] 我希望它一个一个地完成。通过
chunks或使用可迭代生成器在熊猫中一次传递一个文档,是否有更专业的方式在大型数据集上执行 Tfidf?希望你明白了 -
正如我上面所说,它不会一次性处理所有内容。在
fit()method of TfidfVectorizer 内部,它会迭代您传递的系列并一一处理,以填充词汇表和计数矩阵。然后它处理计数矩阵以准备 tfidf 矩阵。 -
@VivekKumar 那么,反过来计算
df['articles']的 Tfidf 会更方便 1000 万条记录吗? -
是的,您可以加快速度。见这里:stackoverflow.com/a/26212970/5025009
标签: python-3.x pandas scikit-learn nlp tfidfvectorizer