SlideShare uma empresa Scribd logo
1 de 34
Baixar para ler offline
Processamento de Linguagem Natural
             em Perl

            Alberto Sim˜es
                       o
            ambs@perl.pt



       Portuguese Perl Workshop
           28 Setembro 2012




                                     1 / 16
Disclaimer / Aviso




      Ferramentas para a L´
                          ıngua Portuguesa do Projeto Natura




                                                               2 / 16
Identifica¸˜o de L´
         ca      ıngua
Lingua::Identify



       Implementa¸˜o em Perl de v´rios algoritmos de identifica¸˜o
                  ca             a                            ca
       de l´
           ıngua;
       L´
        ınguas detetadas: pt en de bg da es it fr fi hr nl ro ru pl el la
       sq sv tr sl hu id uk;




                                                                           3 / 16
Identifica¸˜o de L´
         ca      ıngua
Lingua::Identify



           Implementa¸˜o em Perl de v´rios algoritmos de identifica¸˜o
                      ca             a                            ca
           de l´
               ıngua;
           L´
            ınguas detetadas: pt en de bg da es it fr fi hr nl ro ru pl el la
           sq sv tr sl hu id uk;

    §                                                                                    ¤
1   u s e Lingua : : Identify qw ( : l a n g u a g e _ i d e n t i f i c a t i o n ) ;
2   my $lang = langof ( $textstring ) ;
    ¦                                                                                    ¥




                                                                                         3 / 16
Identifica¸˜o de L´
         ca      ıngua
Lingua::Identify



           Implementa¸˜o em Perl de v´rios algoritmos de identifica¸˜o
                      ca             a                            ca
           de l´
               ıngua;
           L´
            ınguas detetadas: pt en de bg da es it fr fi hr nl ro ru pl el la
           sq sv tr sl hu id uk;

    §                                                                                    ¤
1   u s e Lingua : : Identify qw ( : l a n g u a g e _ i d e n t i f i c a t i o n ) ;
2   my $lang = langof ( $textstring ) ;
    ¦                                                                                    ¥

    §                                                                                    ¤
1   u s e Lingua : : Identify qw ( : l a n g u a g e _ i d e n t i f i c a t i o n ) ;
2   my ( $lang , $prob ) = langof_file ( {
3                     ’ a c t i v e −l a n g u a g e s ’ => [ ’ e s ’ , ’ p t ’ ] ,
4              } , $filename ) ;
    ¦                                                                                    ¥


                                                                                         3 / 16
Identifica¸˜o de L´
         ca      ıngua
Lingua::Identify::CLD




       Implementa¸˜o em C++ do Chromium Compact Language
                 ca
       Detector;
       C´digo C++ distribu´ diretamente no m´dulo Perl;
        o                 ıdo               o
       Suporte para dezenas de l´
                                ınguas (incluindo pig-latin);




                                                                4 / 16
Identifica¸˜o de L´
         ca      ıngua
Lingua::Identify::CLD




          Implementa¸˜o em C++ do Chromium Compact Language
                    ca
          Detector;
          C´digo C++ distribu´ diretamente no m´dulo Perl;
           o                 ıdo               o
          Suporte para dezenas de l´
                                   ınguas (incluindo pig-latin);


    §                                                                       ¤
1       u s e Lingua : : Identify : : CLD ;
2
3       my $cld = Lingua : : Identify : : CLD−>new ( isPlainText => 0 ) ;
4       my $lang = $cld−>identify ( ”Text ” ) ;
    ¦                                                                       ¥




                                                                            4 / 16
Segmenta¸˜o e Atomiza¸˜o
        ca           ca
Lingua::PT::PLNbase




       Implementa¸˜o em Perl;
                 ca
       Segmenta¸˜o e Atomiza¸˜o para a l´
               ca           ca          ıngua Portuguesa;
       Alguns hacks para dar resultados menos maus noutras l´
                                                            ınguas;




                                                                      5 / 16
Segmenta¸˜o e Atomiza¸˜o
        ca           ca
Lingua::PT::PLNbase




             Implementa¸˜o em Perl;
                       ca
             Segmenta¸˜o e Atomiza¸˜o para a l´
                     ca           ca          ıngua Portuguesa;
             Alguns hacks para dar resultados menos maus noutras l´
                                                                  ınguas;


    §                                                                       ¤
1       u s e Lingua : : PT : : PLNbase ;
2
3       # o b t e r l i s t a de p a l a v r a s / t o k e n s
4       my @atomos = atomiza ( $texto ) ;
5
6       # obter frases
7       my @frases = frases ( $texto ) ;
    ¦                                                                       ¥



                                                                            5 / 16
Segmenta¸˜o e Atomiza¸˜o
        ca           ca
Lingua::FreeLing3



       Interface ` biblioteca C++ freeling;
                 a
       Suporte para RU, PT, ES, GA, CA, EN, IT;
       Com outras funcionalidades avan¸adas (a ver. . . )
                                      c




                                                            6 / 16
Segmenta¸˜o e Atomiza¸˜o
        ca           ca
Lingua::FreeLing3



            Interface ` biblioteca C++ freeling;
                      a
            Suporte para RU, PT, ES, GA, CA, EN, IT;
            Com outras funcionalidades avan¸adas (a ver. . . )
                                           c

    §                                                            ¤
1       u s e FL3 ’ en ’ ;
2
3       $tokens = tokenizer−>tokenize ( $text ) ;
4       $sentences = splitter−> s p l i t ( $tokens ) ;
    ¦                                                            ¥




                                                                 6 / 16
Segmenta¸˜o e Atomiza¸˜o
        ca           ca
