Python
 Computer >> コンピューター >  >> プログラミング >> Python

【Python】FuzzyWuzzyライブラリで文字列の類似度を比較する方法

FuzzyWuzzyとは?

このチュートリアルでは、PythonのFuzzyWuzzyライブラリについて学びます。FuzzyWuzzyは、2つの文字列を比較するために開発されたライブラリです。文字列の比較にはregexdifflibといったモジュールもありますが、FuzzyWuzzyには独自の強みがあります。それは、比較結果をtrue/falseや文字列として返すのではなく、文字列がどれだけ一致しているかを0〜100のスコアで返してくれる点です。

FuzzyWuzzyのインストール

FuzzyWuzzyを使用するには、fuzzywuzzypython-Levenshteinの2つのパッケージが必要です。以下のコマンドを実行してインストールしましょう。

pip install fuzzywuzzy

上記のコマンドを実行すると、次のような成功メッセージが表示されます。

Collecting fuzzywuzzy
Downloading https://files.pythonhosted.org/packages/d8/f1/5a267addb30ab7eaa1beab2b9323073815da4551076554ecc890a3595ec9/fuzzywuzzy-0.17.0-py2.py3-none-any.whl
Installing collected packages: fuzzywuzzy
Successfully installed fuzzywuzzy-0.17.0

続いて、Linux環境では以下のコマンドでpython-Levenshteinをインストールします。

pip install python-Levenshtein

Windows環境では従来easy_installが使われていましたが、現在は非推奨のため、Windowsでもpipでのインストールが可能です。

pip install python-Levenshtein

fuzzモジュールの基本

ここからは、fuzzモジュールについて見ていきましょう。fuzzは一度に2つの文字列を比較するためのモジュールで、0〜100のスコアを返すさまざまなメソッドを提供しています。代表的なメソッドを紹介します。

fuzz.ratio()

最初に紹介するのは、fuzzモジュールのratioメソッドです。2つの文字列全体を比較し、その一致度を0〜100のスコアで返します。以下の例で具体的な動作を確認してみましょう。

サンプルコード

## fuzzywuzzyライブラリからモジュールをインポート
from fuzzywuzzy import fuzz
## 同じ文字列ならスコアは100
print(f"同一の文字列:- {fuzz.ratio('tutorialspoint', 'tutorialspoint')}")
## 大文字小文字やスペースの違いでスコアが下がる
print(f"一部変更した文字列:- {fuzz.ratio('tutorialspoint', 'TutorialsPoint')}")
print(f"一部変更した文字列:- {fuzz.ratio('tutorialspoint', 'Tutorials Point')}")
## 完全に異なる文字列
print(f"異なる文字列:- {fuzz.ratio('abcd', 'efgh')}")

実行結果

同一の文字列:- 100
一部変更した文字列:- 86
一部変更した文字列:- 86
異なる文字列:- 0

大文字・小文字の違いやスペースの有無だけでスコアが変動することがわかります。理解をさらに深めるために、部分一致を評価するpartial_ratioメソッドにもぜひ触れてみてください。partial_ratioは、短い文字列が長い文字列の中に部分的に含まれているかどうかを判定したい場合に特に便利です。

fuzz.WRatio()

fuzz.WRatio()は、大文字・小文字の違いや余分な文字などを自動的に考慮してスコアを計算するメソッドです。実際の例を見てみましょう。

サンプルコード

## fuzzywuzzyライブラリからモジュールをインポート
from fuzzywuzzy import fuzz
## 片方の文字列に余分な文字が含まれていても100点になる
print(f"Max Score:- {fuzz.WRatio('tutorialspoint', 'tutorialspoint!!!')}")
## 大文字・小文字の違いは自動的に処理される
print(f"一部変更した文字列:- {fuzz.WRatio('tutorialspoint', 'TutorialsPoint')}")
## 完全に異なる文字列
print(f"異なる文字列:- {fuzz.WRatio('abcd', 'efgh')}")

実行結果

Max Score:- 100
一部変更した文字列:- 100
一部変更した文字列:- 100
異なる文字列:- 0

ご覧のとおり、WRatioは大文字・小文字の違いや記号などの余分な文字を無視してくれます。単純なratioの代わりにWRatioを使うことで、より柔軟で実用的なあいまい文字列マッチングが実現できます。

まとめ

FuzzyWuzzyを使えば、文字列の類似度を直感的な数値スコアとして取得できます。データクレンジングや入力補正、重複データの検出など、幅広い場面で活用できるライブラリなので、ぜひ実際に試してみてください。このチュートリアルについて疑問点がある場合は、コメント欄でお気軽にお尋ねください。

  1. Pythonの「%」演算子とは?文字列フォーマットの基本と使い方を解説

    Pythonの「%」演算子の役割 Pythonにおける「%(パーセント)」は、文字列フォーマット演算子(補間演算子)として機能します。「format % values」という形式で記述すると、フォーマット文字列内の変換指定子が、values側の要素によって置き換えられます。この仕組みは、C言語のsprintf()関数とよく似ています。 基本的な使い方:文字列の埋め込み 最もシンプルな例は、文字列の中に変数の値を埋め込むケースです。 >>> lang = Python >>> print %s is awesome! % lang Python is awe

  2. Pythonで文字列のリストを並べ替える方法:sort()とsorted()の使い分け

    Pythonでは、文字列のリストを並べ替える方法が2つ用意されています。リスト自体を直接変更するsort()メソッドと、元のリストを保持したまま新しい並べ替え済みリストを作成するsorted()関数です。それぞれの特徴と使い方を解説します。 sort()メソッドでリストをその場で並べ替える sort()は、リストそのものを並べ替える「in-place(破壊的)」な操作です。元のリストの順序が直接変更されるため、戻り値を受け取る必要はありません。 >>> a = [Hello, My, Followers] >>> a.sort() >>>