3

Python /プログラミングは初めてなので、これをどのように表現するかはよくわかりません。

私がしたいのはこれです:文を入力し、入力された文と保存された文/文字列のセットのすべての一致を見つけ、一致した文字列の最長の組み合わせを返します。

答えは正規表現と関係があると思いますが、私はまだそれらを開始しておらず、必要がなければ開始したくありませんでした。

私の質問:正規表現はこれを実行する方法ですか?または、何もインポートせずにこれを行う方法はありますか?

それが私の質問/アイデアを理解するのに役立つなら、ここに私がやろうとしていることの擬似コードがあります:

input = 'i play soccer and eat pizza on the weekends'
focus_word = 'and'

ss = [
      'i play soccer and baseball',
      'i eat pizza and apples',
      'every day i walk to school and eat pizza for lunch',
      'i play soccer but eat pizza on the weekend',
     ]

match = MatchingFunction(input, focus_word, ss)
# input should match with all except ss[3]

ss[0]match= 'i play soccer and'
ss[1]match = 'and'
ss[2]match = 'and eat pizza'

#the returned value match should be 'i play soccer and eat pizza'
4

1 に答える 1

4

入力文字列とデータベース内の各文字列の間で最も長い共通のサブ文字列を見つけたいようです。2つの文字列の中で最も長い共通のサブ文字列を見つける関数LCSがあるとすると、次のようなことができます。

> [LCS(input, s) for s in ss]
['i play soccer and ',
 ' eat pizza ',
 ' and eat pizza ',
 ' eat pizza on the weekend']

次に、文字列のリスト内で最も繰り返される部分文字列を探しているように聞こえます。(間違っている場合は訂正してください。ただし、一般的なケースで何を探しているのかよくわかりません!)上記の配列出力から、出力文字列を作成するためにどのような文字列の組み合わせを使用しますか?


あなたのコメントに基づいて、私はこれがトリックをするべきだと思います:

> parts = [s for s in [LCS(input, s) for s in ss] if s.find(focus_word) > -1]
> parts
['i play soccer and ', ' and eat pizza ']

次に、この例で重複する単語を削除するには、次のようにします。

> "".join([parts[0]] + [p.replace(focus_word, "").strip() for p in parts[1:]])
'i play soccer and eat pizza'
于 2012-09-29T17:24:44.653 に答える