0

私はフレーズのリストを持っています。これらのフレーズの一部が大きなテキスト ブロックに含まれているかどうかを確認する必要があります。

例えば

  • Marshmallows are delicious and warm
  • Giant unicorns sign wonderful melodies of the imminent apocalypse
  • The wizards assaulted the fort, but forgot their spell books at home!

テキストのブロックは次のとおりです。

Marshmallows are delicious. I've been snacking on them while the wizards assaulted the fort. The unicorns sign wonderful melodies of those who forgot their spell books at home. [...]


追記:

「and」、「or」、句読点などのストップワードによる分割に頼ることはできません。


ライブラリや戦略に関するアイデアはありますか?

ありがとう :)

4

2 に答える 2

1

長さの降順で各フレーズの「部分」を作成し、テキストのブロックでこれらの部分を見つけることができます。

例えば

>>> text = "Marshmallows are delicious. I've been snacking on them while the wizards assaulted the fort. The unicorns sign wonderful melodies of those who forgot their spell books at home."
>>> phrase='Giant unicorns sign wonderful melodies of the imminent apocalypse'
>>> words = phrase.split()
>>> parts = list()
>>> for length in range(len(words),3,-1): #Assuming a part is atleast 3 words
    for start in range(0,len(words)-length + 1):
        parts.append(' '.join(words[start:start+length]))
>>> #A step of -1 ensures the list is sorted in a decreasing order of length.
>>> parts
['Giant unicorns sign wonderful melodies of the imminent apocalypse', 'Giant unicorns sign wonderful melodies of the imminent', 'unicorns sign wonderful melodies of the imminent apocalypse', 'Giant unicorns sign wonderful melodies of the', 'unicorns sign wonderful melodies of the imminent', 'sign wonderful melodies of the imminent apocalypse', 'Giant unicorns sign wonderful melodies of', 'unicorns sign wonderful melodies of the', 'sign wonderful melodies of the imminent', 'wonderful melodies of the imminent apocalypse', 'Giant unicorns sign wonderful melodies', 'unicorns sign wonderful melodies of', 'sign wonderful melodies of the', 'wonderful melodies of the imminent', 'melodies of the imminent apocalypse', 'Giant unicorns sign wonderful', 'unicorns sign wonderful melodies', 'sign wonderful melodies of', 'wonderful melodies of the', 'melodies of the imminent', 'of the imminent apocalypse']
>>> for part in parts:
    if part.lower() in text.lower(): #for case insensitivity
        found = part
        break

>>> found
'unicorns sign wonderful melodies of'
于 2012-10-07T01:18:45.490 に答える
0

検索可能な情報を保存して取得するための Xapian (結果 = 結果!) と、そこにいくつかのモジュールがあるレーベンシュタイン距離アルゴリズムを調べてください。

于 2012-10-07T01:21:38.797 に答える