我正在構建用於SVM的我的詞n-gram訓練矢量。我跑了我的代碼,但花了我太多時間,超過10個小時。你有什麼方法讓它更快?如何讓我的Python代碼更有效?
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克的排序列表。
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」的值將不會以任何特定順序(字典未排序)。我不確定'0'和'1'的任意排序列表是否適合。你能澄清一下具體的輸出應該是什麼嗎? – Blckknght 2014-10-12 09:00:06
我編輯了這個問題。我想要做的是添加對應於排序詞n-gram列表global_vector的0和1的向量。但花了我10多個小時。你能給我一個更有效的方法嗎? – allenwang 2014-10-12 09:23:24