75 lines
2.4 KiB
Python
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",
|
|
"?",
|
|
)
|
|
))
|