-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtokenizer.py
More file actions
88 lines (73 loc) · 2.53 KB
/
tokenizer.py
File metadata and controls
88 lines (73 loc) · 2.53 KB
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import re
class Tokeniseur:
def __init__(self, grm_path="/content/grammar.txt",file_path="/content/texte.txt"):
self.grm_path=grm_path
@staticmethod
def read_grammar(grm_path:str)->str:
"""
Cette fonction lit un fichier de grammaire et renvoie à une chaîne de caractères
Entrée :
arg: chemin vers le fichier grammaire
Sortie :
str: contenu du fichier grammaire
"""
#On charge le contenu de notre grammaire
try:
with open(grm_path,'r',encoding='utf-8') as file:
print("Contenu de la grammaire : ")
grm_content=file.read()
except FileNotFoundError:
print(f"Fichier grammaire introuvable à l'adresse {grm_path}")
return grm_content
def read_file(self,file_path:str)->str:
with open(file_path, 'r', encoding='utf-8') as file:
texte=file.read()
return texte
def tokenize(self,text:str,lang:str="fr",keep_space:bool=False)->list:
"""
Tokéniseur
Entrées :
arg1 : la chaine à tokeniser
arg2 : la langue
Sortie :
la liste des tokens du texte donné
Nécessite les modules suivants : re
"""
grm_content=self.read_grammar(self.grm_path)
grm={
"fr": grm_content,
"default": r"\d{1,2}[-/]\d{1,2}[-/]\d{2,4}| \d+(?:[,.]\d+)?| [\w-]+'?+| \S"
}
#On tokénise selon les expressions régulières définies dans notre grammaire
space=""
if keep_space:
space=r"|\s"
if lang in grm:
regex=re.compile(grm[lang]+space,flags=re.I|re.X)
else:
regex=re.compile(grm["default"]+space)
tokens=regex.findall(text)
return tokens
def read_lexicon(lex_path:str)->dict:
#Ici on prend notre chemin de lexique en entrée, on lit le fichier et on associe chaque token du lexique à sa catégorie grammaticale
lexique={}
with open(lex_path, 'r', encoding='utf-8') as file:
lexicon=file.read()
lines=lexicon.split('\n')
for line in lines:
parts=line.strip().split('\t')
if len(parts)==2:
category,tokens=parts
tokens_list=tokens.split(', ')
for token in tokens_list:
lexique[token]=category
return lexique
def process_tokens(tokenized_text:list,lexicon:dict):
"""
Cette fonction associe chaque token à une catégorie grammaticale si ce token est dans le lexique. Sinon, "Catégorie: Inconnue".
"""
for token in tokenized_text:
if token in lexicon:
print(f"Token: {token}, Catégorie: {lexicon[token]}")
else:
print(f"Token: {token}, Catégorie: Inconnue")