確かに、NLTKトークナイザーは、「引用符」で文を終了することを含め、ほとんどすべての文の区切りを処理するのに十分堅牢であるため、この状況で実際に使用する必要があります。あなたはこのようなことをすることができます(paragraph
ランダムジェネレーターから):
皮切りに、
from nltk.tokenize import sent_tokenize
paragraph = "How does chickens harden over the acceptance? Chickens comprises coffee. Chickens crushes a popular vet next to the eater. Will chickens sweep beneath a project? Coffee funds chickens. Chickens abides against an ineffective drill."
highlights = ["vet","funds"]
sentencesWithHighlights = []
最も直感的な方法:
for sentence in sent_tokenize(paragraph):
for highlight in highlights:
if highlight in sentence:
sentencesWithHighlights.append(sentence)
break
しかし、この方法を使用すると、実際には3倍のネストされたfor
ループができます。これは、最初にそれぞれをチェックしsentence
、次にそれぞれをチェックしhighlight
、次にの各サブシーケンスをチェックするsentence
ためhighlight
です。
各ハイライトの開始インデックスがわかっているため、パフォーマンスを向上させることができます。
highlightIndices = [100,169]
subtractFromIndex = 0
for sentence in sent_tokenize(paragraph):
for index in highlightIndices:
if 0 < index - subtractFromIndex < len(sentence):
sentencesWithHighlights.append(sentence)
break
subtractFromIndex += len(sentence)
どちらの場合でも、次のようになります。
sentencesWithHighlights = ['Chickens crushes a popular vet next to the eater.', 'Coffee funds chickens.']