def treat_stemming(text): stemmer = RSLPStemmer() newText = list() for word in text.split(' '): if word: newText.append(stemmer.stem(word)) return ' '.join(newText)
def get_radicais(self, frase): radicalizador = RSLPStemmer() radicais = [] for palavra in frase: palavra_minusculo = palavra.lower() radical = radicalizador.stem(palavra_minusculo) radicais.append(radical) return radicais
def process_data(texts, swFlag, stFlag): stop_words = set() if swFlag: stop_words = set(stopwords.words('portuguese')) if stFlag: st = RSLPStemmer() processeddocs = [] for idx, sentence in enumerate(texts): sentenceList = text_to_word_sequence(sentence) processedSentence = '' for word in sentenceList: if word not in stop_words: if stFlag: newWord = st.stem(word) if newWord not in stop_words: processedSentence = processedSentence + ' ' + newWord else: processedSentence = processedSentence + ' ' + word processeddocs.append(processedSentence) return processeddocs
#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Thu Mar 11 10:07:33 2021 @author: paulogamero """ # ATIVIDADE: EXERCITANDO 1 - PARTE 02 # AUTOR: Paulo Gamero import docx import nltk from nltk import PorterStemmer, LancasterStemmer, word_tokenize, RSLPStemmer ## stemmig do pt rslp = RSLPStemmer() nltk.download('rslp') #stemmer para portuges ## Abrir o arquivo arquivo = 'C:\\Users\\Usuario\\Dropbox\\Pos\\Pós DataScience\\4 - Análise de textos com R e Python\\Dados\\Noticia_2.docx' doc = docx.Document(arquivo) # 02 - Lista de parágrafos texto_full = [] for paragrafo in doc.paragraphs: texto_full.append(paragrafo.text) # Seleção do 2° e 3° parágrafo p_2e3 = texto_full[2:4] # Tokenizar a lista de paragrafos
special_tokens = [ 'user', 'positive_emoticon', 'number', 'time', 'hashtag', 'negative_emoticon', 'exc', 'int', 'url' ] re_url = re.compile( '((http|https)\:\/\/)?[a-zA-Z0-9\.\/\?\:@\-_=#]+\.([a-zA-Z]){2,6}([a-zA-Z0-9\.\&\/\?\:@\-_=#])*', re.MULTILINE | re.UNICODE) re_user = re.compile('@[a-zA-Z0-9_]+') re_hash = re.compile('#[a-zA-Z0-9]+') re_time = re.compile('[0-9]+:[0-9]+') re_acceptedChars = re.compile('[^A-Za-z0-9áàâãéèêíïóôõöúçñÁÀÂÃÉÈÍÏÓÔÕÖÚÇÑ_ ]+') re_number = re.compile('[0-9]+') vocab_size = Counter() tokenizer = WordPunctTokenizer() stemmer = RSLPStemmer() def removeRepeatedCharacters(text, repeate_tolerance): current_char = '' repeated_counter = 1 new_string = [] for c in text: if c == current_char: if repeated_counter < repeate_tolerance: repeated_counter = repeated_counter + 1 new_string.append(c) else: new_string.append(c) repeated_counter = 1 current_char = c
def normalizacao1(dicSin, termo, radical, etiqueta): # inicio = datetime.now() # print inicio,"normalizacaoWordnet" #variáveis locais SA_wordnet = [] #armazena a wordnet sem acentos listaDicion = [ ] #lista com o número da linha de referência dos termos sinominos e com todos os termos sinonimos encontrados #abre o arquivo com as relacoes de sinonimia (termos linhaWordNet) e antonimia (termos contrarios) base_tep = codecs.open( os.path.join(os.path.dirname(__file__), '../../base_tep2/base_tep.txt'), 'r', 'UTF8') # dicionario = open('/home/panceri/git/alpes_v1/base_tep2/dicionarioSinonimos.txt', 'w') #variavel com conteúdo do arquivo em memoria #não imprimir essa variável, MUITO GRANDEE!!! wordNet = base_tep.readlines() #fechar arquivo base_tep.close() #retirar acentos da base for i in wordNet: SA_wordnet.append(removeA(i)) #teste com busca pelo radical (stemmer) stemmer = RSLPStemmer() # print termo, radical, etiqueta # yappi.set_clock_type('cpu') # yappi.start(builtins=True) # # start = time.time() # busca termo dentro de arquivo # armazena termo como chave do dicionario # os linhaWordNet são armazenados como uma lista if etiqueta == "N": for linhaWordNet in wordNet: if (linhaWordNet.find("[Substantivo]") >= 0): termosSinonimos = re.findall(r'\{(.*\w)\}', linhaWordNet) for listaSinonimos in termosSinonimos: sa_listaSinonimos = removePontuacao( listaSinonimos) #lista de linhaWordNet sem as , for palavraSinonima in sa_listaSinonimos.split(): st_palavraSinonima = stemmer.stem(palavraSinonima) if radical == st_palavraSinonima: numETerm = re.findall( r"([0-9]+). \[\w+\] \{(.*)\}", linhaWordNet) listaDicion.append(numETerm) dicSin[termo] = listaDicion # pprint(dicSin) elif etiqueta == "ADJ": for linhaWordNet in wordNet: if (linhaWordNet.find("[Adjetivo]") >= 0): termosSinonimos = re.findall(r'\{(.*)\}', linhaWordNet) for listaSinonimos in termosSinonimos: sa_listaSinonimos = removePontuacao( listaSinonimos) #lista de linhaWordNet sem as , for palavraSinonima in sa_listaSinonimos.split(): st_palavraSinonima = stemmer.stem(palavraSinonima) # auxTermos = sa_listaSinonimos.split() if radical == st_palavraSinonima: numETerm = re.findall( r"([0-9]+). \[\w+\] \{(.*)\}", linhaWordNet) listaDicion.append(numETerm) dicSin[termo] = listaDicion # pprint(dicSin) elif etiqueta == "V" or etiqueta == "VAUX": for linhaWordNet in wordNet: if (linhaWordNet.find("[Verbo]") >= 0): termosSinonimos = re.findall(r'\{(.*)\}', linhaWordNet) for listaSinonimos in termosSinonimos: sa_listaSinonimos = removePontuacao( listaSinonimos) #lista de linhaWordNet sem as , for palavraSinonima in sa_listaSinonimos.split(): st_palavraSinonima = stemmer.stem(palavraSinonima) # auxTermos = sa_listaSinonimos.split() if radical == st_palavraSinonima: numETerm = re.findall( r"([0-9]+). \[\w+\] \{(.*)\}", linhaWordNet) listaDicion.append(numETerm) dicSin[termo] = listaDicion # pprint(dicSin) else: #PARA TRATAR OS ADVÉRBIOS for linhaWordNet in wordNet: termosSinonimos = re.findall(r'\{(.*)\}', linhaWordNet) for listaSinonimos in termosSinonimos: sa_listaSinonimos = removePontuacao( listaSinonimos) #lista de linhaWordNet sem as , for palavraSinonima in sa_listaSinonimos.split(): st_palavraSinonima = stemmer.stem(palavraSinonima) # auxTermos = sa_listaSinonimos.split() if radical == st_palavraSinonima: numETerm = re.findall(r"([0-9]+). \[\w+\] \{(.*)\}", linhaWordNet) listaDicion.append(numETerm) dicSin[termo] = listaDicion
def normalizacao(dicSin, termo, radical, etiqueta): #variáveis locais SA_wordnet = [] #armazena a wordnet sem acentos listaTodosSin = [] #lista com todos os termos sinonimos encontrados listaNumRef = [] #lista com o número da linha de referência dos termos sinominos #abre o arquivo com as relacoes de sinonimia (termos linhaWordNet) e antonimia (termos contrarios) base_tep = codecs.open(os.path.join(os.path.dirname(__file__),'../../base_tep2/base_tep.txt'), 'r', 'UTF8') dicionario = open(os.path.join(os.path.dirname(__file__),'../../base_tep2/dicionarioSinonimos.txt'), 'w') #variavel com conteúdo do arquivo em memoria #não imprimir essa variável, MUITO GRANDEE!!! wordNet = base_tep.readlines() #fechar arquivo base_tep.close() #retirar acentos da base for i in wordNet: SA_wordnet.append(removeA(i)) #teste com busca pelo radical (stemmer) stemmer = RSLPStemmer() # termoStm = stemmer.stem(termo) # print termo, radical, etiqueta # busca termo dentro de arquivo # armazena termo como chave do dicionario # os linhaWordNet são armazenados como uma lista if etiqueta == "N": for linhaWordNet in SA_wordnet: if(linhaWordNet.find("[Substantivo]")>=0): if(linhaWordNet.find(termo)>=0): listaSinonimos = re.findall('{[^}]*}', linhaWordNet) for palavraSinonima in listaSinonimos: numRefSin = re.findall('^[0-9]*.', linhaWordNet) #retorna o numero de referencia dos linhaWordNet sa_palavraSinonima = removePontuacao(palavraSinonima) #lista de linhaWordNet sem as {} for termSinWordNet in sa_palavraSinonima.split(): st_termSinWordNet = stemmer.stem(termSinWordNet) if radical == st_termSinWordNet: listaNumRef.append(numRefSin) listaTodosSin.append(termSinWordNet) dicSin[termo] = listaNumRef,listaTodosSin elif etiqueta == "ADJ": for linhaWordNet in wordNet: if(linhaWordNet.find("[Adjetivo]")>=0): if(linhaWordNet.find(termo)>=0): listaSinonimos = re.findall('{[^}]*}', linhaWordNet) for palavraSinonima in listaSinonimos: numRefSin = re.findall('^[0-9]*.', linhaWordNet) #retorna o numero de referencia dos linhaWordNet sa_palavraSinonima = removePontuacao(palavraSinonima) #lista de linhaWordNet sem as {} for termSinWordNet in sa_palavraSinonima.split(): st_termSinWordNet = stemmer.stem(termSinWordNet) if radical == st_termSinWordNet: listaNumRef.append(numRefSin) listaTodosSin.append(sa_palavraSinonima) dicSin[termo] = listaNumRef,listaTodosSin elif etiqueta == "V" or etiqueta == "VAUX": for linhaWordNet in wordNet: if(linhaWordNet.find("[Verbo]")>=0): if(linhaWordNet.find(termo)>=0): listaSinonimos = re.findall('{[^}]*}', linhaWordNet) for palavraSinonima in listaSinonimos: numRefSin = re.findall('^[0-9]*.', linhaWordNet) #retorna o numero de referencia dos linhaWordNet sa_palavraSinonima = removePontuacao(palavraSinonima) for termSinWordNet in sa_palavraSinonima.split(): st_termSinWordNet = stemmer.stem(termSinWordNet) if radical == st_termSinWordNet: listaNumRef.append(numRefSin) listaTodosSin.append(sa_palavraSinonima) dicSin[termo] = listaNumRef else: #PARA TRATAR OS ADVÉRBIOS for linhaWordNet in wordNet: if(linhaWordNet.find(termo)>=0): listaSinonimos = re.findall('{[^}]*}', linhaWordNet) for palavraSinonima in listaSinonimos: numRefSin = re.findall('^[0-9]*.', linhaWordNet) #retorna o numero de referencia dos linhaWordNet sa_palavraSinonima = removePontuacao(palavraSinonima) for termSinWordNet in sa_palavraSinonima.split(): st_termSinWordNet = stemmer.stem(termSinWordNet) if radical == st_termSinWordNet: listaNumRef.append(numRefSin) listaTodosSin.append(sa_palavraSinonima) dicSin[termo] = listaNumRef ### verificar como imprimir isso num arquivo ### veriricar como imprimir um dicionario num arquivo txt listaux = [] for termo, listaNumRef in dicSin.items(): temp = '{}: {}'.format(termo, listaNumRef) # print '{}: {}'.format(termo, listaNumRef) listaux.append(temp) dicionario.write(temp) dicionario.close()
texto_e = 'My name is Maximus Decimus Meridius, commander of the armies of ' \ 'the north, General of the Felix legions and loyal servant to the ' \ 'true emperor, Marcus Aurelius. Father to a murdered son, husband ' \ 'to a murdered wife. And I will have my vengeance, in this life or ' \ 'the next (Gladiator, the movie).' texto_p = 'Meu nome é Maximus Decimus Meridius, comandante dos exércitos do ' \ 'norte, general das legiões de Félix e servo leal ao verdadeiro ' \ 'imperador, Marcus Aurelius. Pai de um filho assassinado, marido ' \ 'de uma esposa assassinada. E eu terei minha vingança, nesta vida ' \ 'ou na próxima (Gladiador, o filme).' tokens = word_tokenize(texto_e) tokens = word_tokenize(texto_p) tokens = ['amor', 'amora', 'amoroso'] porter = PorterStemmer() stems_porter = [porter.stem(t) for t in tokens] lancaster = LancasterStemmer() stems_lancaster = [lancaster.stem(t) for t in tokens] rslp = RSLPStemmer() stems_rslp = [rslp.stem(t) for t in tokens] print('{:12s} {:12s} {:12s} {}'.format('Tokens', 'Porter', 'Lancaster', 'RSLP')) for t, p, l, r in zip(tokens, stems_porter, stems_lancaster, stems_rslp): print('{:12s} {:12s} {:12s} {}'.format(t, p, l, r))