使用python

时间:2018-02-09 21:34:56

标签: python dictionary nlp n-gram

您好我正在尝试生成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}

有人可以帮我调试吗。感谢

1 个答案:

答案 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,等等。