【问题标题】:Imposing a cap on word count in scikit learn在 scikit learn 中设置字数上限
【发布时间】:2018-09-23 11:49:03
【问题描述】:
我正在分析歌词,其中重复并不一定意味着更高的重要性,所以我想限制每个文档的字数。例如,如果一个词在一首歌中出现n 次,其中n > threshold,那么我会将n替换为threshold。
我检查了CountVectorizer docs,有min_df 和max_df 的选项,但这些只能忽略出现在一些文档中的单词,而不是出现的单词在一个单个文档中的n 次。
我正在考虑更改稀疏矩阵的元素(例如,查找所有元素 > 阈值,然后替换),但我也找不到解决方法。提前致谢!
【问题讨论】:
标签:
python
scikit-learn
nlp
sparse-matrix
text-mining
【解决方案1】:
我不知道 scikit learn 中的任何预建功能,但您绝对可以直接编辑您的 doc-term 矩阵,例如 numpy.where:
x = numpy.where(x < threshold, x, threshold)
x 是您的文档术语矩阵,threshold 是您的阈值。
编辑:
我没有意识到 numpy.where 不适用于 scipy 稀疏矩阵。您可以使用scipy.sparse 中的find function,它将返回稀疏矩阵中的所有非0 索引,以便直接访问和修改这些值:
from scipy.sparse import find
results = find(x > threshold)
for i in range(len(results[0])):
x[results[0][i], results[1][i]] = threshold
它明显不那么优雅,但它可以工作。