私はのような2つの文字列を持っています
string1="abc def ghi"
そして
string2="def ghi abc"
この2つの文字列を単語を壊さずに同じにする方法は?
私はのような2つの文字列を持っています
string1="abc def ghi"
そして
string2="def ghi abc"
この2つの文字列を単語を壊さずに同じにする方法は?
回答:
質問は文字列の平等ではなく、セットの平等に関するもののようです。文字列を分割してセットに変換するだけで、この方法で比較できます。
s1 = 'abc def ghi'
s2 = 'def ghi abc'
set1 = set(s1.split(' '))
set2 = set(s2.split(' '))
print set1 == set2
結果は
True
map
分割する前に文字列の大文字と小文字を正規化できるため、必要はありません
両方の文字列が等しいかどうかを知りたい場合は、簡単に行うことができます
print string1 == string2
ただし、両方に同じ文字セットがあり、同じ回数発生するかどうかを知りたい場合はcollections.Counter
、次のように使用できます。
>>> string1, string2 = "abc def ghi", "def ghi abc"
>>> from collections import Counter
>>> Counter(string1) == Counter(string2)
True
>>> s1="abc def ghi"
>>> s2="def ghi abc"
>>> s1 == s2 # For string comparison
False
>>> sorted(list(s1)) == sorted(list(s2)) # For comparing if they have same characters.
True
>>> sorted(list(s1))
[' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']
>>> sorted(list(s2))
[' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']
直接比較における平等:
string1 = "sample"
string2 = "sample"
if string1 == string2 :
print("Strings are equal with text : ", string1," & " ,string2)
else :
print ("Strings are not equal")
文字セットの同等性:
string1 = 'abc def ghi'
string2 = 'def ghi abc'
set1 = set(string1.split(' '))
set2 = set(string2.split(' '))
print set1 == set2
if string1 == string2 :
print("Strings are equal with text : ", string1," & " ,string2)
else :
print ("Strings are not equal")
私はいくつかの解決策を提供するつもりです、そしてあなたはあなたのニーズを満たすものを選ぶことができます:
1)文字だけ、つまり同じ文字で、両方の文字列でそれぞれの頻度が等しい場合は、次を使用します。
''.join(sorted(string1)).strip() == ''.join(sorted(string2)).strip()
2)両方の文字列のスペース(空白文字)の数も気になる場合は、次のスニペットを使用してください。
sorted(string1) == sorted(string2)
3)単語を検討しているが、順序は考慮しておらず、順序/出現に関係なく、両方の文字列の単語の頻度が等しいかどうかを確認する場合は、次を使用できます。
sorted(string1.split()) == sorted(string2.split())
4)上記を拡張して、頻度カウントに関心がなく、両方の文字列に同じ単語のセットが含まれていることを確認する必要がある場合は、次を使用できます。
set(string1.split()) == set(string2.split())
collection.Counter
は、使用するよりも明白に思えますsorted
difflibはこの仕事をするのに良いライブラリだと思います
>>>import difflib
>>> diff = difflib.Differ()
>>> a='he is going home'
>>> b='he is goes home'
>>> list(diff.compare(a,b))
[' h', ' e', ' ', ' i', ' s', ' ', ' g', ' o', '+ e', '+ s', '- i', '- n', '- g', ' ', ' h', ' o', ' m', ' e']
>>> list(diff.compare(a.split(),b.split()))
[' he', ' is', '- going', '+ goes', ' home']
両方のファイルを開き、単語の内容を分割して比較します。
log_file_A='file_A.txt'
log_file_B='file_B.txt'
read_A=open(log_file_A,'r')
read_A=read_A.read()
print read_A
read_B=open(log_file_B,'r')
read_B=read_B.read()
print read_B
File_A_set = set(read_A.split(' '))
File_A_set = set(read_B.split(' '))
print File_A_set == File_B_set
本当に簡単な答えが必要な場合:
s_1 = "abc def ghi"
s_2 = "def ghi abc"
flag = 0
for i in s_1:
if i not in s_2:
flag = 1
if flag == 0:
print("a == b")
else:
print("a != b")
両方の文字列を大文字または小文字に変換してみてください。次に、==
比較演算子を使用できます。
これはかなり基本的な例ですが、論理比較(==)またはの後で、string1.lower() == string2.lower()
2つの文字列間の距離の基本的なメトリックのいくつかを試すのに役立つ場合があります。
これらまたは他のいくつかのメトリックに関連する例はどこにでもあります。fuzzywuzzyパッケージ(https://github.com/seatgeek/fuzzywuzzy)も試してください。
import Levenshtein
import difflib
print(Levenshtein.ratio('String1', 'String2'))
print(difflib.SequenceMatcher(None, 'String1', 'String2').ratio())