Beispiel #1
0
def treat_stemming(text):
    stemmer = RSLPStemmer()
    newText = list()
    for word in text.split(' '):
        if word:
            newText.append(stemmer.stem(word))
    return ' '.join(newText)
Beispiel #2
0
 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
Beispiel #3
0
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
Beispiel #4
0
#!/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
Beispiel #6
0
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
Beispiel #7
0
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()
Beispiel #8
0
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))