SlideShare une entreprise Scribd logo
1  sur  38
Processamento Automático da
     Língua Portuguesa

          Wesley Seidel                    William Colen
          @wseidel                         @wcolen




                                             LTasks.com
                                  O seu aplicativo entendendo o seu texto.
http://www.campus-party.com.br/
Agenda
●   Quem somos?
●   O que é uma Linguagem Natural?
●   E Processamento de Linguagem Natural (PLN)?
●   Alguns exemplos
●   Língua versus Dados
●   Por que é difícil? → Ambiguidade
●   Tarefas PLN
●   Bibliotecas: CoGrOO, OpenNLP e LTask
Quem somos?
●   Wesley Seidel           ●   William Colen
       –   Matemático              –   Engenheiro Computação
       –   Mestre em CC            –   (Quase) mestre em CC
       –   Pesquisador             –   Pesquisador
       –   Programador             –   Programador
       –   Software livre          –   Software livre
       –   Empreendedor            –   Empreendedor
O que é
Linguagem Natural?
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

●   Texto de livro          ●   Tabela do BD
●   Post em um blog         ●   Arquivo XML
●   Tweet                   ●   Código fonte
Processamento de Linguagens Naturais (PLN)


    Tarefas computacionais que envolvam a
              linguagem humana



            Extração de informação
        Comunicação homem-máquina
     Melhorar comunicação homem-homem
                      ...
Exemplo: Agente de Conversação
             Computador de
             “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?
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?
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 foi a primeira Campus Party?
                   ●   Quantas palestras sobre desenvolvimento
                       web foram oferecidas naquele edição?
  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?
Alguns sistemas que usam PLN
Aplicações: busca semântica




       http://www.wolframalpha.com/
Aplicações: busca semântica




   http://www.google.com/squared/search?q=tea
Aplicações: tradução automática




http://translate.google.com/translate_s?hl=en&clss=&q=ciência+da+computação&tq=&sl=pt&tl=zh-CN
Aplicações: classificação




 http://paraondefoimeuvoto.com.br/vereador/celso-jatene
Aplicações: corretor gramatical




http://translate.google.com/translate_s?hl=en&clss=&q=ciência+da+computação&tq=&sl=pt&tl=zh-CN
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
Língua                   Dados

Rafael Winter sugere que   print tweet.length
seus seguidores vejam a       128
agenda do Palco
Pitágoras da CP.           print tweet.author
                              rafael_winter
Ele ainda lembra que
nesse palco haverão        print tweet.date
diversas palestras sobre      20130124
tecnologia.
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.
Tarefas Processamento de Linguagem
●   Segmentador de Sentenças
●   Tokenizador
●   Reconhecedor de Entidades Nomedas
●   Etiquetador Morfológico
●   Chunker
●   Parser
    …
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.]
Tokenizador
●   Entrada
        [O sr. Mendonça chegou.]
        [Entrego-lhe os documentos.]
●   Saída
        { [O] [sr.] [Mendonça] [chegou] [.] }
        { [Entrego] [-lhe] [os] [documentos] [.] }
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
Etiquetador Morfológico
●   Entrada
        Quem casa quer casa .
●   Saída
                 Token        Etiqueta
            Quem          pronome
            casa          verbo
            quer          verbo
            casa          substantivo
            .             pontuação
Chunker (Sintagmas)
●   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
CoGrOO
●   Extensão Corretor Gramatical para o
    LibreOffice / Apache OpenOffice
●   Aplica processamento de linguagem natural
●   Sua API pode ser usada por outros projetos
●   Apache 2.0
CoGrOO
     Sugeito               As menina




Corretor ortográfico   Corretor gramatical


      Sugeito              As menina
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
API do CogrOO 4.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
API do CogrOO 4.x
 Analisadores (1/2)

// Primeiro criamos o pipe usando as configurações de idioma:

 ComponentFactory factory = ComponentFactory.create(new Locale("pt",
"BR"));
 AnalyzerI cogroo = factory.createPipe();


// Crie um objeto do tipo Document e inclua o texto que será processado:

Document document = new DocumentImpl();
document.setText("Um longo texto, com diversos parágrafos e sentenças.");

// Execute os anotadores

cogroo.analyze(document);
API do CogrOO 4.x
      Analisadores (2/2)
// Usando os getters do documento é possível obter as anotações:

