有没有办法找到一个句子中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

10-05 22:55