2017-06-12 3 views
0

Ich habe eine Datei mit einigen Phrasen. Mit Jarowinkler von Lucene soll es mir die ähnlichsten Phrasen meiner Eingabe aus dieser Datei bringen.JarowinklerDistance in Lucene ist seltsam Ergebnisse

Hier ist ein Beispiel für mein Problem.

Wir haben eine Datei mit:

//phrases.txt 
this is goodd 
this is good 
this is god 

Wenn mein Eingang ist diese gute ist, es soll mich holen ‚das ist gut‘ aus der Datei zuerst, da die Ähnlichkeit hier Punktzahl ist die größte (1). Aber aus irgendeinem Grund kommt es zurück: "Das ist gut" und "das ist Gott" nur!

Hier ist mein Code:

try { 
    SpellChecker spellChecker = new SpellChecker(new RAMDirectory(), new JaroWinklerDistance()); 
    Dictionary dictionary = new PlainTextDictionary(new File("src/main/resources/words.txt").toPath()); 
    IndexWriterConfig iwc=new IndexWriterConfig(new ShingleAnalyzerWrapper()); 
    spellChecker.indexDictionary(dictionary,iwc,false); 

    String wordForSuggestions = "this is good"; 

    int suggestionsNumber = 5; 

    String[] suggestions = spellChecker.suggestSimilar(wordForSuggestions, suggestionsNumber,0.8f); 
    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); 
    } 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

Antwort

1

suggestSimilar werden Vorschläge nicht schaffen, die mit dem Eingang identisch sind. Um es mit dem Quellcode:

// kein Wort für sich selbst vorschlagen, das wäre dumm

Wenn Sie wissen wollen, ob wordForSuggestions im Wörterbuch enthalten ist, verwenden Sie die exist Methode:

if (spellChecker.exist(wordForSuggestions)) { 
    //do what you want for an, apparently, correctly spelled word 
}