Overview
Comment: | [graphspell][py] spellchecker wrapper for ibdawg |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk | graphspell |
Files: | files | file ages | folders |
SHA3-256: |
dbf7b575b030e837130b31b122916a0e |
User & Date: | olr on 2018-02-13 10:47:09 |
Original Comment: | [graphspell] spellchecker wrapper for ibdawg |
Other Links: | manifest | tags |
Context
2018-02-13
| ||
10:47 | [graphspell][js] spellchecker wrapper for ibdawg check-in: c989c20101 user: olr tags: trunk, graphspell | |
10:47 | [graphspell][py] spellchecker wrapper for ibdawg check-in: dbf7b575b0 user: olr tags: trunk, graphspell | |
2018-02-12
| ||
23:36 | [fr] pt: à l’époque check-in: 067013544a user: olr tags: trunk, fr | |
Changes
Modified gc_lang/fr/rules.grx from [a338fa9d13] to [29eda24584].
︙ | ︙ | |||
5766 5767 5768 5769 5770 5771 5772 5773 5774 5775 5776 5777 5778 5779 | TEST: Une tierce connaissance qui est au pire triviale, mais non nulle. TEST: ces immeubles qui les ont le plus marqués TEST: quel potentiel électoral réel pour les souverainistes pur sucre ? TEST: Cette scène que décrit ici Yannick est représentative. TEST: attentifs aux spécificités socioculturelles de chaque peuple, constituées dans la longue durée autour d’une langue et de traditions TEST: Il était à l’époque chargé de maintenir en état ces machines. # # //////////////////////////////////////// RÈGLES DE CONTRÔLE //////////////////////////////////////// # !!!! Redondances dans la phrase | > | 5766 5767 5768 5769 5770 5771 5772 5773 5774 5775 5776 5777 5778 5779 5780 | TEST: Une tierce connaissance qui est au pire triviale, mais non nulle. TEST: ces immeubles qui les ont le plus marqués TEST: quel potentiel électoral réel pour les souverainistes pur sucre ? TEST: Cette scène que décrit ici Yannick est représentative. TEST: attentifs aux spécificités socioculturelles de chaque peuple, constituées dans la longue durée autour d’une langue et de traditions TEST: Il était à l’époque chargé de maintenir en état ces machines. # # //////////////////////////////////////// RÈGLES DE CONTRÔLE //////////////////////////////////////// # !!!! Redondances dans la phrase |
︙ | ︙ | |||
5963 5964 5965 5966 5967 5968 5969 | -1>> un # Accord de genre erroné : « \2 » est masculin. <<- __also__ and hasFemForm(\2) -2>> =suggFemSing(@, True) # Accord de genre erroné : « \1 » est un déterminant féminin. <<- morphex(\2, ":[NAQ].*:p", ":[siGW]") and not morph(word(-2), ":B", False) -2>> =suggFemSing(@) # Accord de nombre erroné : « \2 » devrait être au singulier. __[i]/gn(gn_une_des_accord)__ (une) +des +({w_2}) @@0,$ <<- morphex(\2, ":[NAQ].*:m", ":(?:e|f|G|W|V0|3s)") -1>> un # Accord de genre erroné : « \2 » est masculin. <<- __also__ and hasFemForm(\2) -2>> =suggFemPlur(@, True) # Accord de genre erroné : « \1 » est un déterminant féminin. | < | 5964 5965 5966 5967 5968 5969 5970 5971 5972 5973 5974 5975 5976 5977 | -1>> un # Accord de genre erroné : « \2 » est masculin. <<- __also__ and hasFemForm(\2) -2>> =suggFemSing(@, True) # Accord de genre erroné : « \1 » est un déterminant féminin. <<- morphex(\2, ":[NAQ].*:p", ":[siGW]") and not morph(word(-2), ":B", False) -2>> =suggFemSing(@) # Accord de nombre erroné : « \2 » devrait être au singulier. __[i]/gn(gn_une_des_accord)__ (une) +des +({w_2}) @@0,$ <<- morphex(\2, ":[NAQ].*:m", ":(?:e|f|G|W|V0|3s)") -1>> un # Accord de genre erroné : « \2 » est masculin. <<- __also__ and hasFemForm(\2) -2>> =suggFemPlur(@, True) # Accord de genre erroné : « \1 » est un déterminant féminin. TEST: un {{slashs}} ->> slash TEST: un {{fromages}}. ->> fromage TEST: Un {{ballons}} ->> ballon TEST: Une {{cinglées}} ->> cinglée |
︙ | ︙ |
Modified graphspell/spellchecker.py from [c6b35d80ee] to [19c7dd4df2].
1 2 3 4 5 6 7 | # Spellchecker # Wrapper for the IBDAWG class. # Useful to check several dictionaries at once. from . import ibdawg | > > > > > > > > | | | | > > > | | | < | > | > < | | > | | < > | | | < > > > | < < | | > > | | | > > > > | | | | > > > > | | | | < | < < < < < < | < | | | | | | < | < < < | < < | < < | | < < < < | < > | < | < < < < < < | < < | < < | < < < < < | < > | < | < | < | < < > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | # Spellchecker # Wrapper for the IBDAWG class. # Useful to check several dictionaries at once. # To avoid iterating over a pile of dictionaries, it is assumed that 3 are enough: # - the main dictionary, bundled with the package # - the extended dictionary, added by an organization # - the personal dictionary, created by the user for its own convenience import traceback from . import ibdawg dDefaultDictionaries = { "fr": "fr.bdic", "en": "en.bdic" } class Spellchecker (): def __init__ (self, sLangCode, sfMainDic="", sfExtendedDic="", sfPersonalDic=""): "returns True if the main dictionary is loaded" self.sLangCode = sLangCode if not sfMainDic: sfMainDic = dDefaultDictionaries.get(sLangCode, "") self.oMainDic = self._loadDictionary(sfMainDic) self.oExtendedDic = self._loadDictionary(sfExtendedDic) self.oPersonalDic = self._loadDictionary(sfPersonalDic) return bool(self.oMainDic) def _loadDictionary (self, sfDictionary): "returns an IBDAWG object" if not sfDictionary: return None try: return ibdawg.IBDAWG(sfDictionary) except: print("Error: <" + sDicName + "> not loaded.") traceback.print_exc() return None def setMainDictionary (self, sfDictionary): "returns True if the dictionary is loaded" self.oMainDic = self._loadDictionary(sfDictionary) return bool(self.oMainDic) def setExtendedDictionary (self, sfDictionary): "returns True if the dictionary is loaded" self.oExtendedDic = self._loadDictionary(sfDictionary) return bool(self.oExtendedDic) def setPersonalDictionary (self, sfDictionary): "returns True if the dictionary is loaded" self.oPersonalDic = self._loadDictionary(sfDictionary) return bool(self.oPersonalDic) # IBDAWG functions def isValidToken (self, sToken): "checks if sToken is valid (if there is hyphens in sToken, sToken is split, each part is checked)" if self.oMainDic.isValidToken(sToken): return True if self.oExtendedDic and self.oExtendedDic.isValidToken(sToken): return True if self.oPersonalDic and self.oPersonalDic.isValidToken(sToken): return True return False def isValid (self, sWord): "checks if sWord is valid (different casing tested if the first letter is a capital)" if self.oMainDic.isValid(sToken): return True if self.oExtendedDic and self.oExtendedDic.isValid(sToken): return True if self.oPersonalDic and self.oPersonalDic.isValid(sToken): return True return False def lookup (self, sWord): "checks if sWord is in dictionary as is (strict verification)" if self.oMainDic.lookup(sToken): return True if self.oExtendedDic and self.oExtendedDic.lookup(sToken): return True if self.oPersonalDic and self.oPersonalDic.lookup(sToken): return True return False def getMorph (self, sWord): "retrieves morphologies list, different casing allowed" lResult = self.oMainDic.getMorph(sToken) if self.oExtendedDic: lResult.extends(self.oExtendedDic.getMorph(sToken)) if self.oPersonalDic: lResult.extends(self.oPersonalDic.getMorph(sToken)) return lResult def suggest (self, sWord, nSuggLimit=10): "generator: returns 1,2 or 3 lists of suggestions" yield self.oMainDic.suggest(sWord, nSuggLimit) if self.oExtendedDic: yield self.oExtendedDic.suggest(sWord, nSuggLimit) if self.oPersonalDic: yield self.oPersonalDic.suggest(sWord, nSuggLimit) def select (self, sPattern=""): "generator: returns all entries which morphology fits <sPattern>" yield from self.oMainDic.select(sPattern) if self.oExtendedDic: yield from self.oExtendedDic.select(sPattern) if self.oPersonalDic: yield from self.oPersonalDic.select(sPattern) |