パブリック Google カレンダーからイベントを取得し、自由形式の「場所」フィールドを取得して、指定された場所に対応するマップにピンをドロップする iOS アプリケーションを作成しています。ある種の文字列検索またはファジー マッチング アルゴリズムを使用して、アプリを可能な限り柔軟にしたいと考えていますが、どこから始めればよいかわかりません。
カレンダーのモデレーターが [場所] フィールドに入力できる項目はいくつかあります。
- 建物名と部屋番号 (例: Foo Hall Room 123)
- 建物の略号と部屋番号 (例: FOO 123)
- 部屋または場所の略称 (例: Foo)
現在、1 つのテーブルで構成される sqlite データベースがあり、各行には緯度、経度、建物の完全な名前 (Foo Hall)、および標準化された建物の略称 (FOO) が格納されています。
モデレーターの自由形式の文字列を取得し、データベースから正しい座標を取得したい (存在する場合)。
LIKE '%FOO%'
レーベンシュタイン距離と同様のパターンを使用してみましたが、たとえば、実際の建物の名前が「Foo and Bar Building の例」で、モデレーターが入力した場所が「Bar Building の例」である場合に問題が発生します。
私が考えた3つのオプションは...
モデレーターに、標準化された略語または建物名を入力するように強制します。これは、カレンダーのモデレーターにとって面倒なプロセスになる可能性があるため、可能であればこれを回避しようとしています.
入力された文字列がデータベース文字列のどこかに含まれているかどうかをチェックする粗い部分文字列検索を行います。これは私の大学がウェブサイトで行っていることですが、明らかに柔軟性がありません。
最大限の柔軟性を提供する、より複雑なあいまい文字列一致アルゴリズムを実装しますが、実装には桁違いに時間がかかります。適切なものがすでに存在する場合、それは理想的なソリューションです!!
これらのオプション (ある場合) のどれが最適だと思われますか? 私が考えていなかったより良い代替手段はありますか?必要なことを実行するライブラリはありますが、まだ見つかりませんか?
助けてくれてありがとう!