-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathppsing.py
More file actions
176 lines (126 loc) · 4.3 KB
/
ppsing.py
File metadata and controls
176 lines (126 loc) · 4.3 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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
from nltk import word_tokenize
import unicodedata
import pickle
from nltk.corpus import wordnet as wn
from pattern.es import lemma, singularize, parse
from constantes import stopWords, abc
#se carga el diccionario si no existe crea uno nuevo
name_dict='frec_words'
frec_words=dict()
try:
infile = open(name_dict,'rb')
frec_words = pickle.load(infile)
infile.close()
except FileNotFoundError:
frec_words=dict()
#funcion que elmina todos los signos que no son palabras, puntos o espacios
def elimina_sign(text):
text_out=''
for i in text:
if i not in abc:
text_out+=' '
else :
text_out +=i
return text_out
def elimina_tildes(s):
return ''.join((c for c in unicodedata.normalize('NFD', s) if unicodedata.category(c) != 'Mn'))
# lemmatiza verbos y singulariza sustantivos y adjetivos
def pword(text):
ind=parse(text).split('/')[1][0]
# verbo
if ind=='V':
word=lemma(text)
# sustantivo o adjetivo
else:
word=singularize(text)
return word
# Encontrar Sinonimos y Antonimos
# entrega un conjunto de sinonimos y antonimos
def sin_ant(text):
lema=wn.lemmas(text,lang='spa')
antonimos=list()
sinonimos=list()
for i in lema:
sinonimos.extend(i.synset().lemma_names(lang='spa'))
for j in i.synset().lemmas():
for k in j.antonyms():
antonimos.extend(k.synset().lemma_names(lang='spa'))
sinonimos=set(sinonimos)
antonimos=set(antonimos)
return sinonimos,antonimos
## text es un string que deseas preprocesar, modificas el diccionario.
def processing(text):
output=list()
#quita el enlace
text=text.split('https')[0]
#pasa todo a minusculas
text = text.lower()
#elmina signos de puntuacion
#text=elimina_tildes(text)
#elimina caracteres
text=elimina_sign(text)
#separa el texto por frases u oraciones
frases=text.split('.');
#separa por las palabras
for fr in frases:
if len(fr)!=0:
words_sw = word_tokenize(fr)
words=[]
for i in words_sw:
if (len(i)>1):
if (i not in stopWords):
word=pword(i)
words.append(word)
if word not in frec_words.keys():
frec_words[word]=1;
else:
frec_words[word]=frec_words[word]+1
if len(words)!=0:
output.append(words)
return output
# mismo codigo que processing salvo que quita las palabras
# que no estan en el diccionario
# esta version se corre cuando el modelo ya esta creado.
def ptext(text):
output=list()
#quita el enlace
text=text.split('https')[0]
#pasa todo a minusculas
text = text.lower()
#elmina signos de puntuacion
#text=elimina_tildes(text)
#elimina caracteres
text=elimina_sign(text)
#separa el texto por frases u oraciones
frases=text.split('.');
#separa por las palabras
for fr in frases:
if len(fr)!=0:
words_sw = word_tokenize(fr)
words=[]
for i in words_sw:
word=pword(i)
words.append(word)
if len(words)!=0:
output.append(words)
return output
# funcion que guarda el diccionario, por default min_count=1,
# si este valor distinto de 1, elimina todas las palbras de frec menor
# a min_count del diccionario. (por implementar)
# si deseas puedes cambiar el nombre del diccionario donde se guardara
def save_dict(min_count=1,name=name_dict):
outfile = open(name_dict,'wb')
pickle.dump(frec_words,outfile)
outfile.close()
def save_data (frases):
#Leer datos de tweets
try:
infile = open('dataTweets','rb')
data = pickle.load(infile)
infile.close()
except FileNotFoundError:
data=list()
data.extend(frases)
outfile = open('dataTweets','wb')
pickle.dump(data,outfile)
outfile.close()