package cs276.pe1.lucene; import java.io.BufferedReader; import java.io.File; import java.io.InputStreamReader; import java.util.List; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.index.IndexReader; import org.apache.lucene.queryParser.QueryParser; import org.apache.lucene.search.Hits; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Query; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; import org.apache.lucene.search.spell.Dictionary; import org.apache.lucene.search.spell.LuceneDictionary; import org.apache.lucene.search.spell.PlainTextDictionary; import org.apache.lucene.search.spell.SpellChecker; import cs276.pe1.spell.KGramSpellingCorrector; import cs276.pe1.spell.KGramWithEditDistanceSpellingCorrector; @SuppressWarnings("deprecation") public class IMDBSpelling { public static void main(String[] args) throws Exception { //Read search query InputStreamReader input = new InputStreamReader(System.in); BufferedReader reader = new BufferedReader(input); String search = reader.readLine(); //Spelling correct query KGramWithEditDistanceSpellingCorrector k = new KGramWithEditDistanceSpellingCorrector(); List<String> suggest = k.corrections(search); for(String s : suggest) search += " " + s; //Run Lucene search Directory index = FSDirectory.getDirectory(new File(new File(System.getProperty("user.home")),"cs276-index")); IndexSearcher searcher = new IndexSearcher(index); Analyzer analyzer = new StandardAnalyzer(); QueryParser parser = new QueryParser("title",analyzer); Query query = parser.parse(search); Hits hits = searcher.search(query); //Display results System.out.println("Results: "+hits.length()); int num = Math.min(20, hits.length()); for(int i = 0; i < num; i++) { Document hit = hits.doc(i); System.out.println(" "+hit.get("title")); } index.close(); searcher.close(); } }