-
Notifications
You must be signed in to change notification settings - Fork 0
/
tokenizer.py
80 lines (51 loc) · 2.19 KB
/
tokenizer.py
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
import re
from base import POLARITY, mot_connu, BOOSTER_DICT, stop_words
# Cette fonction permet de nettoyer le texte
def nettoyer_text(text):
# On crée une variable vide pour la phrase "nettoyée"
resultat = ""
# r'(\S+|\s+)' permet de récupérer les mots et les espaces
# Différence avec split = garde les espaces
for mot in re.findall(r"(\S+|\s+)", text):
# On veut tous les mots connus, et les apostrophes afin de les analyser
if mot not in POLARITY or mot not in mot_connu or mot.lower() not in mot_connu or mot not in BOOSTER_DICT or mot.lower() not in BOOSTER_DICT:
for lettre in mot:
if lettre.isalnum() == False:
if lettre == "'":
resultat += " "
else:
resultat += " " + lettre.lower() + " "
else:
resultat += lettre.lower()
else:
resultat += mot
# permet de séparer les mots par des espaces
text = resultat.split()
# On supprime les mots inutiles
for i,mot in enumerate(text):
if text[i-1] + " " + mot in BOOSTER_DICT:
text[i] = text[i-1] + " " + mot
text.remove(text[i-1])
for mot in text:
if mot in stop_words:
if mot not in BOOSTER_DICT or mot not in mot_connu:
pos = text.index(mot)
text.remove(text[pos])
# On supprime les mots qui commencent par # ou @
text = " ".join([mot for mot in text if not mot.startswith("#") and not mot.startswith("@")])
# on renvoie le texte "nettoyé"
return text
# on separe le texte nettoyé en phrases et mots a partir des virgules
def split(text):
text = nettoyer_text(text)
# diviseur with regex
diviseur = re.split(r'[,;:!?.]', text)
textsplit = []
for partie in diviseur:
textsplit.append(partie.split())
for ligne in textsplit:
for i,mot in enumerate(ligne):
if ligne[i-1] + " " + mot in BOOSTER_DICT:
ligne[i] = ligne[i-1] + " " + mot
ligne.remove(ligne[i-1])
return textsplit