【发布时间】:2014-12-07 00:53:20
【问题描述】:
我正在构建用于 SVM 的单词 n-gram 训练向量。我运行了我的代码,但花了我太多时间,超过 10 个小时。你有什么方法让它更快吗?
def wordNgrams(s,n):
"""Calculate word n-grams and return a dictionary"""
input = s.split(' ')
output = {}
for i in xrange(len(input)-n+1):
g = " ".join(input[i:i+n]).lower()
output.setdefault(g,0)
output[g] += 1
return output
res 是 10000 个字符串的列表,每个字符串平均有 300 个单词。 global_vector 是 200000 个单词 2-gram 的排序列表。
X = []
for i in xrange(10000):
word_dic = wordNgrams(res[i], 2)
vector1 = {key : 1 if key in word_dic else 0 for key in global_vector}
od = OrderedDict(sorted(vector1.items(), key = lambda t : t[0]))
X.append(od.values())
说实话,需要 2 或 3 个小时是很常见的。但是我花了10多个小时。我真的没有我应该做的。请帮我。
【问题讨论】:
-
这似乎不是很有用。您附加到
X的值不会按任何特定顺序排列(字典没有顺序)。我不确定0s 和1s 的任意排序列表有什么用。你能澄清一下输出应该是什么吗? -
我已经编辑了问题。我想要做的是添加与排序的单词 n-gram 列表 global_vector 相对应的 0 和 1 的向量。但是我花了10多个小时。能给我一个更有效的方法吗?