ユーザーからのムービー入力に基づいて結果を返すアプリケーションを構築しています。ユーザーが失敗して映画のタイトルのスペースを空けるのを忘れた場合でも、入力を取得して正しいデータを返す方法はありますか? たとえば、「見えない」は「見えない」と解釈されます。
5 に答える
これを適切かつ信頼できる方法で実行できる正規表現はありません。Solrのような検索サーバーを試すことができます。
または、ユーザーの入力時に GUI (ある場合) でオートコンプリートを実行することもできます。これにより、ユーザーが最終的に実行する可能性のある一般的なエラーの一部を軽減できます。
例:
- ユーザーは「outofsight」を検索したい
- 「out」と入力し始めます
- 「見えない」を提案として見る
- 候補から「見えない」を選択
- ????
- 利益!!!
単語の区切りがどこにあるべきかを教えてくれる正規表現はありません。たとえば、入力が「オフライト」の場合、「オフライト」または「オフフライト」を返すことになっていますか?
各ムービー レコードに一致する 1 つ以上のパターンを保存する場合を除き、これを正規表現で行うことはできません。それはばかげているでしょう。
軽微なスペルミスを検出するためのより良い方法は、ユーザーが入力している内容と映画のタイトルとの間のレーベンシュタイン距離を計算することです。ただし、ムービーのリストが大きい場合、これはかなり遅い操作になるため、Lucene/Solr などのこの種の処理に優れた専用の検索エンジンを使用することをお勧めします。
これは、辞書とある種のあいまい検索アルゴリズムがなければ不可能です。後者については、How can I do fuzzy substring matching in Ruby? を参照してください。.
文字列を取り、\s*
各文字の間に入れることができます。
したがってoutofsight
、次のように変換されます。
o\s*u\s*t\s*o\s*f\s*s\s*i\s*g\s*h\s*t
...そして一致しout of sight
ます。