Lingua::FreeLing3



            Interface ` biblioteca C++ freeling;
                      a
            Suporte para RU, PT, ES, GA, CA, EN, IT;
            Com outras funcionalidades avan¸adas (a ver. . . )
                                           c

    §                                                             ¤
1       u s e FL3 ’ en ’ ;
2
3       $tokens = tokenizer−>tokenize ( $text ) ;
4       $sentences = splitter−> s p l i t ( $tokens ) ;
    ¦                                                             ¥

    §                                                             ¤
1       u s e FL3 ;
2       $atomos = tokenizer ( ’ p t ’)−>tokenize ( $texto ) ;
3       $frases = splitter ( ’ p t ’)−> s p l i t ( $atomos ) ;
    ¦                                                             ¥


                                                                  6 / 16
An´lise Morfol´gica
  a           o
Lingua::Jspell


       Interface ` biblioteca/aplica¸˜o C jspell;
                 a                  ca
       Biblioteca e aplica¸˜o inclu´ no m´dulo Perl;
                          ca       ıda   o
       Funciona com dicion´rios semelhantes aos do ispell;
                          a
       Sem desambigua¸˜o;
                     ca
       Dicion´rios para PT, ES, LA, EN, FR.
             a




                                                             7 / 16
An´lise Morfol´gica
  a           o
Lingua::Jspell


             Interface ` biblioteca/aplica¸˜o C jspell;
                       a                  ca
             Biblioteca e aplica¸˜o inclu´ no m´dulo Perl;
                                ca       ıda   o
             Funciona com dicion´rios semelhantes aos do ispell;
                                a
             Sem desambigua¸˜o;
                           ca
             Dicion´rios para PT, ES, LA, EN, FR.
                   a
     §                                                                                                               ¤
1    u s e Lingua : : Jspell ;
2    my $dict = Lingua : : Jspell−>new ( ”pt PT ” ) ;
3
4    my @radicals = $dict−>rad ( ”pode ” ) ; # p o d e r , p o d a r
5
6    my @analysis = $dict−>fea ( ” g a t i n h a ” ) ;
7    # { r a d =>’ g a t i n h a r ’ , . . } , { r a d =>’ g a t i n h a r ’ , . . } , { r a d =>’ g a t o ’ , . .
8
9    my @derivated = $dict−>der ( ”g a t o ” ) ;
10   # g a t a , g a t i n h o , g a t i n h a , g a t i n h o s , g a t a s , gato , g a t i n h a s , g .
     ¦                                                                                                               ¥

                                                                                                                     7 / 16
An´lise Morfol´gica
  a           o
Lingua::FreeLing3



       Interface ` biblioteca C++ freeling;
                 a
       Suporte para RU, PT, ES, GA, CA, EN, IT;
       Com dete¸˜o de locu¸˜es, nomes pr´prios, entidades, etc.;
               ca         co            o
       E ainda outras funcionalidades (a ver. . . )




                                                                   8 / 16
An´lise Morfol´gica
  a           o