for (Sentence sentence : document.getSentences()) { // lista de sentenças
  sentence.getStart(); sentence.getEnd(); // caracteres onde a sentença começa e termina
  sentence.getText(); // texto da sentença

  // Tokens
  for (Token token : sentence.getTokens()) { // lista de tokens
    token.getStart(); token.getEnd(); // caracteres onde o token começa e termina
    token.getLexeme(); // o texto do token
    token.getLemmas(); // um array com os possíveis lemas para o par lexeme+postag
    token.getPOSTag(); // classe morfológica de acordo com o contexto
    token.getFeatures(); // gênero, número, tempo etc
  }

  // Chunks
  for (Chunk chunk : sentence.getChunks()) { // lista de chunks
    chunk.getStart(); chunk.getEnd(); // índice do token onde o chunk começa e do token onde ele
termina
    chunk.getTag(); // the chunk tag
    chunk.getTokens(); // a list with the covered tokens
  }

  // Structure
  for (SyntacticChunk structure : sentence.getSyntacticChunks()) { // lista de SyntacticChunks
    structure.getStart(); structure.getEnd(); // índice do token onde o structure começa e do token
onde ele termina
    structure.getTag(); // the structure tag
    structure.getTokens(); // a list with the covered tokens
  }
API do CogrOO 4.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_]
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/
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 a model
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);
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!
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
Muito obrigado!


          Wesley Seidel                    William Colen
          @wseidel                         @wcolen




                                             LTasks.com
                                  O seu aplicativo entendendo o seu texto.
http://www.campus-party.com.br/

Contenu connexe

Similaire à Processamento Automático da Língua Portuguesa - Campus Party Br 6

PARADIGMAS_LINGUAGENS_PROG_aula02.pdf
PARADIGMAS_LINGUAGENS_PROG_aula02.pdfPARADIGMAS_LINGUAGENS_PROG_aula02.pdf
PARADIGMAS_LINGUAGENS_PROG_aula02.pdfAthena542429
 
Python Mini Ccurso Consegi2011
Python Mini Ccurso Consegi2011Python Mini Ccurso Consegi2011
Python Mini Ccurso Consegi2011Luiz Aldabalde
 
Palestra Apresentando Python e Suas Aplicações
Palestra Apresentando Python e Suas AplicaçõesPalestra Apresentando Python e Suas Aplicações
Palestra Apresentando Python e Suas AplicaçõesMarcos Thomaz
 
silo.tips_paradigmas-e-linguagens-de-programaao-prof-josino-rodrigues-neto.pdf
silo.tips_paradigmas-e-linguagens-de-programaao-prof-josino-rodrigues-neto.pdfsilo.tips_paradigmas-e-linguagens-de-programaao-prof-josino-rodrigues-neto.pdf
silo.tips_paradigmas-e-linguagens-de-programaao-prof-josino-rodrigues-neto.pdfAmlieOGalaxias
 
Programando em Elixir
Programando em ElixirProgramando em Elixir
Programando em ElixirAdolfo Neto
 
The zen of python 2010
The zen of python 2010The zen of python 2010
The zen of python 2010Luiz Aldabalde
 
BDD: Torne viva a documentação de seus sistemas
BDD: Torne viva a documentação de seus sistemasBDD: Torne viva a documentação de seus sistemas
BDD: Torne viva a documentação de seus sistemasVitor Mattos
 
Explorando O Potencial Das Linguagens De Programação Open Source
Explorando O Potencial Das Linguagens De Programação Open SourceExplorando O Potencial Das Linguagens De Programação Open Source
Explorando O Potencial Das Linguagens De Programação Open SourceRafael Jaques
 
python_para_desenvolvedores.pdf
python_para_desenvolvedores.pdfpython_para_desenvolvedores.pdf
python_para_desenvolvedores.pdfProfIvanSaboia
 
Linguagens de programação 03-12-09
Linguagens de programação   03-12-09Linguagens de programação   03-12-09
Linguagens de programação 03-12-09essa
 
Linguagens de programação 03-12-09
Linguagens de programação   03-12-09Linguagens de programação   03-12-09
Linguagens de programação 03-12-09essa
 
Extreme Experience 2018 | Python para quem sabe Delphi
Extreme Experience 2018 | Python para quem sabe DelphiExtreme Experience 2018 | Python para quem sabe Delphi
Extreme Experience 2018 | Python para quem sabe DelphiMario Guedes
 
