您好我正在尝试生成n和n-1克并计算ngrams的概率。但是,生成的n-1克并不是每个子列表的最后一个元素。有人可以帮我弄清楚我哪里出错了。
Input:
input1 = [['A', 'B', 'C', 'D', 'E'],
['D', 'E', 'C', 'D', 'E'],
['A', 'C', 'D', 'D']]
for line in input_text:
for i in range (len(line)-n+1):
g = ' '.join(line[i:i+n])
ngram.setdefault(g, 0)
ngram[g] += 1
h = ' '.join(line[i:i+n-1])
history.setdefault(h, 0)
history[h] +=1
n-1克的输出即历史如下: {'D':4,'A':2,'C':3,'B':1,'E':1}
然而,它应该是{'D':4,'A':2,'C':3,'B':1,'E':3}
有人可以帮我调试吗。感谢
答案 0 :(得分:0)
目前还不完全清楚你要做什么。您是否正在尝试创建一个字典,将所有n-g的顺序'n'映射到它们的频率,其中n可以设置为等于1为unigrams,2为bigrams等等?如果是这样,您只需要:
input1 = [['A', 'B', 'C', 'D', 'E'],
['D', 'E', 'C', 'D', 'E'],
['A', 'C', 'D', 'D']]
n = 1
ngram = {}
for line in input1:
for i in range (len(line)-n+1):
g = ' '.join(line[i:i+n])
ngram.setdefault(g, 0)
ngram[g] += 1
当n = 1,{'A B':1'时,这给{'A':2,'B':1,'C':3,'D':5,'E':3} B C':1,'C D':3,'D E':3,'E C':1,'A C':1,'D D':1}如果n变为2,等等。