[Python] 二つの文字列を比較する:等しい、等しくない、関係演算を理解するで、文字列を比較するためのさまざまな手法を探求しました。今度は、より長いテキストの検査を一歩進め、正確な違いを特定します。このブログ投稿では、Pythonのdifflib
モジュールを用いて、大量のテキストを分析・比較する手引きをします。これは、複雑なデータ比較を扱う者にとって貴重なツールとなるでしょう。
difflib
モジュールのSequenceMatcher
クラスは、二つの文字列を比較し、それらの間の類似性の比率を識別するために使用できます。
from difflib import SequenceMatcher
string1 = "The sun rises in the east\nA stitch in time saves nine\nAll that glitters is not gold"
string2 = "The sun sets in the west\nA stitch in time saves nine\nAll that shines is not gold\n"
s = SequenceMatcher(None, string1, string2)
similarity_ratio = s.ratio()
print(similarity_ratio) # 输出:0.9146341463414634
このコードスニペットは、二つの文字列を比較し、類似比率を得る方法を示しています。これは、テキスト間のわずかな相違を素早く特定する便利な方法です。
difflib
モジュールのDiffer
クラスにより、より大きなテキスト文書を行ごとに比較することが可能です。
from difflib import Differ
text1 = string1.split('\n')
text2 = string2.split('\n')
d = Differ()
diff = d.compare(text1, text2)
print('\n'.join(diff))
出力
- The sun rises in the east
? -- -
+ The sun sets in the west
? + +
A stitch in time saves nine
- All that glitters is not gold
? ^^ ^^ -
+ All that shines is not gold
? ^^ ^
``` ^^ ^
与えられたコードスニペットでは、difflib
モジュールのDiffer
クラスが、二つの文字列のシーケンス、text1
およびtext2
を比較するために使用されます。コードの出力は、これら二つのシーケンス間の違いを強調し、それぞれの違いの性質を示す特定の記号を使用します。
提供された出力を解説します:
-
行は、text1
には「東に日は昇る」があるが、text2
にはないことを示しています。+
行は、text2
に「西に日は沈む」があるが、text1
にはないことを示します。?
行は、変更された正確な文字を特定します。text1
とtext2
の両方で同じなので、最初に記号はありません。-
、+
、?
の行は、text1
の「すべての光るものが金ではない」がtext2
の「すべての輝くものが金ではない」に置き換えられ、具体的な変更が強調されています。difflib
モジュールはテキスト行のシーケンスを比較するために意図されています。difflib
モジュールは、バージョン2.1以降のPython標準ライブラリで利用できます。difflib
モジュールのHtmlDiff
クラスを使用して、HTMLの並べて比較する表を生成できます。Differ
のようなクラスは、比較の実行方法と出力の生成方法をカスタマイズするオプションを提供します。difflib.get_opcodes()
メソッドを使用して、変更のブロックに関する情報を取得できます。これは、大量のテキストに対して便利です。[Python] 多彩な実例を通じてビット演算子を深く理解 |
---|
[Python] 多彩な実例を通じて関係演算子を深く理解 |
[Python] 'zsh: command not found: python' エラーの解決法 |
[Python] 多彩な実例を通じて代入演算子を深く理解 |
[Python] 多彩な実例を通じて算術演算子を深く理解 |
CloneCoding
1行のコードから始まる革新!