Você está visualizando atualmente Como detectar classes gramaticais usando Python

Como detectar classes gramaticais usando Python

Nessa aula você vai entender como é possível descobrir as classes gramaticais das palavras usando algoritmos de PLN em Python. Pode parecer uma tarefa “inútil”, no entanto, essa tarefa foi uma das primeiras a serem “atacadas” por pesquisadores de PLN. Isso aconteceu porque ao saber as classes gramaticais de um palavra, os pesquisadores conseguiriam executar diversas outras tarefas de PLN.

O reconhecimento de classes gramaticais (também chamado de part-of-speech tagging em inglês) é considerado uma tarefa muito específica dentro do contexto de PLN, sendo assim, ela também é mais “simples” de ser resolvida usando algoritmos computacionais (quando comparado a tarefas de nível discursivo, por exemplo). Mesmo assim, foram necessários muitos anos de pesquisa para propor algoritmos e ferramentas que resolviam com o máximo de precisão possível esse tipo de problema.

Nesse artigo você vai entender o que é “part-of-speech” e também como usar o Python para realizar esse “tagging” em textos da língua inglesa.

Você gosta de aprender sobre Processamento de Linguagem Natural? Veja nosso curso gratuito.

O que é Part-of-speech

Uma das principais técnicas para identificar padrões em textos escritos em linguagem natural é a separação e a atribuição de uma marcação a cada palavra simbolizando sua função na frase. Esta técnica é denominada como Part-of-Speech tokenization.   

Na gramática tradicional, as partes da fala (forma abreviada: PoS ou POS) são categorias de palavras (ou, mais geralmente, de itens lexicais) que possuem propriedades gramaticais semelhantes. As palavras designadas para a mesma parte da fala geralmente exibem um comportamento semelhante em termos de sintaxe – elas desempenham papéis semelhantes dentro da estrutura gramatical das sentenças – e, às vezes, em termos de morfologia, na medida em que sofrem inflexão por propriedades semelhantes.  

As partes do discurso em inglês comumente listadas são substantivo, verbo, adjetivo, advérbio, pronome, preposição, conjunção, interjeição e, às vezes, numeral, artigo ou determinante. Outras línguas indo-européias também têm essencialmente todas essas classes de palavras, uma exceção a essa generalização é que as línguas eslavas, assim como o latim e o sânscrito, não possuem artigos.

Além da família indo-européia, outras línguas européias, como húngaro e finlandês, ambas pertencentes à família uralista, carecem completamente de preposições ou têm pouquíssimas delas; ao contrário, eles têm “postposition”.   Outros termos além da parte do discurso – particularmente nas classificações lingüísticas modernas, que freqüentemente fazem distinções mais precisas do que o esquema tradicional – incluem classe de palavras, classe lexical e categoria lexical.

Alguns autores restringem o termo categoria lexical para se referir apenas a um tipo particular de categoria sintática; para eles, o termo exclui aquelas partes do discurso que são consideradas funcionais, como os pronomes. O termo classe de formulário também é usado, embora tenha várias definições conflitantes. Classes de palavras podem ser classificadas como abertas ou fechadas: classes abertas (como substantivos, verbos e adjetivos) adquirem novos membros constantemente, enquanto classes fechadas (como pronomes e conjunções) adquirem novos membros com pouca frequência, se forem.  

Quase todas as línguas têm a palavra classes substantivo e verbo, mas além destes dois há variações significativas entre as diferentes línguas. Por exemplo,   O japonês tem até três classes de adjetivos, onde o inglês tem um (não deve ser confundido com os sete tipos de adjetivos ingleses, ou o fato de que os adjetivos ingleses podem modificar ambos os substantivos e pronomes); Chineses, coreanos, japoneses e vietnamitas têm uma classe de classificadores nominais; e Muitas línguas não fazem distinção entre adjetivos e advérbios, ou entre adjetivos e verbos.

Devido a tal variação no número de categorias e suas propriedades identificadoras, a análise de partes do discurso deve ser feita para cada idioma individual. No entanto, os rótulos de cada categoria são atribuídos com base em critérios universais.   

Esse texto foi adaptado daqui 

PoS em python usando o nltk

O primeiro passo é importar o NLTK:  

import nltk

    Em seguida adicionamos um texto qualquer a uma string e realizamos o PoS:

# realizar o part-of-speech tokenizing significa dar a cada palavra da frase um "token" que diz que tipo de função aquela
#palafra possui na frase.

# inserimos um texto aleatório
texto = """France, in Western Europe, encompasses medieval cities, alpine villages and Mediterranean beaches. Paris, its capital, is famed for its fashion houses, classical art museums including the Louvre and monuments like the Eiffel Tower. The country is also renowned for its wines and sophisticated cuisine. Lascaux’s ancient cave drawings, Lyon’s Roman theater and the vast Palace of Versailles attest to its rich history."""

words = nltk.word_tokenize(texto)
tagged_words = nltk.pos_tag(words)

word_tags = []

for tw in tagged_words:
    word_tags.append(tw[0] + "_" + tw[1])
                     
tagged_paragraph = ' '.join(word_tags)

  Para acessar um único token:  

print (tagged_words[0])
('France', 'NNP')

Vinicius dos Santos

Apenas um apaixonado por Ciência da Computação e a forma com que ela pode transformar vidas!

Deixe um comentário

dezesseis + dois =