有没有办法找到一个句子中ngram的第一个位置?
>>> from nltk import ngrams
>>> hyp = ['he', 'read', 'the', 'book', 'because', 'he', 'was', 'interested', 'in', 'world', 'history']
>>> position_of_ngram(('the', 'book'), hyp)
2
目前,我正在使用一些字符串技巧:
>>> " ".join(hyp)[:" ".join(hyp).index(" ".join(('the', 'book')))].count(' ')
2
但是有没有办法做到这一点而没有愚蠢的字符串转换?如果是这样,与“字符串/正则表达式黑客”相比,这是一种更快的方法吗?
最佳答案
您可以使用一个函数遍历单词列表的片段:
>>> def position_of_ngram(words,hyp):
... lenght=len(words)
... for i,sublist in enumerate((hyp[i:i+lenght] for i in range(len(hyp)))):
... if words==sublist:
... return i
... return None
演示:
>>> position_of_ngram(['the', 'book'],hyp)
2
>>>
>>> position_of_ngram(['because', 'he'],hyp)
4