Processamento de Linguagem Natural com NLTK e Python

O processamento de linguagem natural (PLN) é uma subárea da Inteligência Artificial que tem como objetivo a compreensão automática de linguagens humanas, de maneira que possam ser manipuladas por computadores. Em geral, essas técnicas estão voltadas aos seguintes aspectos: fonologia, morfologia, sintaxe, semântica e pragmática.

Desta forma, uma dúvida muito comum é se existem diferenças entre processamento de linguagem natural e os mecanismos de busca, como Google ou Yahoo, por exemplo. A resposta para essa questão é sim e vou explicar um pouco sobre isso! Em geral, os mecanismos de busca utilizam várias métricas para definir a relevância de uma página baseado em um conjunto de palavras-chave, como: frequência de palavras, posição da palavra no documento, distância entre palavras e também a quantidade de páginas que referenciam a página. Essa última foi a técnica utilizada inicialmente pelo sistema de busca do Google e que o tornou o principal buscador da atualidade! Esse algoritmo foi chamado de Page Rank e em suma, faz o cálculo da importância da página baseado no número de links direcionados a ela. Com isso, concluímos que algoritmos de busca estão relacionados à encontrar conteúdo relevante baseado em palavras-chave definidas pelo usuário.

Por outro lado, PLN diz respeito à interpretação de frases do tipo: “este filme é para adulto” e “este filme é de um adulto”. A primeira frase está mais relacionada a um filme que pode ser assistido somente por um adulto (como uma classificação por faixa etária), enquanto que a segunda frase pode se referir a um filme que pertence a um adulto (o disco bluray é de um adulto). Na frase “Maria caiu, derrubou o computador e quebrou o braço”, um sistema de PLN deve ser capaz de identificar quem quebrou o braço, ou foi a Maria ou foi o computador. Para nós humanos é fácil obter essa resposta e sabemos que o braço é da Maria, porém, um computador não consegue identificar isso facilmente! Por isso, as técnicas de PLN podem ser muito complexas e requerem também conhecimentos em linguística.

Um dos primeiros exemplos nessa área foi o software SHRDLU, desenvolvido entre 1968 e 1970 por um pesquisador da Universidade de Stanford chamado Terry Winograd. A imagem abaixo mostra um exemplo dessa aplicação desenvolvido em Java, que pode ser baixado no link: http://hci.stanford.edu/~winograd/shrdlu/index.html.

[images style=”0″ image=”http%3A%2F%2Fiaexpert.academy%2Fwp-content%2Fuploads%2F2016%2F08%2Fshrdlu-color.gif” width=”225″ align=”center” top_margin=”0″ full_width=”Y”]

Note que nesta figura existem vários blocos e o objetivo é que o usuário converse com o sistema para que o gancho pegue e solte os blocos. Abaixo segue uma transcrição traduzida para o português de uma interação entre uma pessoa e o software.

Pessoa: Pegue o grande bloco azul.
Computador: Ok (faz a ação).
Pessoa: Pegue a pirâmide.
Computador: Eu não entendo a qual pirâmide você se refere.
Pessoa: Encontre um bloco que é mais alto do que o que você está segurando e coloque ele dentro da caixa.
Computador: Ok (faz a ação).

Neste pequeno exemplo de conversa podemos observar o funcionamento de um sistema de PLN, no qual o usuário escreve em “texto natural” e o computador deve entender e executar as ações correspondentes! Em resumo, esse tipo de sistema é utilizado para que uma pessoa possa efetivamente conversar com um computador. Eu escrevi um artigo sobre o Teste de Turing e abordei sobre outros exemplos, como a ELIZA , a Sete Zoom e o robô Ed. Se quiser saber mais informações e até mesmo testar uma conversa on-line com um computador, acesse este link: https://iaexpert.academy/2016/07/19/historico-da-ia-teste-de-turing/.

