[
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]