[ https://issues.apache.org/jira/browse/LUCENE-827?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Hoss Man resolved LUCENE-827. ----------------------------- Resolution: Invalid if you have questions about using any lucence java code, pelase start be emailing the java-user mailing list ... bugs should only be filed once you have confirmed a bug truely does exist (after discussion with other users who confirm that your assumptions/methodology are correct) Based on a quick reading of your problem description, i would suspect that if SpellChecker works for you when you build a "Dictionary" from plain text, but not when you use a LuceneDictionary it may be because of the Analyzer you are using when building your initial index ... but please followup in email on the user list > Lucene Spell Index Not giving Proper Result > ------------------------------------------- > > Key: LUCENE-827 > URL: https://issues.apache.org/jira/browse/LUCENE-827 > Project: Lucene - Java > Issue Type: Bug > Environment: Windows XP, Linux > Reporter: Gaurav Gupta > > I am passing List of words 'Mayur Vihar Center Circle Udyog Vihar Noida > Gurgaon' to create spell index from Lucene Index. when i searches for correct > word for 'Centrer' i.e 'Center', it does'nt find it. I checked it whether its > there in spell Index, i didnt find it there. > By making the spell Index directly from Plain text Dictionary gives me the > correct word for 'centre' i.e 'center'. I cant understand why it is behaving > like this. > Also attaching the source -: > CreateDataStructure creates the Lucene Index and initializeSpellChecker > initializes the spell Checker. > import java.io.File; > import java.io.FileInputStream; > import java.io.IOException; > import java.io.InputStream; > import java.io.InputStreamReader; > import java.io.Reader; > import java.sql.SQLException; > import org.apache.lucene.analysis.Analyzer; > import org.apache.lucene.analysis.standard.StandardAnalyzer; > import org.apache.lucene.document.Document; > import org.apache.lucene.document.Field; > import org.apache.lucene.index.IndexReader; > import org.apache.lucene.index.IndexWriter; > import org.apache.lucene.queryParser.ParseException; > import org.apache.lucene.search.spell.LuceneDictionary; > import org.apache.lucene.search.spell.SpellChecker; > import org.apache.lucene.store.Directory; > import org.apache.lucene.store.FSDirectory; > public class SpellCheckImpl implements SpellCheck{ > > private String SIMPLE_DIRECTORY; > private String SPELL_DIRECTORY; > private String DATA_TEXT_FILE; > private String DEFAULT_FIELD="field"; > > > > private SpellCheckImpl(){ > > } > > //Configure the directories > > public SpellCheckImpl(String directoryPath){ > > File f = new File(directoryPath); > > if(f.isDirectory()){ > > this.SIMPLE_DIRECTORY = directoryPath+"/test"; > this.SPELL_DIRECTORY = directoryPath+"/sp"; > > File simple = new File(this.SIMPLE_DIRECTORY); > File spell = new File(this.SPELL_DIRECTORY); > > if(!simple.isDirectory()){ > simple.mkdir(); > } > > if(!spell.isDirectory()){ > spell.mkdir(); > } > > } > > } > > > /** > * Initialize the Dictionary with given Keywords > */ > public void initialize(String filePath){ > > this.DATA_TEXT_FILE = filePath; > > try{ > > createDataStructure(SIMPLE_DIRECTORY); > > initializeSpellChecker(SIMPLE_DIRECTORY,SPELL_DIRECTORY); > > }catch(Exception e){ > System.out.println("Initialization failed > "+e.getMessage()); > } > } > > > /** > * This method creates the index for the list of good words at the > given location. > * @param origDirLocation > * @param dictionaryType > * @throws IOException > * @throws InstantiationException > * @throws IllegalAccessException > * @throws ClassNotFoundException > * @throws SQLException > */ > private void createDataStructure(String origDirLocation) throws > IOException, InstantiationException, > IllegalAccessException, ClassNotFoundException, SQLException{ > Directory directory = FSDirectory.getDirectory(origDirLocation, > true); > Analyzer analyzer = new StandardAnalyzer(); > IndexWriter iwriter = new IndexWriter(directory, analyzer, > true); > > long time=System.currentTimeMillis(); > > InputStream is = null; > > is = new FileInputStream(new File(DATA_TEXT_FILE)); > > Document doc = new Document(); > > //doc.add(Field.Text(DEFAULT_FIELD, (Reader) new > InputStreamReader(is))); > doc.add(new Field(DEFAULT_FIELD, "Mayur Vihar Center Circle > Udyog Vihar Noida Gurgaon", Field.Store.YES, Field.Index.TOKENIZED)); > > > iwriter.addDocument(doc); > iwriter.optimize(); > time=System.currentTimeMillis()-time; > System.out.println("time to Create Lucene Index "+time); > > iwriter.close(); > } > > > > /** > * This method creates the spell checker dictionary from the words > directory at the specified location. > * @param origDirLocation > * @param spellDirLocation > * @throws IOException > */ > private void initializeSpellChecker(String origDirLocation, String > spellDirLocation) throws IOException{ > FSDirectory origDir = FSDirectory.getDirectory(origDirLocation, > false); > FSDirectory spellDir = > FSDirectory.getDirectory(spellDirLocation, true); > > long time=System.currentTimeMillis(); > > IndexReader indexReader = null; > indexReader = IndexReader.open(origDir); > > SpellChecker spellChecker = new SpellChecker(spellDir); > spellChecker.indexDictionnary(new LuceneDictionary(indexReader, > DEFAULT_FIELD)); > > time=System.currentTimeMillis()-time; > > System.out.println("time to build Spell Checker Dictionary > "+time); > > } > > > public String[] GetMatches(String badWord) throws ParseException > { > SpellChecker spellChecker = null; > try > { > spellChecker = new > SpellChecker(FSDirectory.getDirectory(SPELL_DIRECTORY,false)); > > spellChecker.setAccuraty(0); > > if(spellChecker.exist(badWord)){ > System.out.println("here"); > } > > String[] similarWords = > spellChecker.suggestSimilar(badWord, 25); > > return similarWords; > } > catch (IOException e) > { > throw new ParseException(e.getMessage()); > } > } > > > public String GetBestMatch(String badWord) throws ParseException > { > > String[] correctWords = GetMatches(badWord); > > if(correctWords != null && correctWords.length > 0){ > return correctWords[0]; > } > > return "No Correct Spelling Found"; > > } > > public void addWords(String word) throws IOException{ > > > long time=System.currentTimeMillis(); > Analyzer analyzer = new StandardAnalyzer(); > IndexWriter writer = new IndexWriter(SIMPLE_DIRECTORY, > analyzer, false); > > if(word != null && !"".equals(word)){ > Document doc = new Document(); > doc.add(new Field(DEFAULT_FIELD, word , > Field.Store.YES, > Field.Index.TOKENIZED)); > writer.addDocument(doc); > } > > writer.optimize(); > writer.close(); > time=System.currentTimeMillis()-time; > initializeSpellChecker(SIMPLE_DIRECTORY,SPELL_DIRECTORY); > System.out.println("time to add words "+time); > } > > > public void addWords(String[] word) throws IOException{ > > long time=System.currentTimeMillis(); > Analyzer analyzer = new StandardAnalyzer(); > IndexWriter writer = new IndexWriter(SIMPLE_DIRECTORY, > analyzer, false); > > if(word != null){ > for(int i=0;i<word.length;i++){ > if(word[i] != null && !"".equals(word[i])){ > Document doc = new Document(); > doc.add(new Field(DEFAULT_FIELD, > word[i] , Field.Store.YES, > Field.Index.TOKENIZED)); > writer.addDocument(doc); > } > } > } > > writer.optimize(); > writer.close(); > time=System.currentTimeMillis()-time; > initializeSpellChecker(SIMPLE_DIRECTORY,SPELL_DIRECTORY); > System.out.println("time to add words "+time); > } > > } -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]