Cogroo Google Oss Jam Sao Paulo V01
Cogroo Google Oss Jam Sao Paulo V01Cogroo Google Oss Jam Sao Paulo V01
Cogroo Google Oss Jam Sao Paulo V01William Colen
 
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreamsJacqueline Abreu
 
Curso introdução à educação digital – linux
Curso introdução à educação digital – linuxCurso introdução à educação digital – linux
Curso introdução à educação digital – linuxMarta Rocha
 
Linguística computacional - Tech Week
Linguística computacional - Tech WeekLinguística computacional - Tech Week
Linguística computacional - Tech WeekBruno Guide
 
Linguagem de Programação
Linguagem de ProgramaçãoLinguagem de Programação
Linguagem de Programaçãomoiplabs
 
Linguagen..
Linguagen..Linguagen..
Linguagen..essa
 

Similaire à Processamento Automático da Língua Portuguesa - Campus Party Br 6 (20)

PARADIGMAS_LINGUAGENS_PROG_aula02.pdf
PARADIGMAS_LINGUAGENS_PROG_aula02.pdfPARADIGMAS_LINGUAGENS_PROG_aula02.pdf
PARADIGMAS_LINGUAGENS_PROG_aula02.pdf
 
Python Mini Ccurso Consegi2011
Python Mini Ccurso Consegi2011Python Mini Ccurso Consegi2011
Python Mini Ccurso Consegi2011
 
Palestra Apresentando Python e Suas Aplicações
Palestra Apresentando Python e Suas AplicaçõesPalestra Apresentando Python e Suas Aplicações
Palestra Apresentando Python e Suas Aplicações
 
silo.tips_paradigmas-e-linguagens-de-programaao-prof-josino-rodrigues-neto.pdf
silo.tips_paradigmas-e-linguagens-de-programaao-prof-josino-rodrigues-neto.pdfsilo.tips_paradigmas-e-linguagens-de-programaao-prof-josino-rodrigues-neto.pdf
silo.tips_paradigmas-e-linguagens-de-programaao-prof-josino-rodrigues-neto.pdf
 
Programando em Elixir
Programando em ElixirProgramando em Elixir
Programando em Elixir
 
The zen of python 2010
The zen of python 2010The zen of python 2010
The zen of python 2010
 
BDD: Torne viva a documentação de seus sistemas
BDD: Torne viva a documentação de seus sistemasBDD: Torne viva a documentação de seus sistemas
BDD: Torne viva a documentação de seus sistemas
 
Explorando O Potencial Das Linguagens De Programação Open Source
Explorando O Potencial Das Linguagens De Programação Open SourceExplorando O Potencial Das Linguagens De Programação Open Source
Explorando O Potencial Das Linguagens De Programação Open Source
 
python_para_desenvolvedores.pdf
python_para_desenvolvedores.pdfpython_para_desenvolvedores.pdf
python_para_desenvolvedores.pdf
 
Linguagens de programação 03-12-09
Linguagens de programação   03-12-09Linguagens de programação   03-12-09
Linguagens de programação 03-12-09
 
Linguagens de programação 03-12-09
Linguagens de programação   03-12-09Linguagens de programação   03-12-09
Linguagens de programação 03-12-09
 
Extreme Experience 2018 | Python para quem sabe Delphi
Extreme Experience 2018 | Python para quem sabe DelphiExtreme Experience 2018 | Python para quem sabe Delphi
Extreme Experience 2018 | Python para quem sabe Delphi
 
Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem C
 
SFD - C# para a comunidade
SFD - C# para a comunidadeSFD - C# para a comunidade
SFD - C# para a comunidade
 
Cogroo Google Oss Jam Sao Paulo V01
Cogroo Google Oss Jam Sao Paulo V01Cogroo Google Oss Jam Sao Paulo V01
Cogroo Google Oss Jam Sao Paulo V01
 
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
 
Curso introdução à educação digital – linux
Curso introdução à educação digital – linuxCurso introdução à educação digital – linux
Curso introdução à educação digital – linux
 
Linguística computacional - Tech Week
Linguística computacional - Tech WeekLinguística computacional - Tech Week
Linguística computacional - Tech Week
 
