Errol/src/normalizer.py

75 lines
2.4 KiB
Python

def is_interrogation_point(ele):
return isinstance(ele,str) and ele == '?'
def is_interrogation_word(ele):
return str(ele).lower() in ['qui','quelle','quel']
def normalize_triple(nlp_triple):
nt = normalize_triple
#rules = [r for r in dir(Rules) if "test_" in r and getattr(Rules,r)(nlp_triple))
match nlp_triple:
case (looking_for,(x,y,looking_for2),z) if is_interrogation_point(looking_for) and is_interrogation_point(looking_for2):
return (nt(x),nt(y),nt(z))
case (x,(looking_for,y,z),looking_for2) if is_interrogation_point(looking_for) and is_interrogation_point(looking_for2):
return (nt(x), nt(y), nt(z))
case {'els': [x,{'els': y, 'conj': conj}], 'conj': conj2} if conj == conj2:
return {'els': [nt(x)] + nt(y), 'conj': conj}
case {'els': [{'els': x, 'conj': conj},y], 'conj': conj2} if conj == conj2:
return {'els': nt(x) + [nt(y)], 'conj': conj}
case {'els': [{'els': x, 'conj': conj},{'els': y, 'conj': conj2}], 'conj': conj3} if conj == conj2 and conj == conj3:
return {'els': nt(x) + nt(y), 'conj': conj}
case (x,y,z):
return (nt(x),nt(y),nt(z))
case {'els':x, 'conj':conj} if isinstance(x, list):
return [nt(el) for el in x]
case word if is_interrogation_word(word):
return '?'
return nlp_triple
if __name__ == "__main__":
assert normalize_triple(
(
{
"els": [
"états unis",
{"els": ["la france", "italie"], "conj": "et"},
],
"conj": "et",
},
("?", "président", "Qui"),
"?",
)
) == ({'els': ['états unis', 'la france', 'italie'], 'conj': 'et'}, 'président', '?')
assert is_interrogation_point('?')
print(normalize_triple(
(
{
"els": [
"états unis",
{"els": ["la france", "italie"], "conj": "et"},
],
"conj": "et",
},
("?", "président", "Qui"),
"?",
)
))
print(normalize_triple(
(
{
"els": [
"états unis",
{"els": ["la france", "italie"], "conj": "et"},
],
"conj": "et",
},
"toto",
"?",
)
))