0

我正在尝试在 java 中实现 google 的“你的意思是”功能。我在互联网上发现了一些代码说它可以正常工作,但在尝试运行它时却给我一个错误。我认为这与目录创建有关,这是我不完全理解的代码的唯一部分。

这是代码,你能帮我看看有什么问题吗?提前致谢!

             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-suggest-4.0.0.jar 而不是 lucene-spellchecker-XXX.jar 的包中

于 2013-01-01T17:24:02.663 回答
0

编辑

不过,根据 OPs 的评论,错误是 Lucene 的 JAR 文件似乎不在类路径中......

原始答案,不知道错误(将其保留在此处可能很有用)

您必须将内容添加到指定的文件中......没有它就无法工作。稍微想一想:程序如何知道哪些单词是正确的,哪些不是?

对于纯文本字典文件的情况,您应该使用PlainTextDictionary

由文本文件表示的字典。

允许的格式:每行 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 回答