Successfully reported this slideshow.
Your SlideShare is downloading. ×

PLN em Perl

Advertisement

More Related Content

Advertisement

Related Books

Free with a 30 day trial from Scribd

See all

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 ı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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 17. Etiqueta¸˜o de Part-of-Speech ca Lingua::FreeLing3 Desambigua¸˜o; ca Duas abordagens diferentes (hmm ou relax); 9 / 16
  18. 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. 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. 20. Parsing de Dependˆncias e Lingua::FreeLing3 Dispon´ para algumas das l´ ıvel ınguas do FreeLing3; 10 / 16
  21. 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. 22. NLGrep com Lingua::FreeLing3 Procurar padr˜es (sequˆncias); o e com palavras, lemas, ou propriedades morfol´gicas; o 11 / 16
  23. 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. 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. 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. 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. 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

×