【问题标题】:Generate n-1 grams and n grams using python使用python生成n-1克和n克
【发布时间】:2018-02-09 21:34:55
【问题描述】:

您好,我正在尝试生成 n 和 n-1 克并计算 ngram 的概率。但是,生成的 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}

谁能帮我调试一下。谢谢

【问题讨论】:

    标签: python dictionary nlp n-gram


    【解决方案1】:

    目前尚不清楚您要做什么。您是否正在尝试创建一个字典,将所有顺序为“n”的 n-gram 映射到它们的频率,其中 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
    

    这给出 {'A': 2, 'B': 1, 'C': 3, 'D': 5, 'E': 3} 当 n = 1, {'A B': 1, ' B C': 1, 'C D': 3, 'D E': 3, 'E C': 1, 'A C': 1, 'D D': 1} 如果 n 更改为 2,等等。

    【讨论】:

      猜你喜欢
      • 2012-11-05
      • 2019-12-23
      • 2023-03-15
      • 1970-01-01
      • 2013-07-06
      • 2014-03-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多