【Python】超高速なあいまい検索ライブラリ「RapidFuzz」で文字列の表記揺れをスマートに解決しよう!

投稿者: | 2026-08-02

こんにちは。皆さんは、ユーザーが入力したテキストの「表記揺れ」に悩まされたことはありませんか?
例えば「Python」と「pythone」のようなタイポ(打ち間違い)や、「リンゴ」と「りんご」のような表記の揺らぎです。

データベースの検索やデータクレンジングにおいて、こうした「あいまいな文字列」を同一視してスマートに処理したい場面は多々あります。
そこで今回は、文字列の類似度を非常に高速に計算してくれるPythonライブラリ『RapidFuzz』の使い方をご紹介します。

RapidFuzzとは?

RapidFuzzは、文字列の類似度(ファジィ文字列マッチング)を計算するためのライブラリです。

かつて同様の用途で広く使われていた「FuzzyWuzzy」というライブラリのAPIと互換性を保ちながら、内部をC++で再実装することで、劇的な高速化を実現しています。また、商用利用しやすいMITライセンスで提供されているのも嬉しいポイントです。

既存のFuzzyWuzzyを使っていたコードも、インポート文を from rapidfuzz import fuzz に書き換えるだけでそのまま移行できることが多いですよ。

RapidFuzzの主なメリット

  • 圧倒的な実行速度:C++による最適化が施されており、Python標準の処理や従来のライブラリに比べて数倍から数十倍高速に動作します。
  • 豊富な類似度アルゴリズム:単純な編集距離(レーベンシュタイン距離)だけでなく、部分一致や単語の順序を考慮した類似度など、用途に合わせた多様な比較ロジックが用意されています。
  • 便利な検索機能:「リストの中から最も似ている文字列をいくつか探す」といった処理を、わずか1行で実行できる便利な関数が揃っています。

サンプルコード

まずはライブラリをインストールしましょう。

pip install rapidfuzz

続いて、基本的な類似度の判定と、リストからのあいまい検索を行うコード例です。

from rapidfuzz import fuzz, process

# 1. 2つの文字列の類似度を計算する(0〜100で評価)
str1 = "Python"
str2 = "Pythone"

ratio = fuzz.ratio(str1, str2)
print(f"単純な類似度: {ratio:.1f}%")

# 部分一致の類似度(短い文字列が長い文字列に含まれているかを考慮)
partial_ratio = fuzz.partial_ratio("Python", "Python 3.12")
print(f"部分一致の類似度: {partial_ratio:.1f}%")


# 2. 複数の候補から、最も似ているものを検索する
choices = ["Apple", "Banana", "Orange", "Pineapple", "Grape"]
query = "aple"  # タイポのあるクエリ

# 最も類似度が高い上位2件を抽出
results = process.extract(query, choices, limit=2)

print("\n--- 検索結果 ---")
for match, score, index in results:
    print(f"候補: {match} (類似度: {score:.1f}%, 元のインデックス: {index})")
単純な類似度: 92.3%
部分一致の類似度: 100.0%

--- 検索結果 ---
候補: Pineapple (類似度: 77.1%, 元のインデックス: 3)
候補: Apple (類似度: 66.7%, 元のインデックス: 0)

日本語の表記揺れを扱う場合も、ひらがな・カタカナの変換など、簡単な前処理と組み合わせることで非常に強力な検索ツールになります!

みーちゃんのワンポイント

大量のテキストデータを処理する際は、process.extract などの引数にある score_cutoff を活用しましょう。例えば score_cutoff=60 と指定することで、類似度が60%未満の明らかな不一致データを計算の途中で切り捨てることができ、処理をさらに高速化させることができますよ。