【发布时间】:2013-05-18 21:22:22
【问题描述】:
我已经看到了许多关于在干净的单线中制作直方图的问题,但我还没有发现有人试图尽可能高效地制作直方图。我目前正在为搜索算法创建大量 tfidf 向量,这涉及创建许多直方图和我当前的代码,虽然非常短且可读性不如我想的那么快。可悲的是,我尝试了许多其他方法,但结果要慢得多。你能做得更快吗? cleanStringVector 是一个字符串列表(全小写,没有标点符号),masterWordList 也是一个单词列表,应该包含 cleanStringVector 中的每个单词。
from collections import Counter
def tfidfVector(cleanStringVector, masterWordList):
frequencyHistogram = Counter(cleanStringVector)
featureVector = [frequencyHistogram[word] for word in masterWordList]
return featureVector
值得注意的是,Counter 对象为不存在的键返回零而不是引发 KeyError 是一个严重的优点,其他问题中的大多数直方图方法都未通过此测试。
示例:如果我有以下数据:
["apple", "orange", "tomato", "apple", "apple"]
["tomato", "tomato", "orange"]
["apple", "apple", "apple", "cucumber"]
["tomato", "orange", "apple", "apple", "tomato", "orange"]
["orange", "cucumber", "orange", "cucumber", "tomato"]
还有一个主要的词表:
["apple", "orange", "tomato", "cucumber"]
我想分别从每个测试用例返回以下内容:
[3, 1, 1, 0]
[0, 1, 2, 0]
[3, 0, 0, 1]
[2, 2, 2, 0]
[0, 2, 1, 2]
希望对你有帮助。
大概的最终结果:
Original Method: 3.213
OrderedDict: 5.529
UnorderedDict: 0.190
【问题讨论】:
标签: python performance histogram tf-idf