【发布时间】:2011-04-12 23:33:58
【问题描述】:
我正在将特征向量实现为语料库中文档的位图。我已经有了整个语料库的词汇表(作为一个列表/集合)和每个文档中的术语列表。
例如,如果语料库词汇是['a', 'b', 'c', 'd'],文档d1 中的术语是['a', 'b', 'd', 'd'],那么d1 的特征向量应该是[1, 1, 0, 2]。
要生成特征向量,我会遍历语料库词汇并检查每个词是否在文档词列表中,然后将位设置在文档特征向量中的正确位置。
实现这一点的最有效方法是什么?以下是我考虑过的一些事情:
- 使用
set可以非常有效地检查词汇成员资格,但sets 没有排序,并且特征向量位需要按照已排序的语料库词汇表的顺序排列。 - 对语料库词汇使用
dict(将每个词汇项映射到任意值,如1)将允许迭代sorted(dict.keys()),这样我就可以跟踪索引。但是,我会有dict.values()的空间开销。 - 使用
sorted(list)将无法检查成员资格。
StackOverflow 有什么建议?
【问题讨论】:
-
为什么排序列表查找效率低?您是否需要比二分搜索提供的 O(log(n)) 更好?
-
数以万计的术语,数以千计的文档。我想最小化它,散列几乎允许
O(1)。 -
@yavoh:好的,公平点。您可以将初始文档术语的数据结构更改为集合而不是列表吗?你确定你真的需要这样的特征向量吗?您可以利用并行化吗?
-
我忘了提到我需要保存术语的频率,而不仅仅是术语的存在,我的错误 - 我已经更新了原始问题。所以,一套是行不通的。
-
@yavoh:啊哈,这完全改变了它;-)
标签: python hash dictionary