Linguagem de Programação
Linguagem de ProgramaçãoLinguagem de Programação
Linguagem de Programação
 
Linguagen..
Linguagen..Linguagen..
Linguagen..
 

Plus de William Colen

Falando com a máquina: Desenvolvimento de assistentes pessoais virtuais
Falando com a máquina: Desenvolvimento de assistentes pessoais virtuaisFalando com a máquina: Desenvolvimento de assistentes pessoais virtuais
Falando com a máquina: Desenvolvimento de assistentes pessoais virtuaisWilliam Colen
 
CoGrOO 4.0 no FISL 13
CoGrOO 4.0 no FISL 13CoGrOO 4.0 no FISL 13
CoGrOO 4.0 no FISL 13William Colen
 
Cogroo Comunidade no FISL XI
Cogroo Comunidade no FISL XICogroo Comunidade no FISL XI
Cogroo Comunidade no FISL XIWilliam Colen
 
Programabilida de BrOffice.org - Fisl 11
Programabilida de BrOffice.org - Fisl 11Programabilida de BrOffice.org - Fisl 11
Programabilida de BrOffice.org - Fisl 11William Colen
 
Criando extensões para o BrOffice (Serpro 2010)
Criando extensões para o BrOffice (Serpro 2010)Criando extensões para o BrOffice (Serpro 2010)
Criando extensões para o BrOffice (Serpro 2010)William Colen
 
Tutorial: Criando extensões para o OpenOffice
Tutorial: Criando extensões para o OpenOfficeTutorial: Criando extensões para o OpenOffice
Tutorial: Criando extensões para o OpenOfficeWilliam Colen
 

Plus de William Colen (6)

Falando com a máquina: Desenvolvimento de assistentes pessoais virtuais
Falando com a máquina: Desenvolvimento de assistentes pessoais virtuaisFalando com a máquina: Desenvolvimento de assistentes pessoais virtuais
Falando com a máquina: Desenvolvimento de assistentes pessoais virtuais
 
CoGrOO 4.0 no FISL 13
CoGrOO 4.0 no FISL 13CoGrOO 4.0 no FISL 13
CoGrOO 4.0 no FISL 13
 
Cogroo Comunidade no FISL XI
Cogroo Comunidade no FISL XICogroo Comunidade no FISL XI
Cogroo Comunidade no FISL XI
 
Programabilida de BrOffice.org - Fisl 11
Programabilida de BrOffice.org - Fisl 11Programabilida de BrOffice.org - Fisl 11
Programabilida de BrOffice.org - Fisl 11
 
Criando extensões para o BrOffice (Serpro 2010)
Criando extensões para o BrOffice (Serpro 2010)Criando extensões para o BrOffice (Serpro 2010)
Criando extensões para o BrOffice (Serpro 2010)
 
Tutorial: Criando extensões para o OpenOffice
Tutorial: Criando extensões para o OpenOfficeTutorial: Criando extensões para o OpenOffice
Tutorial: Criando extensões para o OpenOffice
 

