2016-11-08 10 views
1

2つの文字列があるとします。2つの文書で一致しないテキストを抽出する方法

a = '私はサムです。料理をするのが好きです。'

b = '私はサムです。私はずっと飲んでいました。

私が使用して、その類似性スコアを計算しています:

from difflib import SequenceMatcher 
s = SequenceMatcher(lambda x: x == " ",a,b) 
print s.ratio() 

今、私は両方の文字列に一致しない文章を印刷したいです。このように

= '私は料理が大好きです。'

b = '私はたくさん飲んでいました。'

これを行うために使用できるモジュールやアプローチのような提案はありますか?私はdifflibで1つのモジュールを見たhttps://pymotw.com/2/difflib/しかし、これは(+、 - 、!、...)で出力します。私はその形式で出力したくありません。

答えて

0

非常に簡単なスクリプトです。しかし、私はそれがあなたに方法のアイデアを与えることを願っています:

a = 'I am Sam. I love cooking.'  
b = 'I am sam. I used to drink a lot.' 

a= a.split('.') 
b=b.split('.') 

ca=len(a) 
cb=len(b) 

if ca>cb:l=cb 
else :l=ca 

c=0 

while c<l: 
    if a[c].upper() == b[c].upper():pass 
    else:print b[c]+'.' 
    c=c+1 
0

使用difflibdifflib.Differの出力を簡単に後処理して、各ユニットの最初の2文字を取り除き、必要な任意のフォーマットに変換することができます。あるいは、SequenceMatcher.get_matching_blocksによって返された配列で作業し、独自の出力を生成することもできます。

これはどのように行うのですか。それがあなたの望むものでない場合は、あなたの質問を編集して、比較と出力フォーマットのあまり単純ではない例を提供してください。

differ = difflib.Differ() 
for line in differ.compare(list1, list2): 
    if line.startswith("-"): 
     print("a="+line[2:]) 
    elif line.startswith("+"): 
     print("b="+line[2:]) 
    # else just ignore the line 
関連する問題