Lingua::FreeLing3



          Interface ` biblioteca C++ freeling;
                    a
          Suporte para RU, PT, ES, GA, CA, EN, IT;
          Com dete¸˜o de locu¸˜es, nomes pr´prios, entidades, etc.;
                  ca         co            o
          E ainda outras funcionalidades (a ver. . . )

    §                                                                                         ¤
1   u s e FL3 ’ en ’ ;
2
3   my $tokens = tokenizer−>tokenize ( $text ) ;
4   my $sentences = splitter−> s p l i t ( $tokens ) ;
5   $sentences = morph−>analyze ( $sentences ) ;
6
7   # s e n t e n c e s ´ uma r e f e r ˆ n c i a p a r a uma l i s t a de o b j e t o s do
                        e                     e
8   # t i p o ‘ ‘ L i n g u a : : F r e e L i n g 3 : : Word ’ ’
9   my @analysis $sentences −>[0]−>analysis ;
    ¦                                                                                         ¥


                                                                                              8 / 16
Etiqueta¸˜o de Part-of-Speech
        ca
Lingua::FreeLing3


       Desambigua¸˜o;
                 ca
       Duas abordagens diferentes (hmm ou relax);




                                                    9 / 16
Etiqueta¸˜o de Part-of-Speech
        ca
Lingua::FreeLing3


         Desambigua¸˜o;
                   ca
         Duas abordagens diferentes (hmm ou relax);
    §                                                    ¤
1   u s e FL3 ’ en ’ ;
2
3   my $tokens = tokenizer−>tokenize ( $text ) ;
4   my $sentences = splitter−> s p l i t ( $tokens ) ;
5   $sentences = morph−>analyze ( $sentences ) ;
6   $sentences = hmm−>tag ( $sentences ) ;
    ¦                                                    ¥




                                                         9 / 16
Etiqueta¸˜o de Part-of-Speech
        ca
Lingua::FreeLing3


         Desambigua¸˜o;
                   ca
         Duas abordagens diferentes (hmm ou relax);
    §                                                    ¤
1   u s e FL3 ’ en ’ ;
2
3   my $tokens = tokenizer−>tokenize ( $text ) ;
4   my $sentences = splitter−> s p l i t ( $tokens ) ;
5   $sentences = morph−>analyze ( $sentences ) ;
6   $sentences = hmm−>tag ( $sentences ) ;
    ¦                                                    ¥
    §                                                    ¤
1   u s e FL3 ’ en ’ ;
2
3   my $tokens = tokenizer−>tokenize ( $text ) ;
4   my $sentences = splitter−> s p l i t ( $tokens ) ;
5   $sentences = morph−>analyze ( $sentences ) ;
6   $sentences = relax−>tag ( $sentences ) ;
    ¦                                                    ¥

                                                         9 / 16
Parsing de Dependˆncias
                 e
Lingua::FreeLing3




       Dispon´ para algumas das l´
             ıvel                ınguas do FreeLing3;




                                                        10 / 16
Parsing de Dependˆncias
                 e
Lingua::FreeLing3




          Dispon´ para algumas das l´
                ıvel                ınguas do FreeLing3;



    §                                                      ¤
1   u s e FL3 ’ e s ’ ;
2
3   my $tokens = tokenizer−>tokenize ( $text ) ;
4   my $sentences = splitter−> s p l i t ( $tokens ) ;
5   $sentences = morph−>analyze ( $sentences ) ;
6   $sentences = hmm−>analyze ( $sentences ) ;
7   $sentences = chart−>parse ( $sentences ) ;
    ¦                                                      ¥




                                                           10 / 16
NLGrep
com Lingua::FreeLing3



       Procurar padr˜es (sequˆncias);
                    o        e
       com palavras, lemas, ou propriedades morfol´gicas;
                                                  o




                                                            11 / 16
NLGrep
com Lingua::FreeLing3



       Procurar padr˜es (sequˆncias);
                    o        e
       com palavras, lemas, ou propriedades morfol´gicas;
                                                  o
   $ fl3-nlgrep -l pt pg33056.txt ~ser A C A
   era grosso e baixo
   era excellente e detestavel
   e
   ´ pura e severa
   Sou exclusivo e pessoal
   era orgulhoso e fraco
   e
   ´ independente e superior
   era grande e vistosa
   era justo nem bonito
   e
   ´ trivial e chocho
   era restricta e mansa
   (...)


                                                            11 / 16
NLGrep
com Lingua::FreeLing3

     §                                                       ¤
1    open my $fh , ”<: u t f 8 ” , $filename ;
2
3    w h i l e (my $l = <$fh >) {
4      my ( $tokens , $frases ) ;
5       $tokens = tokenizer−>tokenize ( $l ) ;
6       $frases = splitter−> s p l i t ( $tokens ) ;
7       $frases = morph−>analyze ( $frases ) ;
8       $frases = hmm−>tag ( $frases ) ;
9
10       # para cada f r a s e
11       f o r my $frase ( @$frases ) {
12          my @words = $frase−>words ;
13
14       # janela deslizante
15       w h i l e ( @words > @query ) {
16          i f ( match (  @words ,  @query ) ) {
17               show_match ( @words [ 0 . . $ # query ] )
18          }
19          s h i f t @words ;
20   } } }
     ¦                                                       ¥

                                                             12 / 16
NLGrep
com Lingua::FreeLing3
     §                                                                ¤
1    # v e r i f i c a p a l a v r a s c o n t r a e x p r e s s ˜o
                                                                 a
2    # de p e s q u i s a
3    s u b match {
4        f o r my $i ( 0 . . $#query ) {
5           # ignorar palavra se wildcard
6            n e x t i f $query −>[$i ] eq ” ” ;
7
8          # se procuramos p a l a v r a exacta
9          i f ( $query −>[$i ] =˜ / ˆ = ( . ∗ ) $ / ) {
10             r e t u r n 0 i f $1 ne $words −>[$i]−>lc_form ;
11         }
12         # s e p r o c u r a m o s p o r lema
13         e l s i f ( $query −>[$i ] =˜ / ˆ ˜ ( . ∗ ) $ / ) {
14             r e t u r n 0 i f $1 ne $words −>[$i]−>lemma ;
15         }
16         # c a s o c o n t r ´ r i o , e t i q u e t a POS
                               a
17         else {
18            my $tag = $words −>[$i]−>tag ;
19             r e t u r n 0 i f $tag ! ˜ /ˆ $query −>[$i ] / i ;
20       } }
21       return 1;
22   }
     ¦                                                                ¥
                                                                      13 / 16
NLGrep
com Lingua::FreeLing3




    §                                                            ¤
1   # imprime as p a l a v r a s .
2   s u b show_match {
3       p r i n t j o i n ( ” ” , map{ $_−>form } @_ ) , ”n ”
4   }
    ¦                                                            ¥




                                                                 14 / 16
Outras Ferramentas


     Lingua::FreeLing3::Utils - conjunto de
     fun¸˜es/comandos para c´lculo de n-grams, an´lise
        co                    a                  a
     morfol´gica e nlgrep, implementados em Fl3;
           o




                                                         15 / 16
Outras Ferramentas


     Lingua::FreeLing3::Utils - conjunto de
     fun¸˜es/comandos para c´lculo de n-grams, an´lise
        co                    a                  a
     morfol´gica e nlgrep, implementados em Fl3;
           o
     XML::TMX - para lidar com mem´rias de tradu¸˜o;
                                  o             ca




                                                         15 / 16
Outras Ferramentas


     Lingua::FreeLing3::Utils - conjunto de
     fun¸˜es/comandos para c´lculo de n-grams, an´lise
        co                    a                  a
     morfol´gica e nlgrep, implementados em Fl3;
           o
     XML::TMX - para lidar com mem´rias de tradu¸˜o;
                                  o             ca
     Lingua::NATools - para alinhamentos de textos paralelos e
     extra¸˜o de terminologia/dicion´rios bilingues;
          ca                        a




                                                                 15 / 16
Outras Ferramentas


     Lingua::FreeLing3::Utils - conjunto de
     fun¸˜es/comandos para c´lculo de n-grams, an´lise
        co                    a                  a
     morfol´gica e nlgrep, implementados em Fl3;
           o
     XML::TMX - para lidar com mem´rias de tradu¸˜o;
                                  o             ca
     Lingua::NATools - para alinhamentos de textos paralelos e
     extra¸˜o de terminologia/dicion´rios bilingues;
          ca                        a
     Biblio::Thesaurus - para lidar com ontologias/thesauri;




                                                                 15 / 16
Outras Ferramentas


     Lingua::FreeLing3::Utils - conjunto de
     fun¸˜es/comandos para c´lculo de n-grams, an´lise
        co                    a                  a
     morfol´gica e nlgrep, implementados em Fl3;
           o
     XML::TMX - para lidar com mem´rias de tradu¸˜o;
                                  o             ca
     Lingua::NATools - para alinhamentos de textos paralelos e
     extra¸˜o de terminologia/dicion´rios bilingues;
          ca                        a
     Biblio::Thesaurus - para lidar com ontologias/thesauri;
     Lingua::PT::ProperNames - para dete¸˜o e extra¸˜o de
                                        ca         ca
     nomes pr´prios;
             o




                                                                 15 / 16
Outras Ferramentas


     Lingua::FreeLing3::Utils - conjunto de
     fun¸˜es/comandos para c´lculo de n-grams, an´lise
        co                    a                  a
     morfol´gica e nlgrep, implementados em Fl3;
           o
     XML::TMX - para lidar com mem´rias de tradu¸˜o;
                                  o             ca
     Lingua::NATools - para alinhamentos de textos paralelos e
     extra¸˜o de terminologia/dicion´rios bilingues;
          ca                        a
     Biblio::Thesaurus - para lidar com ontologias/thesauri;
     Lingua::PT::ProperNames - para dete¸˜o e extra¸˜o de
                                        ca         ca
     nomes pr´prios;
             o
     Text::Ngram - c´lculo de ngrams (carateres);
                    a




                                                                 15 / 16
Outras Ferramentas


     Lingua::FreeLing3::Utils - conjunto de
     fun¸˜es/comandos para c´lculo de n-grams, an´lise
        co                    a                  a
     morfol´gica e nlgrep, implementados em Fl3;
           o
     XML::TMX - para lidar com mem´rias de tradu¸˜o;
                                  o             ca
     Lingua::NATools - para alinhamentos de textos paralelos e
     extra¸˜o de terminologia/dicion´rios bilingues;
          ca                        a
     Biblio::Thesaurus - para lidar com ontologias/thesauri;
     Lingua::PT::ProperNames - para dete¸˜o e extra¸˜o de
                                        ca         ca
     nomes pr´prios;
             o
     Text::Ngram - c´lculo de ngrams (carateres);
                    a
     Text::WordGrams - c´lculo de ngrams (palavras);
                        a



                                                                 15 / 16
Obrigado!




            16 / 16

Mais conteúdo relacionado

Destaque

Building C and C++ libraries with Perl
Building C and C++ libraries with PerlBuilding C and C++ libraries with Perl
Building C and C++ libraries with PerlAlberto Simões
 
Arquitecturas de Tradução Automática
Arquitecturas de Tradução AutomáticaArquitecturas de Tradução Automática
Arquitecturas de Tradução AutomáticaAlberto Simões
 
Processing XML: a rewriting system approach
Processing XML: a rewriting system approachProcessing XML: a rewriting system approach
Processing XML: a rewriting system approachAlberto Simões
 
EMLex-A5: Specialized Dictionaries
EMLex-A5: Specialized DictionariesEMLex-A5: Specialized Dictionaries
EMLex-A5: Specialized DictionariesAlberto Simões
 

Destaque (8)

Source Code Quality
Source Code QualitySource Code Quality
Source Code Quality
 
Building C and C++ libraries with Perl
Building C and C++ libraries with PerlBuilding C and C++ libraries with Perl
Building C and C++ libraries with Perl
 
Classification Systems
Classification SystemsClassification Systems
Classification Systems
 
Arquitecturas de Tradução Automática
Arquitecturas de Tradução AutomáticaArquitecturas de Tradução Automática
Arquitecturas de Tradução Automática
 
Google Maps JS API
Google Maps JS APIGoogle Maps JS API
Google Maps JS API
 
Processing XML: a rewriting system approach
Processing XML: a rewriting system approachProcessing XML: a rewriting system approach
Processing XML: a rewriting system approach
 
EMLex-A5: Specialized Dictionaries
EMLex-A5: Specialized DictionariesEMLex-A5: Specialized Dictionaries
EMLex-A5: Specialized Dictionaries
 
XML::Writer::Simple
XML::Writer::SimpleXML::Writer::Simple
XML::Writer::Simple
 

Mais de Alberto Simões

Language Identification: A neural network approach
Language Identification: A neural network approachLanguage Identification: A neural network approach
Language Identification: A neural network approachAlberto Simões
 
Making the most of a 100-year-old dictionary
Making the most of a 100-year-old dictionaryMaking the most of a 100-year-old dictionary
Making the most of a 100-year-old dictionaryAlberto Simões
 
Dictionary Alignment by Rewrite-based Entry Translation
Dictionary Alignment by Rewrite-based Entry TranslationDictionary Alignment by Rewrite-based Entry Translation
Dictionary Alignment by Rewrite-based Entry TranslationAlberto Simões
 
Aula 04 - Introdução aos Diagramas de Sequência
Aula 04 - Introdução aos Diagramas de SequênciaAula 04 - Introdução aos Diagramas de Sequência
Aula 04 - Introdução aos Diagramas de SequênciaAlberto Simões
 
Aula 03 - Introdução aos Diagramas de Atividade
Aula 03 - Introdução aos Diagramas de AtividadeAula 03 - Introdução aos Diagramas de Atividade
Aula 03 - Introdução aos Diagramas de AtividadeAlberto Simões
 
Aula 02 - Engenharia de Requisitos
Aula 02 - Engenharia de RequisitosAula 02 - Engenharia de Requisitos
Aula 02 - Engenharia de RequisitosAlberto Simões
 
Aula 01 - Planeamento de Sistemas de Informação
Aula 01 - Planeamento de Sistemas de InformaçãoAula 01 - Planeamento de Sistemas de Informação
Aula 01 - Planeamento de Sistemas de InformaçãoAlberto Simões
 
Extracção de Recursos para Tradução Automática
Extracção de Recursos para Tradução AutomáticaExtracção de Recursos para Tradução Automática
Extracção de Recursos para Tradução AutomáticaAlberto Simões
 
Controlo de Versões com SVN
Controlo de Versões com SVNControlo de Versões com SVN
Controlo de Versões com SVNAlberto Simões
 
Corpora para Processamento de Linguagem Natural
Corpora para Processamento de Linguagem NaturalCorpora para Processamento de Linguagem Natural
Corpora para Processamento de Linguagem NaturalAlberto Simões
 
Bilingual Terminology Extraction based on Translation Patterns
Bilingual Terminology Extraction based on Translation PatternsBilingual Terminology Extraction based on Translation Patterns
Bilingual Terminology Extraction based on Translation PatternsAlberto Simões
 

Mais de Alberto Simões (20)

Language Identification: A neural network approach
Language Identification: A neural network approachLanguage Identification: A neural network approach
Language Identification: A neural network approach
 
Making the most of a 100-year-old dictionary
Making the most of a 100-year-old dictionaryMaking the most of a 100-year-old dictionary
Making the most of a 100-year-old dictionary
 
Dictionary Alignment by Rewrite-based Entry Translation
Dictionary Alignment by Rewrite-based Entry TranslationDictionary Alignment by Rewrite-based Entry Translation
Dictionary Alignment by Rewrite-based Entry Translation
 
Modelação de Dados
Modelação de DadosModelação de Dados
Modelação de Dados
 
Aula 04 - Introdução aos Diagramas de Sequência
Aula 04 - Introdução aos Diagramas de SequênciaAula 04 - Introdução aos Diagramas de Sequência
Aula 04 - Introdução aos Diagramas de Sequência
 
Aula 03 - Introdução aos Diagramas de Atividade
Aula 03 - Introdução aos Diagramas de AtividadeAula 03 - Introdução aos Diagramas de Atividade
Aula 03 - Introdução aos Diagramas de Atividade
 
Aula 02 - Engenharia de Requisitos
Aula 02 - Engenharia de RequisitosAula 02 - Engenharia de Requisitos
Aula 02 - Engenharia de Requisitos
 
Aula 01 - Planeamento de Sistemas de Informação
Aula 01 - Planeamento de Sistemas de InformaçãoAula 01 - Planeamento de Sistemas de Informação
Aula 01 - Planeamento de Sistemas de Informação
 
Redes de Pert
Redes de PertRedes de Pert
Redes de Pert
 
Dancing Tutorial
Dancing TutorialDancing Tutorial
Dancing Tutorial
 
Sistemas de Numeração
Sistemas de NumeraçãoSistemas de Numeração
Sistemas de Numeração
 
Álgebra de Boole
Álgebra de BooleÁlgebra de Boole
Álgebra de Boole
 
Extracção de Recursos para Tradução Automática
Extracção de Recursos para Tradução AutomáticaExtracção de Recursos para Tradução Automática
Extracção de Recursos para Tradução Automática
 
Dicionário Aberto
Dicionário AbertoDicionário Aberto
Dicionário Aberto
 
Keynote Globs
Keynote GlobsKeynote Globs
Keynote Globs
 
Workshop GLOBS
Workshop GLOBSWorkshop GLOBS
Workshop GLOBS
 
Controlo de Versões com SVN
Controlo de Versões com SVNControlo de Versões com SVN
Controlo de Versões com SVN
 
Corpora para Processamento de Linguagem Natural
Corpora para Processamento de Linguagem NaturalCorpora para Processamento de Linguagem Natural
Corpora para Processamento de Linguagem Natural
 
Bilingual Terminology Extraction based on Translation Patterns
Bilingual Terminology Extraction based on Translation PatternsBilingual Terminology Extraction based on Translation Patterns
Bilingual Terminology Extraction based on Translation Patterns
 
Remote secure backups
Remote secure backupsRemote secure backups
Remote secure backups
 

Processamento de Linguagem Natural em Perl

  • 1. Processamento de Linguagem Natural em Perl Alberto Sim˜es o ambs@perl.pt Portuguese Perl Workshop 28 Setembro 2012 1 / 16
  • 2. Disclaimer / Aviso Ferramentas para a L´ ıngua Portuguesa do Projeto Natura 2 / 16
  • 3. Identifica¸˜o de L´ ca ıngua Lingua::Identify Implementa¸˜o em Perl de v´rios algoritmos de identifica¸˜o ca a ca de l´ ıngua; L´ ınguas detetadas: pt en de bg da es it fr fi hr nl ro ru pl el la sq sv tr sl hu id uk; 3 / 16
  • 4. Identifica¸˜o de L´ ca ıngua Lingua::Identify Implementa¸˜o em Perl de v´rios algoritmos de identifica¸˜o ca a ca de l´ ıngua; L´ ınguas detetadas: pt en de bg da es it fr fi hr nl ro ru pl el la sq sv tr sl hu id uk; § ¤ 1 u s e Lingua : : Identify qw ( : l a n g u a g e _ i d e n t i f i c a t i o n ) ; 2 my $lang = langof ( $textstring ) ; ¦ ¥ 3 / 16
  • 5. Identifica¸˜o de L´ ca ıngua Lingua::Identify Implementa¸˜o em Perl de v´rios algoritmos de identifica¸˜o ca a ca de l´ ıngua; L´ ınguas detetadas: pt en de bg da es it fr fi hr nl ro ru pl el la sq sv tr sl hu id uk; § ¤ 1 u s e Lingua : : Identify qw ( : l a n g u a g e _ i d e n t i f i c a t i o n ) ; 2 my $lang = langof ( $textstring ) ; ¦ ¥ § ¤ 1 u s e Lingua : : Identify qw ( : l a n g u a g e _ i d e n t i f i c a t i o n ) ; 2 my ( $lang , $prob ) = langof_file ( { 3 ’ a c t i v e −l a n g u a g e s ’ => [ ’ e s ’ , ’ p t ’ ] , 4 } , $filename ) ; ¦ ¥ 3 / 16
  • 6. Identifica¸˜o de L´ ca ıngua Lingua::Identify::CLD Implementa¸˜o em C++ do Chromium Compact Language ca Detector; C´digo C++ distribu´ diretamente no m´dulo Perl; o ıdo o Suporte para dezenas de l´ ınguas (incluindo pig-latin); 4 / 16
  • 7. Identifica¸˜o de L´ ca ıngua Lingua::Identify::CLD Implementa¸˜o em C++ do Chromium Compact Language ca Detector; C´digo C++ distribu´ diretamente no m´dulo Perl; o ıdo o Suporte para dezenas de l´ ınguas (incluindo pig-latin); § ¤ 1 u s e Lingua : : Identify : : CLD ; 2 3 my $cld = Lingua : : Identify : : CLD−>new ( isPlainText => 0 ) ; 4 my $lang = $cld−>identify ( ”Text ” ) ; ¦ ¥ 4 / 16
  • 8. Segmenta¸˜o e Atomiza¸˜o ca ca Lingua::PT::PLNbase Implementa¸˜o em Perl; ca Segmenta¸˜o e Atomiza¸˜o para a l´ ca ca ıngua Portuguesa; Alguns hacks para dar resultados menos maus noutras l´ ınguas; 5 / 16
  • 9. Segmenta¸˜o e Atomiza¸˜o ca ca Lingua::PT::PLNbase Implementa¸˜o em Perl; ca Segmenta¸˜o e Atomiza¸˜o para a l´ ca ca ıngua Portuguesa; Alguns hacks para dar resultados menos maus noutras l´ ınguas; § ¤ 1 u s e Lingua : : PT : : PLNbase ; 2 3 # o b t e r l i s t a de p a l a v r a s / t o k e n s 4 my @atomos = atomiza ( $texto ) ; 5 6 # obter frases 7 my @frases = frases ( $texto ) ; ¦ ¥ 5 / 16
  • 10. Segmenta¸˜o e Atomiza¸˜o ca ca Lingua::FreeLing3 Interface ` biblioteca C++ freeling; a Suporte para RU, PT, ES, GA, CA, EN, IT; Com outras funcionalidades avan¸adas (a ver. . . ) c 6 / 16
  • 11. Segmenta¸˜o e Atomiza¸˜o ca ca Lingua::FreeLing3 Interface ` biblioteca C++ freeling; a Suporte para RU, PT, ES, GA, CA, EN, IT; Com outras funcionalidades avan¸adas (a ver. . . ) c § ¤ 1 u s e FL3 ’ en ’ ; 2 3 $tokens = tokenizer−>tokenize ( $text ) ; 4 $sentences = splitter−> s p l i t ( $tokens ) ; ¦ ¥ 6 / 16
  • 12. Segmenta¸˜o e Atomiza¸˜o ca ca Lingua::FreeLing3 Interface ` biblioteca C++ freeling; a Suporte para RU, PT, ES, GA, CA, EN, IT; Com outras funcionalidades avan¸adas (a ver. . . ) c § ¤ 1 u s e FL3 ’ en ’ ; 2 3 $tokens = tokenizer−>tokenize ( $text ) ; 4 $sentences = splitter−> s p l i t ( $tokens ) ; ¦ ¥ § ¤ 1 u s e FL3 ; 2 $atomos = tokenizer ( ’ p t ’)−>tokenize ( $texto ) ; 3 $frases = splitter ( ’ p t ’)−> s p l i t ( $atomos ) ; ¦ ¥ 6 / 16
  • 13. An´lise Morfol´gica a o Lingua::Jspell Interface ` biblioteca/aplica¸˜o C jspell; a ca Biblioteca e aplica¸˜o inclu´ no m´dulo Perl; ca ıda o Funciona com dicion´rios semelhantes aos do ispell; a Sem desambigua¸˜o; ca Dicion´rios para PT, ES, LA, EN, FR. a 7 / 16
  • 14. An´lise Morfol´gica a o Lingua::Jspell Interface ` biblioteca/aplica¸˜o C jspell; a ca Biblioteca e aplica¸˜o inclu´ no m´dulo Perl; ca ıda o Funciona com dicion´rios semelhantes aos do ispell; a Sem desambigua¸˜o; ca Dicion´rios para PT, ES, LA, EN, FR. a § ¤ 1 u s e Lingua : : Jspell ; 2 my $dict = Lingua : : Jspell−>new ( ”pt PT ” ) ; 3 4 my @radicals = $dict−>rad ( ”pode ” ) ; # p o d e r , p o d a r 5 6 my @analysis = $dict−>fea ( ” g a t i n h a ” ) ; 7 # { r a d =>’ g a t i n h a r ’ , . . } , { r a d =>’ g a t i n h a r ’ , . . } , { r a d =>’ g a t o ’ , . . 8 9 my @derivated = $dict−>der ( ”g a t o ” ) ; 10 # g a t a , g a t i n h o , g a t i n h a , g a t i n h o s , g a t a s , gato , g a t i n h a s , g . ¦ ¥ 7 / 16
  • 15. An´lise Morfol´gica a o Lingua::FreeLing3 Interface ` biblioteca C++ freeling; a Suporte para RU, PT, ES, GA, CA, EN, IT; Com dete¸˜o de locu¸˜es, nomes pr´prios, entidades, etc.; ca co o E ainda outras funcionalidades (a ver. . . ) 8 / 16
  • 16. An´lise Morfol´gica a o Lingua::FreeLing3 Interface ` biblioteca C++ freeling; a Suporte para RU, PT, ES, GA, CA, EN, IT; Com dete¸˜o de locu¸˜es, nomes pr´prios, entidades, etc.; ca co o E ainda outras funcionalidades (a ver. . . ) § ¤ 1 u s e FL3 ’ en ’ ; 2 3 my $tokens = tokenizer−>tokenize ( $text ) ; 4 my $sentences = splitter−> s p l i t ( $tokens ) ; 5 $sentences = morph−>analyze ( $sentences ) ; 6 7 # s e n t e n c e s ´ uma r e f e r ˆ n c i a p a r a uma l i s t a de o b j e t o s do e e 8 # t i p o ‘ ‘ L i n g u a : : F r e e L i n g 3 : : Word ’ ’ 9 my @analysis $sentences −>[0]−>analysis ; ¦ ¥ 8 / 16
  • 17. Etiqueta¸˜o de Part-of-Speech ca Lingua::FreeLing3 Desambigua¸˜o; ca Duas abordagens diferentes (hmm ou relax); 9 / 16
  • 18. Etiqueta¸˜o de Part-of-Speech ca Lingua::FreeLing3 Desambigua¸˜o; ca Duas abordagens diferentes (hmm ou relax); § ¤ 1 u s e FL3 ’ en ’ ; 2 3 my $tokens = tokenizer−>tokenize ( $text ) ; 4 my $sentences = splitter−> s p l i t ( $tokens ) ; 5 $sentences = morph−>analyze ( $sentences ) ; 6 $sentences = hmm−>tag ( $sentences ) ; ¦ ¥ 9 / 16
  • 19. Etiqueta¸˜o de Part-of-Speech ca Lingua::FreeLing3 Desambigua¸˜o; ca Duas abordagens diferentes (hmm ou relax); § ¤ 1 u s e FL3 ’ en ’ ; 2 3 my $tokens = tokenizer−>tokenize ( $text ) ; 4 my $sentences = splitter−> s p l i t ( $tokens ) ; 5 $sentences = morph−>analyze ( $sentences ) ; 6 $sentences = hmm−>tag ( $sentences ) ; ¦ ¥ § ¤ 1 u s e FL3 ’ en ’ ; 2 3 my $tokens = tokenizer−>tokenize ( $text ) ; 4 my $sentences = splitter−> s p l i t ( $tokens ) ; 5 $sentences = morph−>analyze ( $sentences ) ; 6 $sentences = relax−>tag ( $sentences ) ; ¦ ¥ 9 / 16
  • 20. Parsing de Dependˆncias e Lingua::FreeLing3 Dispon´ para algumas das l´ ıvel ınguas do FreeLing3; 10 / 16
  • 21. Parsing de Dependˆncias e Lingua::FreeLing3 Dispon´ para algumas das l´ ıvel ınguas do FreeLing3; § ¤ 1 u s e FL3 ’ e s ’ ; 2 3 my $tokens = tokenizer−>tokenize ( $text ) ; 4 my $sentences = splitter−> s p l i t ( $tokens ) ; 5 $sentences = morph−>analyze ( $sentences ) ; 6 $sentences = hmm−>analyze ( $sentences ) ; 7 $sentences = chart−>parse ( $sentences ) ; ¦ ¥ 10 / 16
  • 22. NLGrep com Lingua::FreeLing3 Procurar padr˜es (sequˆncias); o e com palavras, lemas, ou propriedades morfol´gicas; o 11 / 16
  • 23. NLGrep com Lingua::FreeLing3 Procurar padr˜es (sequˆncias); o e com palavras, lemas, ou propriedades morfol´gicas; o $ fl3-nlgrep -l pt pg33056.txt ~ser A C A era grosso e baixo era excellente e detestavel e ´ pura e severa Sou exclusivo e pessoal era orgulhoso e fraco e ´ independente e superior era grande e vistosa era justo nem bonito e ´ trivial e chocho era restricta e mansa (...) 11 / 16
  • 24. NLGrep com Lingua::FreeLing3 § ¤ 1 open my $fh , ”<: u t f 8 ” , $filename ; 2 3 w h i l e (my $l = <$fh >) { 4 my ( $tokens , $frases ) ; 5 $tokens = tokenizer−>tokenize ( $l ) ; 6 $frases = splitter−> s p l i t ( $tokens ) ; 7 $frases = morph−>analyze ( $frases ) ; 8 $frases = hmm−>tag ( $frases ) ; 9 10 # para cada f r a s e 11 f o r my $frase ( @$frases ) { 12 my @words = $frase−>words ; 13 14 # janela deslizante 15 w h i l e ( @words > @query ) { 16 i f ( match ( @words , @query ) ) { 17 show_match ( @words [ 0 . . $ # query ] ) 18 } 19 s h i f t @words ; 20 } } } ¦ ¥ 12 / 16
  • 25. NLGrep com Lingua::FreeLing3 § ¤ 1 # v e r i f i c a p a l a v r a s c o n t r a e x p r e s s ˜o a 2 # de p e s q u i s a 3 s u b match { 4 f o r my $i ( 0 . . $#query ) { 5 # ignorar palavra se wildcard 6 n e x t i f $query −>[$i ] eq ” ” ; 7 8 # se procuramos p a l a v r a exacta 9 i f ( $query −>[$i ] =˜ / ˆ = ( . ∗ ) $ / ) { 10 r e t u r n 0 i f $1 ne $words −>[$i]−>lc_form ; 11 } 12 # s e p r o c u r a m o s p o r lema 13 e l s i f ( $query −>[$i ] =˜ / ˆ ˜ ( . ∗ ) $ / ) { 14 r e t u r n 0 i f $1 ne $words −>[$i]−>lemma ; 15 } 16 # c a s o c o n t r ´ r i o , e t i q u e t a POS a 17 else { 18 my $tag = $words −>[$i]−>tag ; 19 r e t u r n 0 i f $tag ! ˜ /ˆ $query −>[$i ] / i ; 20 } } 21 return 1; 22 } ¦ ¥ 13 / 16
  • 26. NLGrep com Lingua::FreeLing3 § ¤ 1 # imprime as p a l a v r a s . 2 s u b show_match { 3 p r i n t j o i n ( ” ” , map{ $_−>form } @_ ) , ”n ” 4 } ¦ ¥ 14 / 16
  • 27. Outras Ferramentas Lingua::FreeLing3::Utils - conjunto de fun¸˜es/comandos para c´lculo de n-grams, an´lise co a a morfol´gica e nlgrep, implementados em Fl3; o 15 / 16
  • 28. Outras Ferramentas Lingua::FreeLing3::Utils - conjunto de fun¸˜es/comandos para c´lculo de n-grams, an´lise co a a morfol´gica e nlgrep, implementados em Fl3; o XML::TMX - para lidar com mem´rias de tradu¸˜o; o ca 15 / 16
  • 29. Outras Ferramentas Lingua::FreeLing3::Utils - conjunto de fun¸˜es/comandos para c´lculo de n-grams, an´lise co a a morfol´gica e nlgrep, implementados em Fl3; o XML::TMX - para lidar com mem´rias de tradu¸˜o; o ca Lingua::NATools - para alinhamentos de textos paralelos e extra¸˜o de terminologia/dicion´rios bilingues; ca a 15 / 16
  • 30. Outras Ferramentas Lingua::FreeLing3::Utils - conjunto de fun¸˜es/comandos para c´lculo de n-grams, an´lise co a a morfol´gica e nlgrep, implementados em Fl3; o XML::TMX - para lidar com mem´rias de tradu¸˜o; o ca Lingua::NATools - para alinhamentos de textos paralelos e extra¸˜o de terminologia/dicion´rios bilingues; ca a Biblio::Thesaurus - para lidar com ontologias/thesauri; 15 / 16
  • 31. Outras Ferramentas Lingua::FreeLing3::Utils - conjunto de fun¸˜es/comandos para c´lculo de n-grams, an´lise co a a morfol´gica e nlgrep, implementados em Fl3; o XML::TMX - para lidar com mem´rias de tradu¸˜o; o ca Lingua::NATools - para alinhamentos de textos paralelos e extra¸˜o de terminologia/dicion´rios bilingues; ca a Biblio::Thesaurus - para lidar com ontologias/thesauri; Lingua::PT::ProperNames - para dete¸˜o e extra¸˜o de ca ca nomes pr´prios; o 15 / 16
  • 32. Outras Ferramentas Lingua::FreeLing3::Utils - conjunto de fun¸˜es/comandos para c´lculo de n-grams, an´lise co a a morfol´gica e nlgrep, implementados em Fl3; o XML::TMX - para lidar com mem´rias de tradu¸˜o; o ca Lingua::NATools - para alinhamentos de textos paralelos e extra¸˜o de terminologia/dicion´rios bilingues; ca a Biblio::Thesaurus - para lidar com ontologias/thesauri; Lingua::PT::ProperNames - para dete¸˜o e extra¸˜o de ca ca nomes pr´prios; o Text::Ngram - c´lculo de ngrams (carateres); a 15 / 16
  • 33. Outras Ferramentas Lingua::FreeLing3::Utils - conjunto de fun¸˜es/comandos para c´lculo de n-grams, an´lise co a a morfol´gica e nlgrep, implementados em Fl3; o XML::TMX - para lidar com mem´rias de tradu¸˜o; o ca Lingua::NATools - para alinhamentos de textos paralelos e extra¸˜o de terminologia/dicion´rios bilingues; ca a Biblio::Thesaurus - para lidar com ontologias/thesauri; Lingua::PT::ProperNames - para dete¸˜o e extra¸˜o de ca ca nomes pr´prios; o Text::Ngram - c´lculo de ngrams (carateres); a Text::WordGrams - c´lculo de ngrams (palavras); a 15 / 16
  • 34. Obrigado! 16 / 16