0

私はグーグルの「もしかして」機能をJavaに実装しようとしています。インターネット上で正しく動作するというコードを見つけましたが、実行しようとするとエラーが発生します。私が正確に理解していないコードの唯一の部分であるディレクトリの作成に関係していると思います。

ここにコードがあります、何が悪いのかについて私に助けを教えてもらえますか?前もって感謝します!

             public static void main(String[] args) throws Exception {
             File dir = new File("C:/Users/Lala");
             Directory directory = FSDirectory.open(dir);

             SpellChecker spellChecker = new SpellChecker(directory);

             spellChecker.indexDictionary(
             new PlainTextDictionary(new File("fulldictionary00.txt")));
             String wordForSuggestions = "hwllo";
             int suggestionsNumber = 5;
             String[] suggestions = spellChecker.
                 suggestSimilar(wordForSuggestions, suggestionsNumber);
             if (suggestions!=null && suggestions.length>0) {
                 for (String word : suggestions) {
                     System.out.println("Did you mean:" + word);
                 }
             }
             else {
                 System.out.println("No suggestions found for word:"+wordForSuggestions);
             }

         }

このファイルfulldictionary00.txtは、正しい形式のプレーンテキストファイルです。

私が得るエラーは18行目です:

SpellChecker spellChecker = new SpellChecker(directory);

だからそれはディレクトリの作成と関係があります。私はあなたがそれを見たときに何かアイデアが正確である場合に備えて私が得るエラーを貼り付けています。

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/lucene/document/Fieldable at did_you_mean.main(did_you_mean.java:18) Caused by:     
 java.lang.ClassNotFoundException: org.apache.lucene.document.Fieldable 
4

3 に答える 3

1

lucene 4.0.0では、spellcheckerはlucene-spellchecker-XXX.jarではなくlucene-suggest-4.0.0.jarという名前のパッケージに入れられます。

于 2013-01-01T17:24:02.663 に答える
0

編集

ただし、OP のコメントによると、エラーは、Lucene の JAR ファイルがクラスパスにないように見えるということです...

エラーを知らずに元の回答(そのままにしておくと役立つ場合があります)

指定されたファイルにコンテンツを追加する必要があります...それなしでは機能しません。プログラムはどの単語が正しく、どの単語が正しくないかをどのように判断すればよいでしょうか?

プレーンテキスト辞書ファイルの場合、PlainTextDictionaryを使用する必要があります

テキスト ファイルで表される辞書。

使用できる形式: 1 行に 1 単語:
word1
word2
word3

このページでは、Lucene インデックスのコンテキストで少し説明しています。

インポート: 単語を辞書に追加する Lucene インデックス (より正確には Lucene フィールドのセット) からの単語、および単語のリストを含むテキスト ファイルからの単語を追加できます。

例: インデックスの特定の Lucene フィールドのすべてのキーワードを追加できます。

SpellChecker spell= new SpellChecker(dictionaryDirectory);
spell.indexDictionary(new LuceneDictionary(my_luceneReader,my_fieldname));
于 2012-11-14T10:42:53.193 に答える
0

他の誰かが同じ問題を抱えている場合に備えて、私はそれを解決する方法を見つけました!

まず、ダウンロードした lucene のバージョン 4.0.0 に問題があるようでした。これは、jar ファイルのクラスが、このバージョンで名前が変更された別の jar ファイルのクラスを呼び出していたためです。

この問題を解決するために、古いバージョン (3.6.1) をダウンロードしましたが、既存のコードにいくつかの変更が必要でした。このバージョンでは、spellChecker.IndexDictionary() 関数には 3 つの引数が必要です。

spellChecker.indexDictionary(new PlainTextDictionary(new File("fulldictionary00.txt")),config,false);

config は IndexWriterConfig オブジェクトです。

これが同じ問題を抱えている人の助けになることを願っています!とにかく助けてくれてありがとう@ppeterka!

于 2012-11-16T10:52:33.770 に答える