1

私は約100万語近くの辞書を持っています。文字列をすばやく検索するためのアルゴリズムを設計する必要があります。

たとえば。ユーザーが入力した場合、アプリは、、 ... など andのシーケンスを持つ単語を返す必要があります。randomsandstand

私が持っている既存の解​​決策は、効率的ではないすべての既存の単語で一致する正規表現を検索することです。既存のデータベースの再構築、辞書のキャッシュ、または必要に応じて任意のレベルでの作業にオープンです。または、Java に既製の API がありますか?

4

2 に答える 2

3

http://lucene.apache.org/core/

これを見てください、これはあなたの要件に応えるはずです。

final File INDEX_DIR = new File("index");  
try{  
    Class.forName("com.mysql.jdbc.Driver").newInstance();  
    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/test", "root", "password");  
    StandardAnalyzer analyzer = new StandardAnalyzer();  
    IndexWriter writer = new IndexWriter(INDEX_DIR, analyzer, true);  
    System.out.println("Indexing to directory '" + INDEX_DIR + "'...");  
    indexDocs(writer, conn);  
    writer.optimize();  
    writer.close();  
} catch (Exception e) {  
    e.printStackTrace();  
}  

void indexDocs(IndexWriter writer, Connection conn) throws Exception {  
String sql = "select id, name, color from pet";  
Statement stmt = conn.createStatement();  
ResultSet rs = stmt.executeQuery(sql);  
while (rs.next()) {  
    Document d = new Document();  
    d.add(new Field("id", rs.getString("id"), Field.Store.YES, Field.Index.NO));  
    d.add(new Field("name", rs.getString("name"), Field.Store.NO,  Field.Index.TOKENIZED));  
    d.add(new Field("address", rs.getString("address"),Field.Store.NO, Field.Index.TOKENIZED));  
    writer.addDocument(d);  
  }  
}  
于 2013-04-05T11:40:22.440 に答える
1

トライを使用してみます ( Java での標準のトライ ベースのマップ実装はどこにありますか? )。要件によっては、メモリ内の lucene インデックスを使用することも適している場合があります。

于 2013-04-05T11:40:53.400 に答える