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