A principal aplicação desta tecnologia são os conhecidos “chatbots” ou robôs de conversa, que são sistemas inteligentes projetados para conversarem com humanos. Algumas lojas on-line, universidades, operadoras de telefonia e televisão já tem utilizado esses softwares há algum tempo para atendimento ao cliente. Desta forma, antes do cliente pedir ajuda para uma pessoa ele/ela conversa com o software para depois o caso ser repassado para um humano resolver, mas isso nas situações nas quais o sistema não conseguir resolver por conta própria! É importante salientar que essas técnicas não são somente para conversas em texto, mas também para conversas com voz, que pode ser implementado por meio do framework Modular Audio Recognition Framework escrito em Java (http://marf.sourceforge.net/). Veja abaixo um vídeo do Olhar Digital que mostra um pouco mais sobre isso.

[video_player type=”youtube” width=”560″ height=”315″ align=”center” margin_top=”0″ margin_bottom=”20″]aHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1PRGk1bDJpVWpSaw==[/video_player]

Uma das ferramentas mais utilizadas para processamento de linguagem natural é o NLTK (Natural Language Toolkit – http://www.nltk.org/), que foi desenvolvido em Python e apresenta uma gama muito grande de recursos, como: classificação, tokenização, stemming, tagging, parsing e raciocínio semântico. Todas essas funções são utilizadas para análise dos textos, e abaixo é mostrado um exemplo de código que extrai uma árvore semântica de um conjunto de texto. Essa árvore apresenta as classes de cada palavra, ou seja, se uma palavra é uma preposição, artigo, verbo, passado, futuro e consegue identificar até nomes próprios. Por meio da identificação de algumas dessas categorias em combinação com outras técnicas é possível identificar a semântica das frases, semelhante aos exemplos de frases citados anteriormente.

[images style=”0″ image=”http%3A%2F%2Fiaexpert.academy%2Fwp-content%2Fuploads%2F2016%2F08%2Ftree.png” width=”530″ align=”center” top_margin=”0″ full_width=”Y”]

Outras vantagens do NLTK é a existência de versões para Windows, Mac OS X e Linux, sendo também open source e existindo uma grande comunidade ativa de desenvolvedores que estão sempre atualizando e adicionando novos recursos. Para finalizar, coloco aqui duas experiências práticas que tive com essa biblioteca. A primeira foi o desenvolvimento de um artigo para a revista SQL Magazine da Devmedia, na qual desenvolvemos um exemplo prático para identificar emoções em frases, da área da Computação Afetiva (http://www.devmedia.com.br/mineracao-com-aprendizagem-de-maquina/30663). Outro exemplo foi a escrita do artigo científico “Comparativo entre o Algoritmo de Luhn e o algoritmos GistSumm para Sumarização de Documentos”, que foi publicado na Revista de Informática Teórica e Aplicada da Universidade Federal do Rio Grande do Sul. Você pode baixar o artigo no link abaixo:

[file_download style=”1″][download title=”Sumariza%C3%A7%C3%A3o%20Autom%C3%A1tica” icon=”style1-Pdf-64×64.png” file=”https://iaexpert.academy/wp-content/uploads/2016/08/Sumarização-Automática.pdf” package=”” level=”” new_window=””][/download][/file_download]

Para saber um pouco mais sobre a prática do NLTK, assista o vídeo abaixo 🙂

[video_player type=”youtube” width=”560″ height=”315″ align=”center” margin_top=”0″ margin_bottom=”20″]aHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1zaVZVYWwtVGVNYw==[/video_player]

Sobre o autor

19 comentários em “Processamento de Linguagem Natural com NLTK e Python”

  1. Seu site caiu como uma luva! Não tenho formação em tecnologia, mas na área linguística. Li um pouco sobre Processamento de Linguagem Natural e desde então tenho ficado cada vez mais interessada. Tenho encontrado poucos sites e materiais relacionados a esse assunto, fiquei empolgada ao encontrar o seu! Parabéns e obrigada.

  2. E ai Jones! Cara estou fazendo um artigo cientifico de um estudo comparativo entre os classificadores Naive Baiyes, KNN e Árovre de decisão para o desenvolvimento de um chatbot responsivo, afim de apontar as vantagens e desnvantagens de cada método no auxilio do processamento da linguagem natural. Gostaria de algumas dicas sobre quais ferramentas, linguagens e bibliotecas se enquadrariam bem neste escopo, por exemplo, phyton, nltk, weka, aiml… e como poderia estruturar este fluxo? Desde já agradeço! Abraço!

  3. Olá, essa biblioteca de NLTK para python consegue trabalhar com textos em português? Estou achando difícil encontrar uma biblioteca para classificar textos da nossa lingua.

  4. Pingback: Introdução ao NLTK na Prática | PHP Video Academy

  5. André Felipe Jesus do Nascimento Silva

    Olá Joes, boa noite!!
    Estou estudando vários assuntos da I.A a fim de escrever dois trabalhos para faculdade com esse mesmo tema. E de tudo que li, PLN parece ter me soado bem melhor aos meus ouvidos. Logo, tenho uma variedade de assuntos e cenários onde posso usar isso, mas preferi restringir a identificação de sentimentos e emoções nas Redes Sociais. Com isso eu poderia definir quão bem estão falando de alguma empresa ou pessoa. Bem comum isso,.. mas tenho uma dúvida boba: “Como é feita essa conexão do meu sistema inteligente com o Twitter, por exemplo? Seria por meio de uma API?” Podes me ajudar…

    Um forte abraço!!

  6. Olá boa tarde.
    Gostaria de fazer um trabalho para análise de prontuários médicos e tentar fazer análise de sentimentos neles, verificar se está evoluindo para melhoras ou algo nessa linha, o que você me sugere? tentei adaptar vários exemplos de tweets e outros que tem por aí, mas ainda não senti firmeza nos resultados. Seria em pt-br tá!

  7. Jones,
    parabéns pelas publicações. Utilizaremos seu texto como referencial em um projeto de iniciação científica. Sou da área de Letras e observei o quanto o PLN “conversa” com a construção textual e também pode ser utilizada para a verificação do que é discurso humano e/ou da inteligência artificial.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.