Processamento Automático da Língua Portuguesa: DevInSampa 2011
1. Processamento Automático da
Língua Portuguesa
Wesley Seidel William Colen
@wseidel @wcolen
LTasks.com
O seu aplicativo entendendo o seu texto.
http://devinsampa.com.br
3. Língua natural Língua formal
● Humana ● Criada artificialmente
● Comunicação ● Matemática, lógica,
computação
● Falada, escrita ou
gesticulada ● Escrita ou digital
● Rica, viva e natural ● Universal
● Estrutura “escondida” ● Estrutura evidente
● Um livro, um post de ● Um banco de dados,
blog, um tweet um RDF, um programa
4. Processamento de Linguagens Naturais (PLN)
Executar tarefas que envolvam linguagem humana
Extração de informação
Comunicação homem-máquina
Melhorar comunicação homem-homem
...
5. Exemplo: Agente de Conversação
Computador do filme
“2001: Uma Odisseia no Espaço”,
de Stanley Kubrick, 1968
HAL 9000
Reconhecimento de voz, inter-
● Conversa fluente em inglês pretação de linguagem natural
Planejamento de diálogo e sín-
● Leitura de lábios tese de voz
Arthur C. Clarke estava otimista de quando teríamos
um sistema de diálogo como o HAL 9000. Mas
quanto longe estamos disso?
6. Exemplo: Sistema de respostas
Buscar usando Fazer uma
palavras chave pergunta completa
Fácil para ● O que significa “procrastinar”?
os buscadores
atuais ● Em que ano a USP foi fundada?
● Quantos cursos eram oferecidos na
Universidade naquele ano?
Requer reso-
lução de infe- ● Quanta seda chinesa foi exportada para a
rências, sínte-
se e resumo de Inglaterra no final do século 18?
informações de
diversas fontes.
● O que os cientistas pensam a respeito da
clonagem humana?
7. Exemplo: tradução automática
Babel Fish é uma espécie fictícia na série
O Guia do Mochileiro das Galáxias
(1978), de Douglas Adams.
● Traduz instantaneamente de qualquer linguagem
para qualquer linguagem.
● Seria factível um sistema que fizesse o mesmo que
o Babel Fish?
● Imagine poder traduzir para o nosso idioma as
centenas de milhares de páginas Web que estão
originalmente em idiomas que não dominamos,
como o chinês, por exemplo?
8. Dave Bowan: Open the pod bay doors, HAL.
HAL: I'm sorry Dave, I'm afraid I can't do that.
HAL reconhece palavras em Reconhecimento
de voz
um sinal de áudio Fonética e
e gera áudio a partir de Fonologia
sequências de palavras Síntese de voz
Contrações: I'm, I can't
Morfologia
Interpreta variações: doors (plural)
HAL deve saber que “I'm I do, sorry that
afraid Dave I'm can't.” não teria sentido Sintaxe
para Dave
9. Ordem, afirmação ou pergunta?
HAL ainda deve interpretar o que Dave
deseja com a sentença -
– Ordem: HAL, open the pod bay door.
– Afirmação: HAL, the pod bay door is open.
– Pergunta: HAL, is the pod bay door open?
HAL é bem educado no uso do idioma:
– I'm sorry, I'm afraid Pragmática
(ou etiqueta
– I can't (no lugar de I won't) do diálogo)
10. Quanta seda chinesa foi exportada para a
Europa Ocidental no final do século 18?
Semântica Significado de “exportada”
das palavras ou “seda”
Europa Europa Oriental
Composição
Ocidental Sul da Europa
semântica
Significado de “final” quando
combinado a “século 18”
16. Conhecimento em
Processamento de Linguagem
Processador de Processador de
dados linguagem
Conhecimento da
língua
● Programa Unix “wc” - conta total de bytes,
palavras e linhas de um arquivo texto.
– Bytes e linhas → processador de dados
– Palavras → processador linguístico
17. Língua Dados
O Plínio Balduino gostou print tweet.length
do nível da programação 81
do evento para
desenvolvedores print tweet.author
DevInSampa. p_balduino
Ele comentou isto dia 26 print tweet.date
de julho no Twitter. O 20110726
pessoal do DevInSampa
gostou e retweetou.
18. Ambiguidade: problema fundamental
● “O sr. Mendonça chegou.”
– em “sr.”, o ponto marca fim de sentença?
● “Quem casa quer casa.”
– quando “casa” é verbo ou substantivo?
● “Eu preparei o pato dela.”
– Eu cozinhei o pato dela.
– Eu fiz o pato (de plástico?) dela.
19. Tarefas Processamento de Linguagem
● Segmentador de Sentenças
● Tokenizador
● Reconhecedor de Entidades Nomedas
● Etiquetador Morfológico
● Chunker
● Parser
…
20. Segmentador de sentenças
● Entrada
O sr. Mendonça chegou. Entrego-lhe os documentos.
● Saída
[O sr. Mendonça chegou.]
[Entrego-lhe os documentos.]
22. Detector de Entidades Nomeadas
● Entrada
O Red Hot se apresentará em São Paulo , o Wesley
vai no show .
● Saída
Bandas Pessoas
Red Hot
● ●Wesley
Lugares Eventos
● São Paulo ● show
23. Etiquetador Morfológico
● Entrada
Quem casa quer casa .
● Saída
Token Etiqueta
Quem pronome
casa verbo
quer verbo
casa substantivo
. pontuação
24. Chunker
● Entrada
A Maria vai entregar os documentos ao Pedro.
● Saída
A Maria: SN
vai entregar: SV
os documentos: SN
a: SP
o Pedro: SN
25. CoGrOO
● Extensão Corretor Gramatical LGPL para o
LibreOffice / Apache OpenOffice
● Aplica processamento de linguagem natural
● Sua API pode ser usada por outros projetos
26. CoGrOO
Sugeito As menina
Corretor ortográfico Corretor gramatical
Sugeito As menina
27. Arquitetura do CoGrOO
Text
Sentence Subject
Tokenizer Chunker
Boundary Verb
(2) (5)
Detector (1) Finder (6)
Grammar
Name PoS
Error
Finder (3) Tagger (4)
Detector (7)
Suggestions
Lexical Language Error
Dictionary Models Patterns
28. API do CogrOO 3.x
● Tarefas disponíveis
– Corretor Gramatical
– Detector de sentenças, Tokenizer ...
● Obtenha o binário
– Download ou Maven (repo próprio)
● Documentação
– http://ccsl.ime.usp.br/redmine/projects/cogroo/wiki/How_to
29. API do CogrOO 3.x
Corretor Gramatical
// instantiate the grammar checker passing the configuration
Cogroo theCogroo = new Cogroo(config);
// check the text to get the errors
List<Mistake> erros = theCogroo.checkText(input);
//p rint error details
for (Mistake erro : erros) {
System.out.println("Message '" + erro.getShortMessage() + "'");
System.out.println("Wrong text'" +input.substring(erro.getStart(),
erro.getEnd()) + "'");
System.out.print (" Suggestions: " );
for (String suggestion : erro.getSuggestions()) {
System.out.print("[" + suggestion + "] ");
}
}
30. API do CogrOO 3.x
Analisadores
// check the text to get the errors and the analysis result
CheckerResult results = theCogroo.analyseAndCheckText(input);
//lets show the flat structure
System.out.println("Flat structure for: n" + input);
for (Sentence sentence : results.sentences) {
for (Token token : sentence.getTokens()) {
// print the text
System.out.print(" " + input.substring(
token.getSpan().getStart(),
token.getSpan().getEnd()));
//print the lemma
System.out.print("t lemma[" + token.getPrimitive() + "] ");
//print the morphological tag, we use a tag interpreter here
System.out.print("t tag[" + mtagToStr(token.getMorphologicalTag())+"]");
)
)
31. API do CogrOO 3.x
Analisadores
Flat structure for: A moça bonita chegou hoje de carro novo.
A lemma[o] tag[DET_F_S_]
moça lemma[moço] tag[ADJ_F_S_]
bonita lemma[bonito] tag[N_F_S_]
chegou lemma[chegar] tag[V_PS_3S_IND_VFIN_]
hoje lemma[hoje] tag[ADV_]
de lemma[de] tag[PRP_]
carro lemma[carro] tag[N_M_S_]
novo lemma[novo] tag[ADJ_M_S_]
. lemma[.] tag[-PNT_ABS_]
32. Apache OpenNLP
● Framework livre para as tarefas de baixo nível
● Algoritmos de aprendizado de máquina
(entropia, redes neurais)
● Treinamento, avaliação e execução
● Diversos modelos prontos para uso, inclusive
português
● http://incubator.apache.org/opennlp/
33. Apache OpenNLP
Linha de comando
$ bin/opennlp POSTagger pt-pos-maxent.bin
Quem casa quer casa .
Quem_pron casa_v quer_v casa_s ._.
API
// load the models
InputStream modelIn = new FileInputStream("pt-pos-maxent.bin");
POSModel model = new POSModel(modelIn);
// load the pos tagger
POSTaggerME tagger = new POSTaggerME(model);
// load the pos tagger
String sent[] = new String[]{"Quem", "casa", "quer", "casa", "."};
String tags[] = tagger.tag(sent);
34. LTasks.com
● PLN as a Service: http://www.ltasks.com
● Enriquece seu texto com metadados
● Gratuito!
– API calls gratuitas
– Usuários com grandes necessidades podem
aumentar a cota
● Alto desempenho e Alta precisão
● Webservice (quase) pronto para uso
● SDK para diversas linguagens (em desenvolvimento)
35. LTasks.com
● PLN as a Service: http://www.ltasks.com
● Enriquece seu texto com metadados
● Gratuito!
– API calls gratuitas
– Usuários com grandes necessidades podem aumentar a
cota
● Alto desempenho e Alta precisão
● Webservice (quase) pronto para uso
● SDK para diversas linguagens (em desenvolvimento)
● Experimente hoje mesmo!
– http://ltasks.com/2011/08/demo-do-ltasks-para-o-devinsampa/
36. Referências utilizadas
[1] JURAFSKY, D.; MARTIN, J. H. . Speech and Language Processing. 2. ed.: Pearson, 2008.
1024 p.
[2] COLEN, W. Mini-curso Processamento de linguagens naturais: pondo em prática (in
Portuguese), EAIGIME II, August 25-28, 2009
[3] Corretor Gramatical CoGrOO: http://cogroo.sourceforge.net
[4] CoGrOO Comunidade: http://ccsl.ime.usp.br/cogroo/comunidade/
[5] Apache OpenNLP: http://incubator.apache.org/opennlp/
[6] LTasks.com: http://ltasks.com
37. Muito obrigado!
Wesley Seidel William Colen
@wseidel @wcolen
LTasks.com
O seu aplicativo entendendo o seu texto.
http://devinsampa.com.br