如何将文本拆分为 N-gram 并获取它们的偏移量

How to split a text into N-grams and get their offset

我想将文本拆分为 ngram,但也想获得它们在文本中的偏移量。
我目前在 Python 中使用 NLTK 库,但我没有找到任何本机方法来取回 N-gram 的偏移量。
我确实找到了 ,但我想知道是否有任何图书馆无需实施即可提供此功能。我的问题是我要拆分的文本中多次出现相同的 N-gram。

示例用法为:

    ngrams_with_offset("I like apples and I like oranges", 2)
    >>> [("I", "like", offset=0), 
         ("like", "apples", offset=2),
          ....... 
          ("I", "like", offset=18),
          ..... ]

我没有找到任何本机方法来执行此操作,因此我使用 NLTK 中的 align_tokens() 函数实现了自己的方法以适合我的用例。
它类似于这样的东西:

tokenized_text = [word for word in word_tokenize(text) if word.lower() not in stopwords]
alignment = align_tokens(tokenized_text, text)
tokenized_with_offset = [(tokenized_text[i], alignment[i]) for i in range(len(alignment))]
ngrams(tokenized_with_offset, n)