如何在python 3中制作n-gram?

时间:2017-09-21 13:43:24

标签: python-3.x

我遇到了一些问题,我知道在低于3的python版本中,你可以从库中导入ngram并在那里使用它。 但是我无法弄清楚如何在python 3中做到这一点,所以我一直试图按如下方式模拟它们:

def compute_ngrams(toks, n=2):
     d={}
     l=list(range(len(toks)-(n-1)))
     b=[]
     c=[]
     i=0
     while i < len(toks)-(n-1):
          if toks[i] in d:
                 l = toks[i],toks[i+1],
                 d[toks[i]]=[l]
          else:
                 l=(toks[i+1]),
                 d[toks[i]]=[l]
     i=i+1
print(d)
return d

print(d)仅用于衡量我的输出结果,我有两个错误:

(1)我的输出是这样的:

   {'i': [('really',)], 'really': [('really', 'like')], 'like': [('cake.',)]}

和(2)我试图让代码产生这个输出:

 {'i': [('really',)], 'like': [('cake.',)], 'really': [('really',), ('like',)]})

我想做的是: 选择一个随机密钥并将其用作段落的开始标记,作为下一步的当前标记。

从与当前标记关联的列表中选择一个随机元组,并将序列附加到该段落。所选序列的最后一个标记将是新的当前标记。

如果当前令牌是字典中的键,则只需重复步骤2,否则从字典中选择另一个随机键作为当前令牌,并在重复步骤2之前将其附加到段落。

我试图通过先创建一个列表来启动序列,每个插槽包含一个单词或标记,然后从那里开始,但这是我能够生成看起来很好的输出的唯一方法相似,跑了。

0 个答案:

没有答案