1010STEMMER = SnowballStemmer ("spanish" )
1111STOPWORDS = set (stopwords .words ("spanish" ))
1212BAD_REGEXES = [
13-
1413 'ano' , 'amaona' , 'autofellation' , 'aweonao' ,
1514 'bastardo' , 'bollo' , 'boludo' , 'bugarr[óo]n' ,
1615 'ca(gar(ro)?|ca)' , 'cabr[óo]n(es)?' , 'caca' , 'caga(d[ao]|r)?' , 'capullo' ,
1716 'cagaro?' , 'carajo' ,
1817 'chinga(r|da)?' , 'chingu?en' , 'chino' , 'choch[oa]' , 'cholo' , 'chucha' ,
19- 'chupa(r|me|mel[ao])' , 'chup[ea][nr]' , 'chupen(la|me)' ,
20- 'chupapollas' , 'chupamedias' , 'cipote' , 'clamidia' , 'coger' ,
21- 'cojones' , 'concha' , 'conejo' , 'consolador' , 'coño' , 'cuca' ,
22- 'culear' , 'culo' , 'cundango' ,
18+ 'chupa(r|me|mel[ao]|ban?)?' , 'chup[ea][nr]' , 'chupen(la|me)' , 'chupo' ,
19+ 'chupapollas' , 'chupamedias' , 'cipote' , 'clamidia' , 'co[gj]er' , 'cojio' ,
20+ 'cojones' , 'comeme' , 'comian' , 'conch(a|etumare)' , 'conejo' ,
21+ 'consolador' , 'co[ñn]o' , 'cuca' ,
22+ 'cule(ar|ros)' , 'culito' , 'cul(o|iaos?)' , 'cundango' ,
2323 'drogata' ,
24- 'facha' , 'follar' , 'fornicar' , 'fulana' , 'furcia' ,
25- 'gabacho' , 'gay' , 'gilipollas' , 'gitano' , 'gonorrea' , 'gordo' ,
26- 'gringo' , 'guiri' ,
27- 'herpes' , 'homosexual' , 'huevos' , '(huev|we)[óo]n' ,
28- 'imb[ée]cil' ,
29- 'japo' , 'joder' , 'joto' , 'jud[íi]o' ,
24+ 'facha' , 'folla(r|ba)' , 'follo' , 'fornicar' , 'fulana' , 'furcia' ,
25+ 'gabacho' , 'g[ae]ys?' , 'gilipollas' , 'gitano' , 'gonorrea' , 'gordo' ,
26+ 'gringo' , 'gue(vo|y)' , 'guiri' ,
27+ 'herpes' , 'homosexual' , 'huevos' , '(huev|we)[óo]n' , 'hijueputas?' ,
28+ 'holocuento' ,
29+ 'idiotas?' , 'imb[ée]cil' ,
30+ 'japo' , 'joder' , 'jotos?' , 'jud[íi]o' ,
3031 'lesbiana' ,
31- 'mach(orra|etorra)' , 'maldito' , 'mamada' , 'manola' ,
32- 'maric(a|[óo]n)' , 'marimach[ao]' , 'maripos[óo]n' ,
33- 'mea(r|da)' , 'mam[óo]n' , 'mierda' , 'minga' , 'moro' ,
34- 'nazi' , 'negrata' ,
32+ 'mach(orra|etorra)' , 'maldito' , 'malparido' , 'mama(da|guevo)' , 'mamon' ,
33+ 'manola' , 'maric(a|[óo]n)' , 'marimach[ao]' , 'maripos[óo]n' ,
34+ 'mea(r|da+)s?' , 'mam[óo]+n' , 'mierda' , 'minga' , 'mocos' , 'mojon' ,
35+ 'monda' , 'moro' ,
36+ 'nacio' , 'nazi' , 'negrata' ,
3537 'ojete' ,
36- 'paja' , 'paki' , 'pedo' , 'pelao' , 'pelotas' , 'pendejo' , 'pene' , 'picha' ,
37- 'pinche' , 'pito' , 'polla' , 'polvo' , 'poto' , 'prostituta' , 'put[ao]' ,
38+ 'pajas?' , 'pajero' , 'pario' , 'paki' , 'pedo' , 'pelao' , 'pelotas' ,
39+ 'pendej(o|a|ada)s?' ,
40+ 'pene' , 'peos?' , 'pich(a|ula)' , 'pijas?' , 'piko' ,
41+ 'pinches?' , 'pinga' , 'pipi' , 'pirobos' , 'pito' , 'pollas?' , 'poronga' ,
42+ 'polvo' , 'poto' , 'prostituta' , 'put[ao]+(s|n)?' ,
3843 'puñal' ,
3944 'rabo' , 'ramera' ,
40- 'sida' , 'skin(head)?' , 'subnormal' , 'sudaca' , 's[íi]filis' ,
41- 'tonto' , 'torta' , 'tortillera' , 'tranca' , 'tranny' ,
42- 'travesti' , 'travolo' , 'trolo' ,
43- 'verga' , 'vibrador' , 'vulva' ,
45+ 'sida' , 'skin(head)?' , 'sorete' , 'subnormal' , 'sudaca' , 's[íi]filis' ,
46+ 'tetas?' , 'tonto' , 'torta' , 'tortillera' , 'tranca' , 'tranny' ,
47+ 'travesti' , 'travolo' , 'trol(o|a)' ,
48+ 'vergas?' , 'vibrador' , 'violo' , 'vulva' ,
49+ 'wea' , 'weon(es)?' , 'wey' ,
4450 'zapatona' , 'zorra'
4551]
46- #TODO: more badwords
47- """
48- chinga chingada chingen chinguen chocha chucha chupa chupaba chupaban
49- chupame chupamela chupan chupar chupen chupenla chupenme chupo cojer cojio
50- cojones comeme comian conchetumare coño culeros culiao culiaos culito
51- follaba follar follo
52- gays gey gilipollas guevo guey
53- hijueputa hijueputas holocuento
54- idiota idiotas imbecil
55- jilipollas joder joto jotos
56- malparido malparidos mamada mamadas mamaguevo mamon marica maricas marico
57- maricon maricones merda metia meto mierda mierdaa mierdas mocos mojon monda
58- nacio
59- ojete pajas pajero
60- pario pattaya pedo
61- pedos pelan pelotudo pelotudos pendeja pendejada pendejadas pendejo pendejos peo
62- peos perra perras petardas petes picha pichula pija pijas piko pinche
63- pinches pinga pipi pirobos pito polla pollas poronga poto puta putaa putas
64- puto puton putos sorete
65- teta tetas trola trolo
66- verga vergas violo
67- wea weon weones wey
68- zorra"""
69-
70- #TODO: informal words
71- """
72- agan
73- agregenme
74- aguante
75- aki
76- amo
77- amoo
78- amooo
79- amoooo
80- apesta
81- asco
82- att
83- atte
84- bieber
85- bla
86- bobada
87- bobos
88- cafemontevideo
89- chido
90- comia
91- comio
92- contributions
93- copien
94- cursiva
95- descubrio
96- direction
97- estupida
98- estupides
99- estupido
100- estupidos
101- fea
102- feas
103- feo
104- feos
105- grasias
106- guapo
107- haha
108- hahaha
109- hola
110- holaa
111- holaaa
112- holaaaa
113- holaaaaa
114- holi
115- holis
116- hotmail
117- ijos
118- inserta
119- jaja
120- jajaj
121- jajaja
122- jajajaj
123- jajajaja
124- jajajajaj
125- jajajajaja
126- jajajajajaja
127- jajajajajajaja
128- jajajajajajajaja
129- jeje
130- jejeje
131- jiji
132- kien
133- kiero
134- komo
135- lean
136- lees
137- loko
138- lol
139- malparida
140- mcfinnigan
141- mensos
142- metio
143- metroflog
144- minecraft
145- muxo
146- negrita
147- ojala
148- osea
149- pene
150- penes
151- pollid
152- popo
153- porfavor
154- porke
155- porq
156- porqe
157- porqueria
158- profe
159- pupu
160- qiero
161- redtube
162- saludos
163- satanists
164- sierto
165- soi
166- sophonpanich
167- subnormal
168- tambn
169- tanga
170- tonta
171- tonto
172- tontos
173- umaxnet
174- vallanse
175- vayanse
176- wena
177- weno
178- xdd
179- xddd
180- xdddd
181- xfarm
182- yolo
183- zorpia
184- """
52+ INFORMAL_REGEXES = [
53+ 'agan' , 'agregenme' , 'aguante' , 'aki' , 'amo' , 'amoo' , 'amooo' , 'amoooo' ,
54+ 'apesta' , 'asco' , 'att' , 'atte' ,
55+ 'bieber' , 'bla' , 'bobada' , 'bobos' ,
56+ 'cafemontevideo' , 'chido' , 'comia' , 'comio' , 'contributions' , 'copien' ,
57+ 'cursiva' ,
58+ 'descubrio' , 'direction' ,
59+ 'estupida' , 'estupides' , 'estupido' , 'estupidos' ,
60+ 'fea' , 'feas' , 'feo' , 'feos' ,
61+ 'grasias' , 'guapo' ,
62+ 'haha' , 'hahaha' , 'hola+' , 'holis?' , 'hotmail' ,
63+ 'ijos' , 'inserta' ,
64+ '(ja)+' , '(je)+' , '(ji)+' ,
65+ 'kie(n|ro)' , 'komo' ,
66+ 'lean' , 'lees' , 'loko' , 'lol' ,
67+ 'malparida' , 'mcfinnigan' , 'mensos' , 'metio' , 'metroflog' , 'minecraft' ,
68+ 'muxo' , 'negrita' ,
69+ 'ojala' , 'osea' ,
70+ 'pene' , 'penes' , 'pollid' , 'popo' , 'porfavor' , 'porke' , 'porq' , 'porqe' ,
71+ 'porqueria' , 'profe' , 'pupu' ,
72+ 'qiero' ,
73+ 'redtube' ,
74+ 'saludos' , 'satanists' , 'sierto' , 'soi' , 'sophonpanich' , 'subnormal' ,
75+ 'tambn' , 'tanga' , 'tonta' , 'tonto' , 'tontos' ,
76+ 'umaxnet' ,
77+ 'vallanse' , 'vayanse' ,
78+ 'wena' , 'weno' ,
79+ 'xd+' , 'xfarm' ,
80+ 'yolo' ,
81+ 'zorpia'
82+ ]
18583BAD_REGEX = re .compile ("|" .join (BAD_REGEXES ))
84+ INFORMAL_REGEX = re .compile ("|" .join (INFORMAL_REGEXES ))
18685DICTIONARY = enchant .Dict ("es" )
18786
18887def stem_word_process ():
@@ -197,6 +96,13 @@ def is_badword(word):
19796 return is_badword
19897is_badword = LanguageUtility ("is_badword" , is_badword_process )
19998
99+ def is_informal_word_process ():
100+ def is_informal_word (word ):
101+ return bool (INFORMAL_REGEX .match (word .lower ()))
102+ return is_informal_word
103+ is_informal_word = LanguageUtility ("is_informal_word" ,
104+ is_informal_word_process , depends_on = [])
105+
200106def is_misspelled_process ():
201107 def is_misspelled (word ):
202108 return not DICTIONARY .check (word )
0 commit comments