文字列を比較して、それらが同じものを表すかどうかを判断する必要があります。これは、略語やその他の細かい詳細が異なる場合がある、人間が入力したケースタイトルに関連しています。たとえば、次の2つのタイトルについて考えてみます。
std::string first = "Henry C. Harper v. The Law Offices of Huey & Luey, LLP";
とは対照的に:
std::string second = "Harper v. The Law Offices of Huey & Luey, LLP";
人間は、これらが同じである可能性が最も高いことをすばやく判断できます。私が採用した現在のアプローチは、すべての文字を小文字にし、すべての句読点とスペースを削除して文字列を正規化することです。
std::string firstNormalized = "henrycharpervthelawofficesofhueylueyllp";
と:
std::string secondNormalized = "harpervthelawofficesofhueylueyllp";
この場合を比較すると、一方は他方のサブシーケンスですが、それが必ずしも発生しない他のより複雑なバリエーションを想像することができますが、それらには共通の重要なサブシーケンスがあります。また、文字の入れ替えやスペルミスなどの人的入力エラーが発生することもあります。
おそらく、ある種の文字差分プログラムが役立つでしょうか?チェックインするコードの違いを比較するための優れたライン差分プログラムを見てきましたが、キャラクターベースで、おそらくブーストでそのようなものはありますか?共通の連続する文字の数を数え、共有されていない文字に対する比率をとることができれば、おそらくそれは良いヒューリスティックでしょうか?
結局、それらを同じと見なすかどうかについてブール値の決定が必要です。完璧である必要はありませんが、理想的には間違っていることはめったにありません。
どのアルゴリズムを使用すれば、2つの文字列が互いにどれほど類似しているかを定量化でき、ヒューリスティックによってyes / noの答えに変換できますか?