When we compare hotel room price between different websites, we must make sure we compare apples to apples
コンピュータサイエンスにおいて、ファジー文字列マッチングはパターンと(正確にではなく)ほぼ一致する文字列を見つけ出す技術である。 別の言葉で言うと、ファジー文字列マッチングは、ユーザーが単語のスペルを間違えたり、検索対象の単語の一部だけを入力したりしても、マッチを見つけることができる検索の一種です。
Fuzzy string search は、次のようなさまざまなアプリケーションで使用できます:
- A spell checker and spelling-error, typos corrector. 例えば、ユーザがGoogleに「ミシサガ」と入力すると、「Showing results for mississauga」と共にヒットしたリストが返されます。 つまり、ユーザー入力に追加文字や欠落文字、その他の種類のスペルミスが含まれていても、検索クエリは結果を返します。
- 重複レコードのチェックにソフトウェアを使用することができます。 たとえば、名前のスペルが異なる (Abigail Martin と Abigail Martinez など)、新しい住所、または誤って入力された電話番号などの理由で、顧客がデータベース内の異なる購入品目で複数回リストされている場合などです。 Expedia でさえ、100% 正しいとは言えません:
この投稿では、ファジー文字列マッチングとは何か、その使用例と Python の Fuzzywuzzy ライブラリを使った例を説明します。
各ホテルは部屋の名前に独自の名称を持っていますが、同じシナリオは Online Travel Agency (OTA) にも当てはまります。 たとえば、同じホテルのある部屋を Expedia は「Studio, 1 King Bed with Sofa bed, Corner」と呼び、Booking.com は単に「Corner King Studio」として部屋を表示することが安全であると判断します。
ここに問題はありませんが、OTA 間の宿泊料金を比較したい場合、またはある OTA が他の OTA が料金同等協定に従っているかどうかを確認したい場合には混乱につながることがあります。 別の言葉で言うと、価格を比較できるようにするには、リンゴとリンゴを比較していることを確認する必要があります。
価格比較サイトやアプリにとって最も一貫してイライラする問題の1つは、2つのアイテム(またはホテルの部屋)が自動的に同じものの価格かどうかを判断しようとすることです。
Fuzzywuzzy は、レーベンシュタイン距離を使用して、使いやすいパッケージでシーケンス間の差異を計算する Python ライブラリです。
デモンストレーションとして、私自身のデータセットを作成します。つまり、同じホテル施設について、Expedia から部屋のタイプ、たとえば「スイート、1 キング ベッド (応接間)」を取って、それを Booking.com で部屋のタイプ、「キング 応接間」に合わせます。 少し経験を積めば、ほとんどの人がこの2つが同じものだとわかるはずです。 この方法論に従って、私はGithubにある100以上の部屋タイプのペアを含む小さなデータセットを作成しました。
import pandas as pddf = pd.read_csv('room_type.csv')
df.head(10)