我遇到了一些问题,我知道在低于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之前将其附加到段落。
我试图通过先创建一个列表来启动序列,每个插槽包含一个单词或标记,然后从那里开始,但这是我能够生成看起来很好的输出的唯一方法相似,跑了。