如何找到 ngram 在句子中的位置?
How to find position of an ngram in a sentence?
有没有办法找到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
但是 有没有一种不需要愚蠢的字符串转换的方法? 如果是这样,那是不是比 "string/regex hack" 更快的方法?
您可以使用一个函数来遍历单词列表的切片:
>>> 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
来自@Kasramvd 的解决方案,这是一个使用 NLTK 的 ngrams()
函数的单行答案:
from nltk import ngrams
def position_of_ngram(ngram,sentence):
return next(i for i, ng in enumerate(ngrams(sentence, len(ngram))) if ng == ngram)
为什么要自己搜索?这就是列表方法 index()
的用途:
def ngram_index(words, ngram):
return list(nltk.ngrams(words, len(ngram))).index(tuple(ngram))
有没有办法找到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
但是 有没有一种不需要愚蠢的字符串转换的方法? 如果是这样,那是不是比 "string/regex hack" 更快的方法?
您可以使用一个函数来遍历单词列表的切片:
>>> 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
来自@Kasramvd 的解决方案,这是一个使用 NLTK 的 ngrams()
函数的单行答案:
from nltk import ngrams
def position_of_ngram(ngram,sentence):
return next(i for i, ng in enumerate(ngrams(sentence, len(ngram))) if ng == ngram)
为什么要自己搜索?这就是列表方法 index()
的用途:
def ngram_index(words, ngram):
return list(nltk.ngrams(words, len(ngram))).index(tuple(ngram))