我正在尝试在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
答案 0 :(得分:1)
好吧,在lucene 4.0.0中,spellchecker放在一个名为lucene-suggest-4.0.0.jar的包中,而不是lucene-spellchecker-XXX.jar
答案 1 :(得分:0)
修改强>
根据OP评论,错误是Lucene的JAR文件似乎不在类路径上......
原始答案,在不知道错误的情况下(将其保留在此处可能有用)
您必须将内容添加到指定的文件中...如果没有它,它将无效。只是做一些思考:程序应该如何知道哪些单词是正确的,哪些单词不正确?
对于纯文字词典文件的情况,您应该使用 PlainTextDictionary
由文本文件表示的字典。
允许格式:每行1个字:
字1
WORD2
WORD3
This page在Lucene索引的上下文中解释了一下:
导入:在词典中添加单词 我们可以添加来自Lucene索引(更确切地说来自一组Lucene字段)的单词,以及来自带有单词列表的文本文件。
示例:我们可以添加索引的给定Lucene字段的所有关键字。
SpellChecker spell= new SpellChecker(dictionaryDirectory);
spell.indexDictionary(new LuceneDictionary(my_luceneReader,my_fieldname));
答案 2 :(得分:0)
如果其他人遇到同样的问题,我找到了解决问题的方法!
首先,问题似乎是lucene的4.0.0版本,我下载的版本,因为一个jar文件类正在调用另一个已在此版本中重命名的jar文件中的类。 / p>
要修复问题,我刚刚下载了旧版本(3.6.1),这需要对现有代码进行一些更改。在这个版本中,spellChecker.IndexDictionary()函数需要3个参数:
spellChecker.indexDictionary(new PlainTextDictionary(new File("fulldictionary00.txt")),config,false);
config是一个IndexWriterConfig对象。
我希望这能帮助有同样问题的人! @ppeterka无论如何都要感谢你的帮助!