NLP and Perl

NLP and Perl

NLP and Perl Francesco Nidito [email protected] May 31, 2006 Outline Introduction Why Perl and NLP? Lingua::EN::* Parsing English Categorization and Extraction Link parsing Conclusions References nd I Simon Cozens, “Advanced Perl Programming”, 2 Edition (Chapter 5 - Natural Language Tools) I Dan Brian, “Parsing Natural Language with Lingua::LinkParser”, The Perl Journal, Issue 19, Fall 2000 (volume 5, number 3) http://www.foo.be/docs/tpj/ I http://www.link.cs.cmu.edu/link/index.html I http://search.cpan.org/ I . but I use to have fun. ehm. work with Perl! Caveat I I am not a NLP expert! Caveat I I am not a NLP expert! I . but I use to have fun. ehm. work with Perl! Natural Language Processing I NLP. I . is intended to replay to questions on human written documents like the followings: I what does it mean? I what other documents is it like? I ... I . uses AI techniques I baby Perl I natural language features (e.g postfix-if) print $x if($x > 42); I . was created with natural language in mind Perl I Perl. I . is Practical Export and Report Language I . is often described as a text processing language I very (very!) powerful regular expression I baby Perl I natural language features (e.g postfix-if) print $x if($x > 42); Perl I Perl. I . is Practical Export and Report Language I . is often described as a text processing language I very (very!) powerful regular expression I . was created with natural language in mind I natural language features (e.g postfix-if) print $x if($x > 42); Perl I Perl. I . is Practical Export and Report Language I . is often described as a text processing language I very (very!) powerful regular expression I . was created with natural language in mind I baby Perl Perl I Perl. I . is Practical Export and Report Language I . is often described as a text processing language I very (very!) powerful regular expression I . was created with natural language in mind I baby Perl I natural language features (e.g postfix-if) print $x if($x > 42); I CPAN (Comprehensive Perl Archive Network) I on line since October 26 1995 (10 years!) I 3061 MB I 283 mirrors I 5126 authors I 10066 modules Why is Perl a good choice? I A lot of modules around Why is Perl a good choice? I A lot of modules around I CPAN (Comprehensive Perl Archive Network) I on line since October 26 1995 (10 years!) I 3061 MB I 283 mirrors I 5126 authors I 10066 modules I klingon Lingua::Klingon::* I various languages I english: Lingua::EN::* I portuguese: Lingua::PT::* I chinese: Lingua::ZH::* I utilities I Lingua::Stem::* I Lingua::Features::* I Lingua::StopWords::* I Text::NLP (version 0.1) I NLP::ExtractFeatures (not in CPAN) Perl NLP modules I Lingua::* I “only” 337 modules I klingon Lingua::Klingon::* I utilities I Lingua::Stem::* I Lingua::Features::* I Lingua::StopWords::* I Text::NLP (version 0.1) I NLP::ExtractFeatures (not in CPAN) Perl NLP modules I Lingua::* I “only” 337 modules I various languages I english: Lingua::EN::* I portuguese: Lingua::PT::* I chinese: Lingua::ZH::* I utilities I Lingua::Stem::* I Lingua::Features::* I Lingua::StopWords::* I Text::NLP (version 0.1) I NLP::ExtractFeatures (not in CPAN) Perl NLP modules I Lingua::* I “only” 337 modules I various languages I english: Lingua::EN::* I portuguese: Lingua::PT::* I chinese: Lingua::ZH::* I klingon Lingua::Klingon::* I Text::NLP (version 0.1) I NLP::ExtractFeatures (not in CPAN) Perl NLP modules I Lingua::* I “only” 337 modules I various languages I english: Lingua::EN::* I portuguese: Lingua::PT::* I chinese: Lingua::ZH::* I klingon Lingua::Klingon::* I utilities I Lingua::Stem::* I Lingua::Features::* I Lingua::StopWords::* I NLP::ExtractFeatures (not in CPAN) Perl NLP modules I Lingua::* I “only” 337 modules I various languages I english: Lingua::EN::* I portuguese: Lingua::PT::* I chinese: Lingua::ZH::* I klingon Lingua::Klingon::* I utilities I Lingua::Stem::* I Lingua::Features::* I Lingua::StopWords::* I Text::NLP (version 0.1) Perl NLP modules I Lingua::* I “only” 337 modules I various languages I english: Lingua::EN::* I portuguese: Lingua::PT::* I chinese: Lingua::ZH::* I klingon Lingua::Klingon::* I utilities I Lingua::Stem::* I Lingua::Features::* I Lingua::StopWords::* I Text::NLP (version 0.1) I NLP::ExtractFeatures (not in CPAN) I NLP modules I Lingua::EN::Sentence I Lingua::EN::StopWords I Lingua::Stem::En I Lingua::EN::Tagger I Lingua::EN::Summarize I Lingua::EN::NamedEntitiy I ... Lingua::EN::* I Utility modules I Lingua::EN::Inflect I Lingua::EN::Words2Num I ... Lingua::EN::* I Utility modules I Lingua::EN::Inflect I Lingua::EN::Words2Num I ... I NLP modules I Lingua::EN::Sentence I Lingua::EN::StopWords I Lingua::Stem::En I Lingua::EN::Tagger I Lingua::EN::Summarize I Lingua::EN::NamedEntitiy I ... I it uses a regular expression to cuts viciously the text into sentences I then a list of rules is applied on the marked text in order to fix end-of-sentence markings on places which are not indeed end-of-sentence I customizable module (via add acronyms method) I for instance “I do not work with abbreviations, e.g., This one.” I “I do not work with abbreviations, e.g.,” I “ This one.” I Lingua::EN::Sentence I resolves the punctuation problem Splitting Up Sentences I Text::Sentence I quite good module I problems with abbreviations I it uses a regular expression to cuts viciously the text into sentences I then a list of rules is applied on the marked text in order to fix end-of-sentence markings on places which are not indeed end-of-sentence I customizable module (via add acronyms method) I Lingua::EN::Sentence I resolves the punctuation problem Splitting Up Sentences I Text::Sentence I quite good module I problems with abbreviations I for instance “I do not work with abbreviations, e.g., This one.” I “I do not work with abbreviations, e.g.,” I “ This one.” I it uses a regular expression to cuts viciously the text into sentences I then a list of rules is applied on the marked text in order to fix end-of-sentence markings on places which are not indeed end-of-sentence I customizable module (via add acronyms method) Splitting Up Sentences I Text::Sentence I quite good module I problems with abbreviations I for instance “I do not work with abbreviations, e.g., This one.” I “I do not work with abbreviations, e.g.,” I “ This one.” I Lingua::EN::Sentence I resolves the punctuation problem I customizable module (via add acronyms method) Splitting Up Sentences I Text::Sentence I quite good module I problems with abbreviations I for instance “I do not work with abbreviations, e.g., This one.” I “I do not work with abbreviations, e.g.,” I “ This one.” I Lingua::EN::Sentence I resolves the punctuation problem I it uses a regular expression to cuts viciously the text into sentences I then a list of rules is applied on the marked text in order to fix end-of-sentence markings on places which are not indeed end-of-sentence Splitting Up Sentences I Text::Sentence I quite good module I problems with abbreviations I for instance “I do not work with abbreviations, e.g., This one.” I “I do not work with abbreviations, e.g.,” I “ This one.” I Lingua::EN::Sentence I resolves the punctuation problem I it uses a regular expression to cuts viciously the text into sentences I then a list of rules is applied on the marked text in order to fix end-of-sentence markings on places which are not indeed end-of-sentence I customizable module (via add acronyms method) Splitting Up Sentences (example) use Lingua::EN::Sentence qw(get_sentences add_acronyms); my $text<<EOF; This punctuation-based assumption is generally good enought, but screws massily on sentences containing abbreviations followed by capital letters, e.g., This one. Shlomo Yona’s Lingua::EN::Sentence does a considerably better job: EOF my $sentences = get_sentences($text); foreach my $sentence (@$sentences){ printf "#",$sentence,"\n\n"; } Splitting Up Sentences (example output) [nids@vultus NLP]% split_ex.pl #This punctuation-based assumption is generally good enought, but screws massily on sentences containing abbreviations followed by capital letters, e.g., This one. #Shlomo Yona’s Lingua::EN::Sentence does a considerably better job: [nids@vultus NLP]% I ”are” ”that” ”very”. are stopwords I Stopwords are words that do not carry semantic content I Lingua::EN::StopWords I Plucene, a Perl-based, and highly customizable search engine toolkit, based on the Lucene API, uses uses Lingua::Stem::EN Stemming and Stopwording I Lingua::Stem::En I Stemming consist in reduction of words to simpler form I useful in building histograms I ”volcano erupting”, ”volcanoes erupted” ⇒ ”volcano erupt” I implementation of the Porter Stemming Algorithm (Porter, M.F., ”An Algorithm For Suffix Stripping”, Program 14 (3), July 1980, pp. 130-137) I rules applied via regular expressions I Plucene, a Perl-based, and highly customizable search engine toolkit, based on the Lucene API, uses uses Lingua::Stem::EN Stemming and Stopwording I Lingua::Stem::En I Stemming consist in reduction of words to simpler form I useful in building histograms I ”volcano erupting”, ”volcanoes erupted” ⇒ ”volcano erupt” I implementation of the Porter Stemming Algorithm (Porter, M.F., ”An Algorithm For Suffix Stripping”, Program 14 (3), July 1980, pp. 130-137) I rules applied via regular expressions I Lingua::EN::StopWords I Stopwords are words that do not carry semantic content I ”are” ”that” ”very”.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    50 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us