-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathtext_processing.py
More file actions
210 lines (192 loc) · 9.45 KB
/
Copy pathtext_processing.py
File metadata and controls
210 lines (192 loc) · 9.45 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
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
# -*- coding: utf-8 -*-
"""
__author__ = "Ahirton Lopes e Rodrigo Pasti"
__copyright__ = "Copyright 2015/2016, Mackenzie University"
__credits__ = ["Ahirton Lopes", "Rodrigo Pasti", "Leandro de Castro"]
__license__ = "None"
__version__ = "1.0"
__maintainer__ = "Ahirton Lopes"
__email__ = "ahirton.xd@gmail.com"
__status__ = "Beta"
"""
'''
"""
-----------------------------------------------------------------------------------------------------------------------
FUNÇÕES PARA TRATAMENTO TEXTUAL E FORMATAÇÃO
-----------------------------------------------------------------------------------------------------------------------
"""
'''
import re
import nltk
import semantic_dictionaries
import unicodedata
import file_utils
from nltk.corpus import mac_morpho
"""
Recebe uma lista de documentos e retorna o tratamento destes na forma de lista
de tokens
"""
def tokenize(documents):
nDocs = len(documents) # len = Retorna o comprimento (o número de itens) de um objeto
documentsProcessed = [] # Cria lista para todos os documentos a serem processados
for iDoc in range(0,nDocs): # Ordenação dos diferentes documentos a serem processados
#adicionar a lista
#documentsProcessed.append(nltk.word_tokenize(documents[iDoc].decode('utf-8')))
documentsProcessed.append(nltk.word_tokenize(documents[iDoc])) # Adiciona à lista a partir da ordenação
return documentsProcessed
# print docsPro[0:10]
"""
# Recebe uma lista de documentos na forma de tokens e retorna os respectivos bigrams
"""
def tokenizeBigram(documents):
nDocs = len(documents) # len = Retorna o comprimento (o número de itens) de um objeto
documentsProcessed = [] # Cria lista para todos os documentos a serem processados
for iDoc in range(0,nDocs): # Ordenação dos diferentes documentos a serem processados
#adicionar a lista
documentsProcessed.append(nltk.bigrams(documents[iDoc])) # Adiciona à lista a partir da ordenação
return documentsProcessed
# print docsPro[0:10]
"""
Separa um texto em sentenças (frases) - Aqui, por ora em portugues!
"""
def tokenize_sentence(documents):
tkr = nltk.data.load('tokenizers/punkt/portuguese.pickle') # Dicionário em Português para reconhecimentos das diferentes palavras/pontuação
nDocs = len(documents) # len = Retorna o comprimento (o número de itens) de um objeto
documentsProcessed = [] # Cria lista para todos os documentos a serem processados
for iDoc in range(0,nDocs): # Ordenação dos diferentes documentos a serem processados
documentsProcessed.append(tkr.tokenize(documents[iDoc])) # Adiciona à lista a partir da ordenação
return documentsProcessed
"""
Remove stop words de uma lista de documentos
"""
def remove_stopwords(documents):
nDocs = len(documents) # len = Retorna o comprimento (o número de itens) de um objeto
documentsProcessed = [] # Cria lista para todos os documentos a serem processados
stopwords = semantic_dictionaries.stop_words() + semantic_dictionaries.stop_words_sincronica() # Indicação das stopwrods a serem utilizadas, via dicionários
for iDoc in range(0,nDocs): # Ordenação dos diferentes documentos a serem processados
tokens = documents[iDoc] # Lista para verificação dos tokens gerados via documentos
#stop words para cada token do documento corrente
nTokens = len(tokens) # len = Retorna o comprimento dos tokens gerados
importantWords = [] # Cria lista para as palavras importantes a não serem eliminadas
for iToken in range(0,nTokens): # Para cada token gerado segundo ordenação
if tokens[iToken] not in stopwords: # Verificar se cada token é ou não stopword
importantWords.append(tokens[iToken]) # Se não for stopword, processa-se como palavra importante
documentsProcessed.append(importantWords) # Reconfigura-se o documento com as stopwrods removidas
return documentsProcessed
"""
# Faz o stemming de uma lista de documentos (disponivel: Pt e En)
"""
def stemming(documents,lang):
nDocs = len(documents) # len = Retorna o comprimento (o número de itens) de um objeto
documentsProcessed = [] # Cria lista para todos os documentos a serem processados
if lang == 'Pt': # Se linguagem português
stemmer = nltk.stem.RSLPStemmer() # Stemmer via NTLK para língua portuguesa
elif lang == 'En': # Se linguagem inglês
stemmer = nltk.stem.lancaster.LancasterStemmer() # Stemmer via NTLK para língua inglesa
for iDoc in range(0,nDocs): # Ordenação dos diferentes documentos a serem processados
tokens = documents[iDoc] # Lista para verificação dos tokens gerados via documentos
nTokens = len(tokens) # len = Retorna o comprimento dos tokens gerados
stemWords = [] # Cria lista de palavras para stemming
for iToken in range(0,nTokens): # Para cada token gerado segundo ordenação
stemWords.append(stemmer.stem(tokens[iToken])) # Processa-se os tokens eleiminando as variações morfológicas de uma palavra (redução)
tokens = stemWords # Lista para verificação dos tokens gerados (sentenças sem variações morfológicas)
documentsProcessed.append(tokens) # Reconfigura-se o documento com as as variações morfológicas removidas
return documentsProcessed
"""
Remove palavras de um documento que contenham algum dos simbolos contidos em
uma lista de entrada
"""
def remove_words_with(documents,listSym):
nDocs = len(documents) # len = Retorna o comprimento (o número de itens) de um objeto
documentsProcessed = [] # Cria lista para todos os documentos a serem processados
for iDoc in range(0,nDocs): # Ordenação dos diferentes documentos a serem processados
tokens = documents[iDoc] # Lista para verificação dos tokens gerados via documentos
tokensNR = [] # Cria lista para os tokens gerados
nTokens = len(tokens) # len = Retorna o comprimento dos tokens gerados
for iToken in range(0,nTokens): # Para cada token gerado segundo ordenação verifica-se a existência dos símbolos em listSym
foundSymbol = False
for sym in listSym:
if tokens[iToken].find(sym) != -1:
foundSymbol = True
break
if foundSymbol == False:
tokensNR.append(tokens[iToken])
#if len(tokensNR) > 0:
documentsProcessed.append(tokensNR)
return documentsProcessed
"""
# Faz a conversão de um texto para todas as letras minusculas
"""
def text_lower(documents):
nDocs = len(documents)
documentsProcessed = []
for iDoc in range(0,nDocs):
tokens = documents[iDoc]
nTokens = len(tokens)
for iToken in range(0,nTokens):
tokens[iToken] = tokens[iToken].lower()
documentsProcessed.append(tokens)
return documentsProcessed
"""
# Remove pontuações de um conjunto de documentos
"""
def remove_punctuation(documents):
nDocs = len(documents)
documentsProcessed = []
for iDoc in range(0,nDocs):
tokens = documents[iDoc]
tokensNR = []
nTokens = len(tokens)
for iToken in range(0,nTokens):
# print tokens[iToken].decode('utf-8')
punctuation = ',.?!:;" '
for sym in punctuation:
tokens[iToken] = tokens[iToken].replace(sym,'')
#print tokens[iToken]
if len(tokens[iToken]) > 0:
tokensNR.append(tokens[iToken])
#if len(tokensNR) > 0:
documentsProcessed.append(tokensNR)
return documentsProcessed
# nDocs = len(documentsProcessed)
# for iDoc in range(0,nDocs):
# if len(documentsProcessed[iDoc])<1:
# print 'fuuuuuuuuuuuuuuuuu'
# return documentsProcessed
"""
# Remove acentos de um conjunto de documentos
"""
def remove_accents(documents):
nDocs = len(documents)
documentsProcessed = []
for iDoc in range(0,nDocs):
tokens = documents[iDoc]
nTokens = len(tokens)
for iToken in range(0,nTokens):
#print tokens[iToken].decode('utf-8')
#uStr = tokens[iToken].decode('utf-8')#unicode(tokens[iToken])
strNorm = unicodedata.normalize('NFKD', tokens[iToken])#.decode('utf-8'))
tokens[iToken] = strNorm.encode('ASCII', 'ignore')
#print tokens[iToken]
documentsProcessed.append(tokens)
return documentsProcessed
"""
Faz um tagging (analise morfologica de uma lista de documentos)
"""
def tagging(documents):
nDocs = len(documents)
# print nDocs
documentsProcessed = []
unigram_tagger = []
try:
unigram_tagger = file_utils.load_object('tagger1','tagger', None)
print unigram_tagger
except:
train_set = mac_morpho.tagged_sents()
#test_set = mac_morpho.tagged_sents()[10001:10010]
unigram_tagger = nltk.UnigramTagger(train_set)
file_utils.save_object(unigram_tagger, 'tagger1','tagger', None)
for iDoc in range(0,nDocs):
#tokens = documents[iDoc]
documentsProcessed.append(unigram_tagger.tag(documents[iDoc]))
return documentsProcessed