Your SlideShare is downloading. ×
0
PLN em Perl
PLN em Perl
PLN em Perl
PLN em Perl
PLN em Perl
PLN em Perl
PLN em Perl
PLN em Perl
PLN em Perl
PLN em Perl
PLN em Perl
PLN em Perl
PLN em Perl
PLN em Perl
PLN em Perl
PLN em Perl
PLN em Perl
PLN em Perl
PLN em Perl
PLN em Perl
PLN em Perl
PLN em Perl
PLN em Perl
PLN em Perl
PLN em Perl
PLN em Perl
PLN em Perl
PLN em Perl
PLN em Perl
PLN em Perl
PLN em Perl
PLN em Perl
PLN em Perl
PLN em Perl
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

PLN em Perl

320

Published on

Apresentação na PtPW 2012.

Apresentação na PtPW 2012.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
320
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

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

×