Processamento Automático da Língua Portuguesa - Campus Party Br 6

  • 1. Processamento Automático da Língua Portuguesa Wesley Seidel William Colen @wseidel @wcolen LTasks.com O seu aplicativo entendendo o seu texto. http://www.campus-party.com.br/
  • 2. Agenda ● Quem somos? ● O que é uma Linguagem Natural? ● E Processamento de Linguagem Natural (PLN)? ● Alguns exemplos ● Língua versus Dados ● Por que é difícil? → Ambiguidade ● Tarefas PLN ● Bibliotecas: CoGrOO, OpenNLP e LTask
  • 3. Quem somos? ● Wesley Seidel ● William Colen – Matemático – Engenheiro Computação – Mestre em CC – (Quase) mestre em CC – Pesquisador – Pesquisador – Programador – Programador – Software livre – Software livre – Empreendedor – Empreendedor
  • 5. 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 ● Texto de livro ● Tabela do BD ● Post em um blog ● Arquivo XML ● Tweet ● Código fonte
  • 6. Processamento de Linguagens Naturais (PLN) Tarefas computacionais que envolvam a linguagem humana Extração de informação Comunicação homem-máquina Melhorar comunicação homem-homem ...
  • 7. Exemplo: Agente de Conversação Computador de “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?
  • 8. 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?
  • 9. 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 foi a primeira Campus Party? ● Quantas palestras sobre desenvolvimento web foram oferecidas naquele edição? 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?
  • 11. Aplicações: busca semântica http://www.wolframalpha.com/
  • 12. Aplicações: busca semântica http://www.google.com/squared/search?q=tea
  • 16. 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 Rafael Winter sugere que print tweet.length seus seguidores vejam a 128 agenda do Palco Pitágoras da CP. print tweet.author rafael_winter Ele ainda lembra que nesse palco haverão print tweet.date diversas palestras sobre 20130124 tecnologia.
  • 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.]
  • 21. Tokenizador ● 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 (Sintagmas) ● 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 para o LibreOffice / Apache OpenOffice ● Aplica processamento de linguagem natural ● Sua API pode ser usada por outros projetos ● Apache 2.0
  • 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 4.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 4.x Analisadores (1/2) // Primeiro criamos o pipe usando as configurações de idioma: ComponentFactory factory = ComponentFactory.create(new Locale("pt", "BR")); AnalyzerI cogroo = factory.createPipe(); // Crie um objeto do tipo Document e inclua o texto que será processado: Document document = new DocumentImpl(); document.setText("Um longo texto, com diversos parágrafos e sentenças."); // Execute os anotadores cogroo.analyze(document);
  • 30. API do CogrOO 4.x Analisadores (2/2) // Usando os getters do documento é possível obter as anotações: for (Sentence sentence : document.getSentences()) { // lista de sentenças sentence.getStart(); sentence.getEnd(); // caracteres onde a sentença começa e termina sentence.getText(); // texto da sentença // Tokens for (Token token : sentence.getTokens()) { // lista de tokens token.getStart(); token.getEnd(); // caracteres onde o token começa e termina token.getLexeme(); // o texto do token token.getLemmas(); // um array com os possíveis lemas para o par lexeme+postag token.getPOSTag(); // classe morfológica de acordo com o contexto token.getFeatures(); // gênero, número, tempo etc } // Chunks for (Chunk chunk : sentence.getChunks()) { // lista de chunks chunk.getStart(); chunk.getEnd(); // índice do token onde o chunk começa e do token onde ele termina chunk.getTag(); // the chunk tag chunk.getTokens(); // a list with the covered tokens } // Structure for (SyntacticChunk structure : sentence.getSyntacticChunks()) { // lista de SyntacticChunks structure.getStart(); structure.getEnd(); // índice do token onde o structure começa e do token onde ele termina structure.getTag(); // the structure tag structure.getTokens(); // a list with the covered tokens }
  • 31. API do CogrOO 4.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 a model 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) ● Experimente hoje mesmo!
  • 35.
  • 36.
  • 37. 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
  • 38. Muito obrigado! Wesley Seidel William Colen @wseidel @wcolen LTasks.com O seu aplicativo entendendo o seu texto. http://www.campus-party.com.br/

Notes de l'éditeur

  1. Contraste entre língua natural e língua formal de acordo com a Filosofia da Linguagem: In the philosophy of language, a natural language (or ordinary language) is any language which arises in an unpremeditated fashion as the result of the innate facility for language possessed by the human intellect. A natural language is typically used for communication, and may be spoken, signed, or written. Natural language is distinguished from constructed languages and formal languages such as computer-programming languages or the "languages" used in the study of formal logic, especially mathematical logic.
  2. Contraste entre língua natural e língua formal de acordo com a Filosofia da Linguagem: In the philosophy of language, a natural language (or ordinary language) is any language which arises in an unpremeditated fashion as the result of the innate facility for language possessed by the human intellect. A natural language is typically used for communication, and may be spoken, signed, or written. Natural language is distinguished from constructed languages and formal languages such as computer-programming languages or the "languages" used in the study of formal logic, especially mathematical logic.
  3. MOTIVAÇÃO É um campo multidisciplinar com muitos nomes: processamento de fala e língua, engenharia da linguagem humana, PLN, linguística computacional A META desse campo é que ....... Tarefas como .......
  4. Agente de conversação - Programas como o hal q conversam com humanos em linguagem natural são chamados de agente de conversação
  5. Generalização dos buscadores – ao invés de buscar por palavras chaves, que tal fazer uma pergunta completa e bem definida?
  6. Exemplo do que se consegue extrair de um tweet Língua formal: Permite extrair detalhes como o humor do locutor,