6

私のプログラムが、任意のタイプの文字を含む文字列などの入力を受け取ったとしましょう。たとえば、「ボブのベーグル ショップ」です。次に、「Fred's Bagel Store」という別の文字列を取得します。Pythonで正規表現または他のモジュールを使用してこれらを比較し、プログラムに少なくとも5つ(または必要な数)の文字が文字列内のどこでも同じであるが、すべて同じ順序であるかどうかを教えてもらうにはどうすればよいですか? 「ベーグル」という言葉など?

ありがとう。

4

3 に答える 3

13

difflib.SequenceMatcher問題の解決に役立つPython 標準ライブラリ クラスがあります。コードサンプルは次のとおりです。

from difflib import SequenceMatcher

s1 = "Bob's Bagel Shop"
s2 = "Bill's Bagel Shop"

matcher = SequenceMatcher(a=s1, b=s2)
match = matcher.find_longest_match(0, len(s1), 0, len(s2))

結果:

Match(a=3, b=4, size=13)  # value that 'match' variable holds

結果は、両方の文字列が 13 文字の長さの等しい部分文字列を持っていることを示しています (最初の文字列の 3 番目の文字から始まり、2 番目の文字列の 4 番目の文字から始まります)。

この一致結果オブジェクトを使用して、そのフィールドを値として取得できます。

match.size  # 13
match.a     # 3
match.b     # 4
于 2012-08-12T18:24:14.950 に答える
1

セットを使用してから使用して、両方の文字列から一致する文字を見つけることができitetools.combinationsます。intersection

from itertools import combinations
str1="Bob's Bagel Shop"
str2="Fred's Bagel Store"

def combi(strs):
    chars=''.join(strs.split())
    lis=[]
    for x in range(1,len(chars)):
        for y in combinations(chars,x):
            if ''.join(y) in chars:
                lis.append(''.join(y))
    return lis           


lis1=combi(str1)
lis2=combi(str2)
print max(set(lis1).intersection(set(lis2)),key=len)  

出力:

'sBagelS
于 2012-08-12T18:35:16.423 に答える
0

見る

Python の文字列類似性指標

または simhash モジュールをチェックアウトします。

http://bibliographie-trac.ub.rub.de/browser/simhash.py

于 2012-08-12T18:21:20.423 に答える