Index: graphspell-js/char_player.js ================================================================== --- graphspell-js/char_player.js +++ graphspell-js/char_player.js @@ -62,120 +62,147 @@ ["7", "ltLT"], ["8", "bB"], ["9", "gbdGBD"], ["0", "oôOÔ"], - ["a", "aàâáäæ"], - ["A", "AÀÂÁÄÆ"], - ["à", "aàâáäæ"], - ["À", "AÀÂÁÄÆ"], - ["â", "aàâáäæ"], - ["Â", "AÀÂÁÄÆ"], - ["á", "aàâáäæ"], - ["Á", "AÀÂÁÄÆ"], - ["ä", "aàâáäæ"], - ["Ä", "AÀÂÁÄÆ"], - - ["æ", "æéa"], - ["Æ", "ÆÉA"], - - ["c", "cçskqśŝ"], - ["C", "CÇSKQŚŜ"], - ["ç", "cçskqśŝ"], - ["Ç", "CÇSKQŚŜ"], - - ["e", "eéèêëœ"], - ["E", "EÉÈÊËŒ"], - ["é", "eéèêëœ"], - ["É", "EÉÈÊËŒ"], - ["ê", "eéèêëœ"], - ["Ê", "EÉÈÊËŒ"], - ["è", "eéèêëœ"], - ["È", "EÉÈÊËŒ"], - ["ë", "eéèêëœ"], - ["Ë", "EÉÈÊËŒ"], - - ["g", "gj"], - ["G", "GJ"], - - ["i", "iîïyíìÿ"], - ["I", "IÎÏYÍÌŸ"], - ["î", "iîïyíìÿ"], - ["Î", "IÎÏYÍÌŸ"], - ["ï", "iîïyíìÿ"], - ["Ï", "IÎÏYÍÌŸ"], - ["í", "iîïyíìÿ"], - ["Í", "IÎÏYÍÌŸ"], - ["ì", "iîïyíìÿ"], - ["Ì", "IÎÏYÍÌŸ"], - - ["j", "jg"], - ["J", "JG"], - - ["k", "kcq"], - ["K", "KCQ"], - - ["n", "nñ"], - ["N", "NÑ"], - - ["o", "oôóòöœ"], - ["O", "OÔÓÒÖŒ"], - ["ô", "oôóòöœ"], - ["Ô", "OÔÓÒÖŒ"], - ["ó", "oôóòöœ"], - ["Ó", "OÔÓÒÖŒ"], - ["ò", "oôóòöœ"], - ["Ò", "OÔÓÒÖŒ"], - ["ö", "oôóòöœ"], - ["Ö", "OÔÓÒÖŒ"], - - ["œ", "œoôeéèêë"], - ["Œ", "ŒOÔEÉÈÊË"], - - ["q", "qck"], - ["Q", "QCK"], - - ["s", "sśŝcç"], - ["S", "SŚŜCÇ"], - ["ś", "sśŝcç"], - ["Ś", "SŚŜCÇ"], - ["ŝ", "sśŝcç"], - ["Ŝ", "SŚŜCÇ"], - - ["u", "uûùüú"], - ["U", "UÛÙÜÚ"], - ["û", "uûùüú"], - ["Û", "UÛÙÜÚ"], - ["ù", "uûùüú"], - ["Ù", "UÛÙÜÚ"], - ["ü", "uûùüú"], - ["Ü", "UÛÙÜÚ"], - ["ú", "uûùüú"], - ["Ú", "UÛÙÜÚ"], - - ["v", "vw"], - ["V", "VW"], - - ["w", "wv"], - ["W", "WV"], - - ["x", "xck"], - ["X", "XCK"], - - ["y", "yÿiîŷýỳ"], - ["Y", "YŸIÎŶÝỲ"], - ["ÿ", "yÿiîŷýỳ"], - ["Ÿ", "YŸIÎŶÝỲ"], - ["ŷ", "yÿiîŷýỳ"], - ["Ŷ", "YŸIÎŶÝỲ"], - ["ý", "yÿiîŷýỳ"], - ["Ý", "YŸIÎŶÝỲ"], - ["ỳ", "yÿiîŷýỳ"], - ["Ỳ", "YŸIÎŶÝỲ"], - - ["z", "zs"], - ["Z", "ZS"], + ["a", "aAàÀâÂáÁäÄāĀæÆ"], + ["A", "AaÀàÂâÁáÄäĀāÆæ"], + ["à", "aAàÀâÂáÁäÄāĀæÆ"], + ["À", "AaÀàÂâÁáÄäĀāÆæ"], + ["â", "aAàÀâÂáÁäÄāĀæÆ"], + ["Â", "AaÀàÂâÁáÄäĀāÆæ"], + ["á", "aAàÀâÂáÁäÄāĀæÆ"], + ["Á", "AaÀàÂâÁáÄäĀāÆæ"], + ["ä", "aAàÀâÂáÁäÄāĀæÆ"], + ["Ä", "AaÀàÂâÁáÄäĀāÆæ"], + + ["æ", "æÆéÉaA"], + ["Æ", "ÆæÉéAa"], + + ["b", "bB"], + ["B", "Bb"], + + ["c", "cCçÇsSkKqQśŚŝŜ"], + ["C", "CcÇçSsKkQqŚśŜŝ"], + ["ç", "cCçÇsSkKqQśŚŝŜ"], + ["Ç", "CcÇçSsKkQqŚśŜŝ"], + + ["d", "dDðÐ"], + ["D", "DdÐð"], + + ["e", "eEéÉèÈêÊëËēĒœŒ"], + ["E", "EeÉéÈèÊêËëĒēŒœ"], + ["é", "eEéÉèÈêÊëËēĒœŒ"], + ["É", "EeÉéÈèÊêËëĒēŒœ"], + ["ê", "eEéÉèÈêÊëËēĒœŒ"], + ["Ê", "EeÉéÈèÊêËëĒēŒœ"], + ["è", "eEéÉèÈêÊëËēĒœŒ"], + ["È", "EeÉéÈèÊêËëĒēŒœ"], + ["ë", "eEéÉèÈêÊëËēĒœŒ"], + ["Ë", "EeÉéÈèÊêËëĒēŒœ"], + + ["f", "fF"], + ["F", "Ff"], + + ["g", "gGjJĵĴ"], + ["G", "GgJjĴĵ"], + + ["h", "hH"], + ["H", "Hh"], + + ["i", "iIîÎïÏyYíÍìÌīĪÿŸ"], + ["I", "IiÎîÏïYyÍíÌìĪīŸÿ"], + ["î", "iIîÎïÏyYíÍìÌīĪÿŸ"], + ["Î", "IiÎîÏïYyÍíÌìĪīŸÿ"], + ["ï", "iIîÎïÏyYíÍìÌīĪÿŸ"], + ["Ï", "IiÎîÏïYyÍíÌìĪīŸÿ"], + ["í", "iIîÎïÏyYíÍìÌīĪÿŸ"], + ["Í", "IiÎîÏïYyÍíÌìĪīŸÿ"], + ["ì", "iIîÎïÏyYíÍìÌīĪÿŸ"], + ["Ì", "IiÎîÏïYyÍíÌìĪīŸÿ"], + + ["j", "jJgGĵĴ"], + ["J", "JjGgĴĵ"], + + ["k", "kKcCqQ"], + ["K", "KkCcQq"], + + ["l", "lLłŁ"], + ["L", "LlŁł"], + + ["m", "mMḿḾ"], + ["M", "MmḾḿ"], + + ["n", "nNñÑńŃǹǸ"], + ["N", "NnÑñŃńǸǹ"], + + ["o", "oOôÔóÓòÒöÖōŌœŒ"], + ["O", "OoÔôÓóÒòÖöŌōŒœ"], + ["ô", "oOôÔóÓòÒöÖōŌœŒ"], + ["Ô", "OoÔôÓóÒòÖöŌōŒœ"], + ["ó", "oOôÔóÓòÒöÖōŌœŒ"], + ["Ó", "OoÔôÓóÒòÖöŌōŒœ"], + ["ò", "oOôÔóÓòÒöÖōŌœŒ"], + ["Ò", "OoÔôÓóÒòÖöŌōŒœ"], + ["ö", "oOôÔóÓòÒöÖōŌœŒ"], + ["Ö", "OoÔôÓóÒòÖöŌōŒœ"], + + ["œ", "œŒoOôÔeEéÉèÈêÊëË"], + ["Œ", "ŒœOoÔôEeÉéÈèÊêËë"], + + ["p", "pPṕṔ"], + ["P", "PpṔṕ"], + + ["q", "qQcCkK"], + ["Q", "QqCcKk"], + + ["r", "rRŕŔ"], + ["R", "RrŔŕ"], + + ["s", "sScCçÇśŚŝŜ"], + ["S", "SsCcÇ猜Ŝŝ"], + ["ś", "sScCçÇśŚŝŜ"], + ["Ś", "SsCcÇ猜Ŝŝ"], + ["ŝ", "sScCçÇśŚŝŜ"], + ["Ŝ", "SsCcÇ猜Ŝŝ"], + + ["t", "tT"], + ["T", "Tt"], + + ["u", "uUûÛùÙüÜúÚūŪ"], + ["U", "UuÛûÙùÜüÚúŪū"], + ["û", "uUûÛùÙüÜúÚūŪ"], + ["Û", "UuÛûÙùÜüÚúŪū"], + ["ù", "uUûÛùÙüÜúÚūŪ"], + ["Ù", "UuÛûÙùÜüÚúŪū"], + ["ü", "uUûÛùÙüÜúÚūŪ"], + ["Ü", "UuÛûÙùÜüÚúŪū"], + ["ú", "uUûÛùÙüÜúÚūŪ"], + ["Ú", "UuÛûÙùÜüÚúŪū"], + + ["v", "vVwW"], + ["V", "VvWw"], + + ["w", "wWvV"], + ["W", "WwVv"], + + ["x", "xXcCkK"], + ["X", "XxCcKk"], + + ["y", "yYiIîÎÿŸŷŶýÝỳỲȳȲ"], + ["Y", "YyIiÎîŸÿŶŷÝýỲỳȲȳ"], + ["ÿ", "yYiIîÎÿŸŷŶýÝỳỲȳȲ"], + ["Ÿ", "YyIiÎîŸÿŶŷÝýỲỳȲȳ"], + ["ŷ", "yYiIîÎÿŸŷŶýÝỳỲȳȲ"], + ["Ŷ", "YyIiÎîŸÿŶŷÝýỲỳȲȳ"], + ["ý", "yYiIîÎÿŸŷŶýÝỳỲȳȲ"], + ["Ý", "YyIiÎîŸÿŶŷÝýỲỳȲȳ"], + ["ỳ", "yYiIîÎÿŸŷŶýÝỳỲȳȲ"], + ["Ỳ", "YyIiÎîŸÿŶŷÝýỲỳȲȳ"], + + ["z", "zZsSẑẐźŹ"], + ["Z", "ZzSsẐẑŹź"], ]), d1toX: new Map([ ["æ", ["ae",]], ["Æ", ["AE",]], Index: graphspell-js/ibdawg.js ================================================================== --- graphspell-js/ibdawg.js +++ graphspell-js/ibdawg.js @@ -310,16 +310,10 @@ let nMaxDel = Math.floor(sWord.length / 5); let nMaxHardRepl = Math.max(Math.floor((sWord.length - 5) / 4), 1); let nMaxJump = Math.max(Math.floor(sWord.length / 4), 1); let oSuggResult = new SuggResult(sWord); this._suggest(oSuggResult, sWord, nMaxSwitch, nMaxDel, nMaxHardRepl, nMaxJump); - if (sWord.gl_isTitle()) { - this._suggest(oSuggResult, sWord.toLowerCase(), nMaxSwitch, nMaxDel, nMaxHardRepl, nMaxJump); - } - else if (sWord.gl_isLowerCase()) { - this._suggest(oSuggResult, sWord.gl_toCapitalize(), nMaxSwitch, nMaxDel, nMaxHardRepl, nMaxJump); - } let aSugg = oSuggResult.getSuggestions(nSuggLimit); if (sSfx || sPfx) { // we add what we removed return aSugg.map( (sSugg) => { return sPfx + sSugg + sSfx } ); } Index: graphspell/char_player.py ================================================================== --- graphspell/char_player.py +++ graphspell/char_player.py @@ -51,120 +51,147 @@ "7": "ltLT", "8": "bB", "9": "gbdGBD", "0": "oôOÔ", - "a": "aàâáäæ", - "A": "AÀÂÁÄÆ", - "à": "aàâáäæ", - "À": "AÀÂÁÄÆ", - "â": "aàâáäæ", - "Â": "AÀÂÁÄÆ", - "á": "aàâáäæ", - "Á": "AÀÂÁÄÆ", - "ä": "aàâáäæ", - "Ä": "AÀÂÁÄÆ", - - "æ": "æéa", - "Æ": "ÆÉA", - - "c": "cçskqśŝ", - "C": "CÇSKQŚŜ", - "ç": "cçskqśŝ", - "Ç": "CÇSKQŚŜ", - - "e": "eéèêëœ", - "E": "EÉÈÊËŒ", - "é": "eéèêëœ", - "É": "EÉÈÊËŒ", - "ê": "eéèêëœ", - "Ê": "EÉÈÊËŒ", - "è": "eéèêëœ", - "È": "EÉÈÊËŒ", - "ë": "eéèêëœ", - "Ë": "EÉÈÊËŒ", - - "g": "gj", - "G": "GJ", - - "i": "iîïyíìÿ", - "I": "IÎÏYÍÌŸ", - "î": "iîïyíìÿ", - "Î": "IÎÏYÍÌŸ", - "ï": "iîïyíìÿ", - "Ï": "IÎÏYÍÌŸ", - "í": "iîïyíìÿ", - "Í": "IÎÏYÍÌŸ", - "ì": "iîïyíìÿ", - "Ì": "IÎÏYÍÌŸ", - - "j": "jg", - "J": "JG", - - "k": "kcq", - "K": "KCQ", - - "n": "nñ", - "N": "NÑ", - - "o": "oôóòöœ", - "O": "OÔÓÒÖŒ", - "ô": "oôóòöœ", - "Ô": "OÔÓÒÖŒ", - "ó": "oôóòöœ", - "Ó": "OÔÓÒÖŒ", - "ò": "oôóòöœ", - "Ò": "OÔÓÒÖŒ", - "ö": "oôóòöœ", - "Ö": "OÔÓÒÖŒ", - - "œ": "œoôeéèêë", - "Œ": "ŒOÔEÉÈÊË", - - "q": "qck", - "Q": "QCK", - - "s": "sśŝcç", - "S": "SŚŜCÇ", - "ś": "sśŝcç", - "Ś": "SŚŜCÇ", - "ŝ": "sśŝcç", - "Ŝ": "SŚŜCÇ", - - "u": "uûùüú", - "U": "UÛÙÜÚ", - "û": "uûùüú", - "Û": "UÛÙÜÚ", - "ù": "uûùüú", - "Ù": "UÛÙÜÚ", - "ü": "uûùüú", - "Ü": "UÛÙÜÚ", - "ú": "uûùüú", - "Ú": "UÛÙÜÚ", - - "v": "vw", - "V": "VW", - - "w": "wv", - "W": "WV", - - "x": "xck", - "X": "XCK", - - "y": "yÿiîŷýỳ", - "Y": "YŸIÎŶÝỲ", - "ÿ": "yÿiîŷýỳ", - "Ÿ": "YŸIÎŶÝỲ", - "ŷ": "yÿiîŷýỳ", - "Ŷ": "YŸIÎŶÝỲ", - "ý": "yÿiîŷýỳ", - "Ý": "YŸIÎŶÝỲ", - "ỳ": "yÿiîŷýỳ", - "Ỳ": "YŸIÎŶÝỲ", - - "z": "zs", - "Z": "ZS", + "a": "aAàÀâÂáÁäÄāĀæÆ", + "A": "AaÀàÂâÁáÄäĀāÆæ", + "à": "aAàÀâÂáÁäÄāĀæÆ", + "À": "AaÀàÂâÁáÄäĀāÆæ", + "â": "aAàÀâÂáÁäÄāĀæÆ", + "Â": "AaÀàÂâÁáÄäĀāÆæ", + "á": "aAàÀâÂáÁäÄāĀæÆ", + "Á": "AaÀàÂâÁáÄäĀāÆæ", + "ä": "aAàÀâÂáÁäÄāĀæÆ", + "Ä": "AaÀàÂâÁáÄäĀāÆæ", + + "æ": "æÆéÉaA", + "Æ": "ÆæÉéAa", + + "b": "bB", + "B": "Bb", + + "c": "cCçÇsSkKqQśŚŝŜ", + "C": "CcÇçSsKkQqŚśŜŝ", + "ç": "cCçÇsSkKqQśŚŝŜ", + "Ç": "CcÇçSsKkQqŚśŜŝ", + + "d": "dDðÐ", + "D": "DdÐð", + + "e": "eEéÉèÈêÊëËēĒœŒ", + "E": "EeÉéÈèÊêËëĒēŒœ", + "é": "eEéÉèÈêÊëËēĒœŒ", + "É": "EeÉéÈèÊêËëĒēŒœ", + "ê": "eEéÉèÈêÊëËēĒœŒ", + "Ê": "EeÉéÈèÊêËëĒēŒœ", + "è": "eEéÉèÈêÊëËēĒœŒ", + "È": "EeÉéÈèÊêËëĒēŒœ", + "ë": "eEéÉèÈêÊëËēĒœŒ", + "Ë": "EeÉéÈèÊêËëĒēŒœ", + + "f": "fF", + "F": "Ff", + + "g": "gGjJĵĴ", + "G": "GgJjĴĵ", + + "h": "hH", + "H": "Hh", + + "i": "iIîÎïÏyYíÍìÌīĪÿŸ", + "I": "IiÎîÏïYyÍíÌìĪīŸÿ", + "î": "iIîÎïÏyYíÍìÌīĪÿŸ", + "Î": "IiÎîÏïYyÍíÌìĪīŸÿ", + "ï": "iIîÎïÏyYíÍìÌīĪÿŸ", + "Ï": "IiÎîÏïYyÍíÌìĪīŸÿ", + "í": "iIîÎïÏyYíÍìÌīĪÿŸ", + "Í": "IiÎîÏïYyÍíÌìĪīŸÿ", + "ì": "iIîÎïÏyYíÍìÌīĪÿŸ", + "Ì": "IiÎîÏïYyÍíÌìĪīŸÿ", + + "j": "jJgGĵĴ", + "J": "JjGgĴĵ", + + "k": "kKcCqQ", + "K": "KkCcQq", + + "l": "lLłŁ", + "L": "LlŁł", + + "m": "mMḿḾ", + "M": "MmḾḿ", + + "n": "nNñÑńŃǹǸ", + "N": "NnÑñŃńǸǹ", + + "o": "oOôÔóÓòÒöÖōŌœŒ", + "O": "OoÔôÓóÒòÖöŌōŒœ", + "ô": "oOôÔóÓòÒöÖōŌœŒ", + "Ô": "OoÔôÓóÒòÖöŌōŒœ", + "ó": "oOôÔóÓòÒöÖōŌœŒ", + "Ó": "OoÔôÓóÒòÖöŌōŒœ", + "ò": "oOôÔóÓòÒöÖōŌœŒ", + "Ò": "OoÔôÓóÒòÖöŌōŒœ", + "ö": "oOôÔóÓòÒöÖōŌœŒ", + "Ö": "OoÔôÓóÒòÖöŌōŒœ", + + "œ": "œŒoOôÔeEéÉèÈêÊëË", + "Œ": "ŒœOoÔôEeÉéÈèÊêËë", + + "p": "pPṕṔ", + "P": "PpṔṕ", + + "q": "qQcCkK", + "Q": "QqCcKk", + + "r": "rRŕŔ", + "R": "RrŔŕ", + + "s": "sScCçÇśŚŝŜ", + "S": "SsCcÇ猜Ŝŝ", + "ś": "sScCçÇśŚŝŜ", + "Ś": "SsCcÇ猜Ŝŝ", + "ŝ": "sScCçÇśŚŝŜ", + "Ŝ": "SsCcÇ猜Ŝŝ", + + "t": "tT", + "T": "Tt", + + "u": "uUûÛùÙüÜúÚūŪ", + "U": "UuÛûÙùÜüÚúŪū", + "û": "uUûÛùÙüÜúÚūŪ", + "Û": "UuÛûÙùÜüÚúŪū", + "ù": "uUûÛùÙüÜúÚūŪ", + "Ù": "UuÛûÙùÜüÚúŪū", + "ü": "uUûÛùÙüÜúÚūŪ", + "Ü": "UuÛûÙùÜüÚúŪū", + "ú": "uUûÛùÙüÜúÚūŪ", + "Ú": "UuÛûÙùÜüÚúŪū", + + "v": "vVwW", + "V": "VvWw", + + "w": "wWvV", + "W": "WwVv", + + "x": "xXcCkK", + "X": "XxCcKk", + + "y": "yYiIîÎÿŸŷŶýÝỳỲȳȲ", + "Y": "YyIiÎîŸÿŶŷÝýỲỳȲȳ", + "ÿ": "yYiIîÎÿŸŷŶýÝỳỲȳȲ", + "Ÿ": "YyIiÎîŸÿŶŷÝýỲỳȲȳ", + "ŷ": "yYiIîÎÿŸŷŶýÝỳỲȳȲ", + "Ŷ": "YyIiÎîŸÿŶŷÝýỲỳȲȳ", + "ý": "yYiIîÎÿŸŷŶýÝỳỲȳȲ", + "Ý": "YyIiÎîŸÿŶŷÝýỲỳȲȳ", + "ỳ": "yYiIîÎÿŸŷŶýÝỳỲȳȲ", + "Ỳ": "YyIiÎîŸÿŶŷÝýỲỳȲȳ", + + "z": "zZsSẑẐźŹ", + "Z": "ZzSsẐẑŹź", } d1toX = { "æ": ("ae",), "Æ": ("AE",), Index: graphspell/ibdawg.py ================================================================== --- graphspell/ibdawg.py +++ graphspell/ibdawg.py @@ -276,11 +276,11 @@ l.extend(self.morph(sWord.lower())) if sWord.isupper() and len(sWord) > 1: l.extend(self.morph(sWord.capitalize())) return l - #@timethis + @timethis def suggest (self, sWord, nSuggLimit=10): "returns a set of suggestions for " sWord = cp.spellingNormalization(sWord) sPfx, sWord, sSfx = cp.cut(sWord) nMaxSwitch = max(len(sWord) // 3, 1) @@ -287,14 +287,10 @@ nMaxDel = len(sWord) // 5 nMaxHardRepl = max((len(sWord) - 5) // 4, 1) nMaxJump = max(len(sWord) // 4, 1) oSuggResult = SuggResult(sWord) self._suggest(oSuggResult, sWord, nMaxSwitch, nMaxDel, nMaxHardRepl, nMaxJump) - if sWord.istitle(): - self._suggest(oSuggResult, sWord.lower(), nMaxSwitch, nMaxDel, nMaxHardRepl, nMaxJump) - elif sWord.islower(): - self._suggest(oSuggResult, sWord.title(), nMaxSwitch, nMaxDel, nMaxHardRepl, nMaxJump) aSugg = oSuggResult.getSuggestions(nSuggLimit) if sSfx or sPfx: # we add what we removed return list(map(lambda sSug: sPfx + sSug + sSfx, aSugg)) return aSugg