Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

PLN em Perl

769 views

Published on

Apresentação na PtPW 2012.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

PLN em Perl

  1. 1. Processamento de Linguagem Natural em Perl Alberto Sim˜es o ambs@perl.pt Portuguese Perl Workshop 28 Setembro 2012 1 / 16
  2. 2. Disclaimer / Aviso Ferramentas para a L´ ıngua Portuguesa do Projeto Natura 2 / 16
  3. 3. Identifica¸˜o de L´ ca ınguaLingua::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. 4. Identifica¸˜o de L´ ca ınguaLingua::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. 5. Identifica¸˜o de L´ ca ınguaLingua::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. 6. Identifica¸˜o de L´ ca ınguaLingua::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. 7. Identifica¸˜o de L´ ca ınguaLingua::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 ;23 my $cld = Lingua : : Identify : : CLD−>new ( isPlainText => 0 ) ;4 my $lang = $cld−>identify ( ”Text ” ) ; ¦ ¥ 4 / 16
  8. 8. Segmenta¸˜o e Atomiza¸˜o ca caLingua::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. 9. Segmenta¸˜o e Atomiza¸˜o ca caLingua::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 ;23 # o b t e r l i s t a de p a l a v r a s / t o k e n s4 my @atomos = atomiza ( $texto ) ;56 # obter frases7 my @frases = frases ( $texto ) ; ¦ ¥ 5 / 16
  10. 10. Segmenta¸˜o e Atomiza¸˜o ca caLingua::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. 11. Segmenta¸˜o e Atomiza¸˜o ca caLingua::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 ’ ;23 $tokens = tokenizer−>tokenize ( $text ) ;4 $sentences = splitter−> s p l i t ( $tokens ) ; ¦ ¥ 6 / 16
  12. 12. Segmenta¸˜o e Atomiza¸˜o ca caLingua::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 ’ ;23 $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. 13. An´lise Morfol´gica a oLingua::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. 14. An´lise Morfol´gica a oLingua::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 ” ) ;34 my @radicals = $dict−>rad ( ”pode ” ) ; # p o d e r , p o d a r56 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 ’ , . .89 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. 15. An´lise Morfol´gica a oLingua::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. 16. An´lise Morfol´gica a oLingua::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 ’ ;23 my $tokens = tokenizer−>tokenize ( $text ) ;4 my $sentences = splitter−> s p l i t ( $tokens ) ;5 $sentences = morph−>analyze ( $sentences ) ;67 # 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 e8 # 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. 17. Etiqueta¸˜o de Part-of-Speech caLingua::FreeLing3 Desambigua¸˜o; ca Duas abordagens diferentes (hmm ou relax); 9 / 16
  18. 18. Etiqueta¸˜o de Part-of-Speech caLingua::FreeLing3 Desambigua¸˜o; ca Duas abordagens diferentes (hmm ou relax); § ¤1 u s e FL3 ’ en ’ ;23 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. 19. Etiqueta¸˜o de Part-of-Speech caLingua::FreeLing3 Desambigua¸˜o; ca Duas abordagens diferentes (hmm ou relax); § ¤1 u s e FL3 ’ en ’ ;23 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 ’ ;23 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. 20. Parsing de Dependˆncias eLingua::FreeLing3 Dispon´ para algumas das l´ ıvel ınguas do FreeLing3; 10 / 16
  21. 21. Parsing de Dependˆncias eLingua::FreeLing3 Dispon´ para algumas das l´ ıvel ınguas do FreeLing3; § ¤1 u s e FL3 ’ e s ’ ;23 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. 22. NLGrepcom Lingua::FreeLing3 Procurar padr˜es (sequˆncias); o e com palavras, lemas, ou propriedades morfol´gicas; o 11 / 16
  23. 23. NLGrepcom 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. 24. NLGrepcom Lingua::FreeLing3 § ¤1 open my $fh , ”<: u t f 8 ” , $filename ;23 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 ) ;910 # para cada f r a s e11 f o r my $frase ( @$frases ) {12 my @words = $frase−>words ;1314 # janela deslizante15 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. 25. NLGrepcom 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 a2 # de p e s q u i s a3 s u b match {4 f o r my $i ( 0 . . $#query ) {5 # ignorar palavra se wildcard6 n e x t i f $query −>[$i ] eq ” ” ;78 # se procuramos p a l a v r a exacta9 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 lema13 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 a17 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. 26. NLGrepcom 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. 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. 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. 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. 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. 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. 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. 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. 34. Obrigado! 16 / 16

×