diff --git a/README.md b/README.md index 9be287f..c2e2182 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,15 @@ # Moman ## Description -This is will eventually be a suite of tools to be used by an orthographic/grammatical checker and the checker itself. The tools are currently coded in Python, but I began to rewrite it in Lisp. Moman, the suite itself, will be consisted of the following tools: -* *FineNight* is the FSA library. +This was supposed to be a suite of tools to be used by an orthographic/grammatical checker and the checker itself. However, the project is mainly dead right now. But I encourage you to look through the code and use it as inspiration/reference. The tools are currently coded in Python, but I started a while back to rewrite it in Lisp (which will never be finished). Moman, the suite itself, consist of the following tools: + +* [FineNight](#finenight) is the FSA library. * A FST library. (Not yet implemented) -* *ZSpell* is the orthographic checker. +* [ZSpell](#zspell) is the orthographic checker. + +Mostly, the only part of the tools suite which is worthwhile mentioning is the "Fast String Correction" which is used by [Lucene's](https://lucene.apache.org/) FuzzyQuery. You can read about the inclusion of this project in Lucene by reading Michael McCandless's [article](http://blog.mikemccandless.com/2011/03/lucenes-fuzzyquery-is-100-times-faster.html). ## FineNight -The *FineNight* library contains many algorithms for Finite State Automatons. That includes: +The *FineNight* library contains many algorithms for Finite State Automatons. That includes: * Union of two FSAs * Intersection of two FSAs * Complement of a FSAs @@ -19,9 +22,57 @@ The *FineNight* library contains many algorithms for Finite State Automatons. Th * Minimization algorithm * Construction of an IADFA from a sorted dictionary * Graphviz support -* Error-Tolerant IADFA +* Error-Tolerant IADFA (starred in Michael McCandless's Mike MChttp://blog.mikemccandless.com/2011/03/lucenes-fuzzyquery-is-100-times-faster.html + +Almost all algorithms were taken from the book [Introduction to Automata Theory, Languages, and Computation](#hopcroft01). The minimization algorithm is an implementation of [Brzozowski's method](#brzozowski). In this method, the (possibly non-deterministic) automaton is reversed, determinized, reversed and determinized. I'll eventually add the [Hopcroft's nlog(n) minimization algorithm](#hopcroft). + +## ZSpell +ZSpell is meant to be a concurrent of aspell, made by Kevin Atkinson. At this time, ZSpell can suggest words with a Levenshtein-distance of one. Before we were using [Kemal Oflazer's algorithm](#oflazer96errortolerant). This algorithm is very slow, but now we use a faster algorithm ([Schulz's and Mihov's algorithm](#schulz02fast)). However, only substitution, removal and insertion are used for the faster algorithm. It means that transpositions errors, like "ehllo" -> "hello", are considered as two operations. -Almost all algorithms were taken from the book [Introduction to Automata Theory, Languages, and Computation](#hopcroft01). The minimization algorithm is an implementation of Brzozowski's method [2]. In this method, the (possibly non-deterministic) automaton is reversed, determinized, reversed and determinized. I'll eventually add the Hopcroft's nlog(n) minimization algorithm [3] +TODOs includes: +* Add transposition errors for Levenshtein-distance algorithm. +* Add phonetic errors (spelling by sound). +* Add derivation errors. -[John E. Hopcroft](http://www.cs.cornell.edu/Info/Department/Annual95/Faculty/Hopcroft.html), Rajeev Motwani and - Jefferey D. Ullman, Introduction to Automata Theory, Languages and Computation, 2nd edition, Adison-Wesley, 2001. +## References +* [John E. Hopcroft](http://www.cs.cornell.edu/Info/Department/Annual95/Faculty/Hopcroft.html), Rajeev Motwani and Jefferey D. Ullman, Introduction to Automata Theory, Languages and Computation, 2nd edition, Adison-Wesley, 2001. +* J. A. Brzozowski, + Canonical regular expressions and minimal state graphs for definite events, + in Mathematical Theory of Automata, Volume 12 of MRI Symposia Series, + pp. 529-561, Polytechnic Press, Polytechnic Institute of Brooklyn, N.Y., + 1962. +* + John E. Hopcroft + , + + An n log n algorithm for minimizing the states in a finite automaton + , + in The Theory of Machines and Computations, Z. Kohavi (ed.), pp. 189-196, + Academic Press, 1971. +* + Kemal Oflazer, + + Error-tolerant Finite State Recognition with Applications to + Morphological Analysis and Spelling Correction + , + Computational Linguistics, 22(1), pp. 73--89, March, 1996. +* + + Klaus U. Schulz + and + Stoyan Mihov, + + Fast String Correction with Levenshtein-Automata, + + International Journal of Document Analysis and Recognition, 5(1):67--85, 2002. +* + + Zbigniew J. Czech + , + + George Havas + and + Bohdan S. Majewski, + + An Optimal Algorithm for Generating Minimal Perfect Hash Functions + , Information Processing Letters, 43(5):257--264, 1992.