package de.anomic.tools; import java.util.Collections; import java.util.HashSet; import java.util.Set; import java.util.concurrent.LinkedBlockingQueue; import de.anomic.kelondro.text.IndexCell; import de.anomic.kelondro.text.referencePrototype.WordReference; import de.anomic.plasma.parser.Word; import de.anomic.yacy.logging.Log; // People make mistakes when they type words. // The most common mistakes are the four categories listed below: // (1) Changing one letter: bat / cat; // (2) Adding one letter: bat / boat; // (3) Deleting one letter: frog / fog; or // (4) Reversing two consecutive letters: two / tow. public class DidYouMean { private static final char[] alphabet = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p', 'q','r','s','t','u','v','w','x','y','z','\u00e4','\u00f6','\u00fc','\u00df'}; private static final long TIMEOUT = 500; final LinkedBlockingQueue queue = new LinkedBlockingQueue(); private final Set set; private final IndexCell index; private String word; private int len; public DidYouMean(final IndexCell index) { // this.set = Collections.synchronizedSortedSet(new TreeSet(new wordSizeComparator())); this.set = Collections.synchronizedSet(new HashSet()); this.word = ""; this.len = 0; this.index = index; } public Set getSuggestion(final String word) { long startTime = System.currentTimeMillis(); this.word = word.toLowerCase(); this.len = word.length(); // create producers Thread[] producers = new Thread[4]; producers[0] = new ChangingOneLetter(); producers[1] = new AddingOneLetter(); producers[2] = new DeletingOneLetter(); producers[3] = new ReversingTwoConsecutiveLetters(); // start producers for (int i=0; i { public int compare(final String o1, final String o2) { final Integer i1 = index.count(Word.word2hash(o1)); final Integer i2 = index.count(Word.word2hash(o2)); return i2.compareTo(i1); } } */ }