[
https://issues.apache.org/jira/browse/LUCENE-2507?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12916757#action_12916757
]
Robert Muir commented on LUCENE-2507:
-------------------------------------
bq. Do you have any benchmarks for this spellchecker? I notice you mention a
few times that you improved the performance. Do you know how it compares
against the separate index approach?
In general I think the performance is fine. I did a lot of testing against the
geonames database (> 2 million unique terms).
But, it completely depends upon the parameters you set. Here are some that can
affect performance and quality:
* avoid doing work if the query term is already spelled correctly:
** minQueryLength (example: 4), query words of 3 characters or less are not
checked.
In general, with any metric, the candidates here will mostly be nonsense anyway.
** maxQueryFrequency (example: 1% or 1): if the query word is high frequency
(e.g. appears in more
than 1% of the documents its assumed to be correct, and no suggestions are
given.
You can also set this to something like 1, if say you have a small product
database
and you feel all your products are spelled completely correct in your index,
and you
don't want to *ever* suggest anything if the query term is in your products
database.
* avoid doing work examining potentially bad suggestions:
** maxEdits (example: 1), the majority of misspellings are only 1 distance
away.
So if you lower this from the default "2" to 1, its faster and more
"lightweight" in the sense you get less a chance of getting a bad suggestion.
** minPrefix (example: 1), most misspellings don't occur in the first
character.
For the solr example, i set this to zero (the wiki has an example correcting
"hell" with "dell"), but in practice I think 1 is a good value.
Additionally this has a practical use for solr users: you need a rather "raw"
(e.g. not stemmed) analyzed field for spellchecking,
if you set this to 1 you can re-use your reverse-wildcard field for
spellchecking too, and it will never suggest reversed terms.
** thresholdFrequency (example: 1% or 1): this plays the role of Solr's
"HighFrequencyDictionary".
In other words, you could set this to 1 to never suggest words that only appear
in a single document... in many cases these are misspellings.
** maxInspections (example: 5), the existing spellchecker uses a hardcoded 10
here.
A lower value can work well here, since the algorithm used to draw candidates
is actually levenshtein.
However, I set the default to 5 (instead of 1), because its good to gather a
few candidates for docFreq-sorting....
but if you increase thresholdFrequency you can probably lower this.
bq. Equally, is this spellchecker a conceptual drop in replacement? By that I
mean, are the suggestions it generates radically different to the separate
index spellcheckers or are they along the same lines?
I think they are better, e.g. if you are ranking by an edit-distance like
function such as Levenshtein or Jaro-Winkler, it makes more sense to get your
*candidates* via the same or similar algorithm! The existing spellchecker gets
candidates with n-grams... I think this causes a mismatch... (Of course the
inverse is true, if you use NGramDistance, use the existing spellchecker!)
Again I did a lot of testing with various corpora, and I'm not a spellchecking
expert but i didn't get particularly good results from the existing
spellchecker.
And for some corpora such as geonames, it didnt seem to have the
configurability I needed to tune the spellchecker to that domain.
For example, i queried on "zeeland" and the existing spellchecker returned
freeland, leland, ireland, deland, and cleland as suggestions.
Whats worse, is that it created a 240MB auxiliary index when my original index
was only 300MB, and it took it 141 seconds to do this.
The idea here isn't to solve the world's spellchecking problems, its mainly to
get rid of the extra index. I think its trivial to
set this one up to beat SpellChecker's suggestions, because I don't think
SpellChecker's suggestions are very good.
> automaton spellchecker
> ----------------------
>
> Key: LUCENE-2507
> URL: https://issues.apache.org/jira/browse/LUCENE-2507
> Project: Lucene - Java
> Issue Type: New Feature
> Components: contrib/spellchecker
> Reporter: Robert Muir
> Assignee: Robert Muir
> Fix For: 4.0
>
> Attachments: LUCENE-2507.patch, LUCENE-2507.patch, LUCENE-2507.patch,
> LUCENE-2507.patch
>
>
> The current spellchecker makes an n-gram index of your terms, and queries
> this for spellchecking.
> The terms that come back from the n-gram query are then re-ranked by an
> algorithm such as Levenshtein.
> Alternatively, we could just do a levenshtein query directly against the
> index, then we wouldn't need
> a separate index to rebuild.
--
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]