我有一个输入文件,由带有数字和单词序列的行组成,结构如下:
\1-grams:
number w1 number
number w2 number
\2-grams:
number w1 w2 number
number w1 w3 number
number w2 w3 number
\end\
我想以这样一种方式存储单词序列(所谓的 n-gram),以便我可以轻松地检索每个唯一 n-gram 的两个数字。我现在做的事情如下:
all = {}
ngrams = {}
for line in open(file):
m = re.search('\\\([1-9])-grams:',line.strip()) # find nr of words in sequence
if m != None:
n = int(m.group(1))
ngrams = {} # reinitialize dict for new n
else:
m = re.search('(-[0-9]+?[\.]?[0-9]+)\t([^\t]+)\t?(-[0-9]+\.[0-9]+)?',line.strip()) #find numbers and word sequence
if m != None:
ngrams[m.group(2)] = '{0}|{1}'.format(m.group(1), m.group(3))
elif "\end\\" == line.strip():
all[int(n)] = ngrams
通过这种方式,我可以通过这种方式轻松快速地找到例如序列 s='w1 w2' 的数字:
all[2][s]
问题是这个存储过程相当慢,特别是当有很多(> 100k)的n-gram时,我想知道是否有更快的方法来实现相同的结果而不会降低访问速度。我在这里做的不是最理想的吗?我在哪里可以改进?
提前致谢,
乔里斯