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
| def constrliste(path):
with open(path, "r") as f:
return [[w for w in l.split()] for l in f.readlines()]
#liste = constrliste("texte.txt")
#print(liste)
# Pour test
liste = [["un", "petit", "test"], ["et", "après", "je", "vais", "me", "coucher"]]
def constrDic(path): with open(path, "r") as f:
dct={}
for l in f.readlines():
s = l.split()
if s[0] in dct:
dct[s[0]].add(s[1:])
else:
dct[s[0]] = set(s[1:])
return dico
#di = constrDic("dico.txt")
#print(di)
# Pour test
di = {"un": {"article", "adjectif", "pronom", "nom"},
"petit": {"adjectif"},
"test": {"nom"},
"et": {"conjonction"},
"après": {"adverbe"},
"je": {"pronom"},
"vais": {"verbe"},
"me": {"pronom"},
"coucher": {"verbe"}}
# On crée un dict ayant pour clé toutes les catégories, et pour valeur des dicts ayant pour clé toutes
# les catégories, et pour valeur le nombre doccurences tupple [avant, après].
cat = set()
for el in di.values():
cat |= el
cat = list(cat)
cat = dict([(c, dict([(c2, [0, 0]) for c2 in cat])) for c in cat])
print(cat)
# Pour chaque mot de chaque ligne, on itère sur chacune de ses catégories, et on y ajoute un pour
# chaque catégories des mots précédents et/ou suivants
for l in liste:
ln = len(l)
for i, w in enumerate(l):
for c in di[w]:
if i > 0: # Pas le premier mot de la ligne.
for c2 in di[l[i-1]]:
cat[c][c2][0] += 1
if i+1 < ln: # Pas le dernier mot de la ligne.
for c2 in di[l[i+1]]:
cat[c][c2][1] += 1
print(cat)
for cn, c in cat.items():
print(cn, "→\n [avant]", " ".join(["{}*: {};".format(cn2, c2[0]) for cn2, c2 in c.items() if c2[0]]),
"\n [après]", " ".join(["{}*: {};".format(cn2, c2[1]) for cn2, c2 in c.items() if c2[1]])) |
Partager