2016-07-31 5 views
-1

これは基本的に私がここで意味することは、有用なとなるだろう検索ツール(配列やarraylistなどの一連の文字列を検索するようなもの)を作るにはどうすればいいですか?必ずしも高速ではなく、有用である。検索アルゴリズムを最適化する方法は?

たとえば、検索する語句がと同じように「自動修正」を組み込むのはどれくらい簡単でしょうか?はスペルではありますが、正確ではありませんか?単語全体ではなく最初の3文字に一致する結果、またはにはという単語が含まれますが、必ずしも単語全体で構成されているとは限りません。このクラスまたはクラスのためのAPIがありますか、ここで私を助けるアルゴリズムがありますか?

+3

のLucene/Solrの/ ElasticSearchに見て。検索は***大きな***のトピックです。 –

+0

だから、これは非常にオープンエンドであり、非常に意見志向の質問です。どちらも話題にはなりません。 –

+0

あなた自身の研究を最初にやり直してから、もう一度やり直す必要があります –

答えて

0

一言で言えば、SIMILAR文字列の場合、類似度(実際にはある文字列を別の文字列に変える動きの数を見つけますが、これは一種の類似性です)を見つける「距離の編集」アルゴリズムを使用できますAUTOCOMPLETEツールを使用すると、文字ツリーとして機能する "Trie"データ構造を使用することができます。現在の単語の文字を読み取ると、既存の単語に到達するためにどこに行くことができるかを示すノードで停止します。 単語(文字列)を含むものを検索するには、KMPアルゴリズム(または本文全体で複数の単語を検索する場合はAho-Corasick)を使用することができます。

https://en.wikipedia.org/wiki/Edit_distance

https://en.wikipedia.org/wiki/Trie

https://en.wikipedia.org/wiki/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm

https://en.wikipedia.org/wiki/Aho%E2%80%93Corasick_algorithm

+1

大きなデータ検索/パターンマッチングのような大きなツールを再実装することは悪夢に終わるかもしれません。そのような目的のためにいくつかの標準ライブラリに頼っている方が良いでしょう。例えば、apache lucene – Yerken

関連する問題