1""" 2Grammalecte - Suggestion phonétique 3""" 4 5# License: GPL 3 6 7import re 8 9from .phonet_data import dWord as _dWord 10from .phonet_data import lSet as _lSet 11from .phonet_data import dMorph as _dMorph 12 13 14def hasSimil (sWord, sPattern=None): 15 "return True if there is list of words phonetically similar to sWord" 16 if not sWord: 17 return False 18 if sWord in _dWord: 19 if sPattern: 20 return any(re.search(sPattern, sMorph) for sSimil in getSimil(sWord) for sMorph in _dMorph.get(sSimil, [])) 21 return True 22 if sWord[0:1].isupper(): 23 sWord = sWord.lower() 24 if sWord in _dWord: 25 if sPattern: 26 return any(re.search(sPattern, sMorph) for sSimil in getSimil(sWord) for sMorph in _dMorph.get(sSimil, [])) 27 return True 28 return False 29 30 31def getSimil (sWord): 32 "return list of words phonetically similar to sWord" 33 if not sWord: 34 return [] 35 if sWord in _dWord: 36 return _lSet[_dWord[sWord]] 37 if sWord[0:1].isupper(): 38 sWord = sWord.lower() 39 if sWord in _dWord: 40 return _lSet[_dWord[sWord]] 41 return [] 42 43 44def selectSimil (sWord, sPattern): 45 "return a set of words phonetically similar to sWord and whom POS is matching sPattern" 46 if not sPattern: 47 return set(getSimil(sWord)) 48 aSelect = set() 49 for sSimil in getSimil(sWord): 50 for sMorph in _dMorph.get(sSimil, []): 51 if re.search(sPattern, sMorph): 52 aSelect.add(sSimil) 53 return aSelect 54