{"id":184,"date":"2006-10-27T10:53:00","date_gmt":"2006-10-27T15:53:00","guid":{"rendered":"http:\/\/www.juixe.com\/techknow\/index.php\/2006\/10\/27\/rubyconf-speak-my-language\/"},"modified":"2006-10-27T10:53:00","modified_gmt":"2006-10-27T15:53:00","slug":"rubyconf-speak-my-language","status":"publish","type":"post","link":"http:\/\/juixe.com\/techknow\/index.php\/2006\/10\/27\/rubyconf-speak-my-language\/","title":{"rendered":"RubyConf: Speak My Language"},"content":{"rendered":"<p><a href=\"http:\/\/www.deveiate.org\/\">Michael Granger<\/a> gave a RubyConf 2006 presentation on Natural Language Processing and Natural Language Generation in Ruby.  Michael gave some interesting demos where he was able to break a sentence into its grammatical building blocks such as subject, verb, and noun.  He was also able to translate a sentence into a more generic version of itself.  This session was a personal favorite although I don&#8217;t have a current need for language processing libraries.<\/p>\n<p>Here is a list of Ruby libraries which Michael recommends:<br \/>\n<a href=\"http:\/\/www.tartarus.org\/martin\/PorterStemmer\/ruby.txt\">Stemmable<\/a> &#8211; an implementation of <a href=\"http:\/\/www.tartarus.org\/martin\/PorterStemmer\/ \">Porter Stemming Algorithm<\/a>.<br \/>\n<a href=\"http:\/\/chronic.rubyforge.org\/\">Chronic<\/a> &#8211; a natural language date\/time parser written in pure Ruby.<br \/>\n<a href=\"http:\/\/www.deveiate.org\/projects\/Ruby WordNet\/\">Ruby WordNet<\/a> &#8211; Ruby WordNet is a Ruby interface to the <a href=\"http:\/\/wordnet.princeton.edu\/\">WordNet Lexical Database<\/a>.<br \/>\n<a href=\"http:\/\/www.advogato.org\/proj\/Ruby-LinkParser\/\">Ruby LinkParser<\/a> &#8211; Ruby port of the perl module <a href-=\"http:\/\/search.cpan.org\/dist\/Lingua-LinkParser\/\">Lingua::LinkParser<\/a> used to determine the structure of a sentence.<br \/>\n<a href=\"http:\/\/www.deveiate.org\/projects\/Linguistics\/wiki\/English\">Ruby Linguistics<\/a> &#8211; A Ruby framework that integrates Ruby WordNet, Ruby LinkParser.  Here is some code of Ruby Linguistics in use:<br \/>\n<!--more--><br \/>\n[source:ruby]<br \/>\nrequire &#8216;linguistics&#8217;<br \/>\nLinguistics::use(:en)  # extends Array, String, and Numeric<\/p>\n<p># Pluralization<br \/>\nputs &#8220;box&#8221;.en.plural  # =&gt; &#8220;boxes&#8221;<br \/>\nputs &#8220;mouse&#8221;.en.plural  # =&gt; &#8220;mice&#8221;<\/p>\n<p># Present Participles<br \/>\n&#8220;runs&#8221;.en.present_participle  # =&gt; &#8220;running&#8221;<br \/>\n&#8220;eats&#8221;.en.present_participle  # =&gt; &#8220;eating&#8221;<\/p>\n<p># Ordinal Numbers<br \/>\nputs 5.en.ordinal    # =&gt; &#8220;5th&#8221;<br \/>\nputs 2004.en.ordinal  # =&gt; &#8220;2004th&#8221;<\/p>\n<p># Quantification<br \/>\nputs &#8220;cow&#8221;.en.quantify(5)  # =&gt; &#8220;several cows&#8221;<br \/>\nputs &#8220;cow&#8221;.en.quantify(1005)  # =&gt; &#8220;thousands of cows&#8221;<br \/>\n[\/source]<\/p>\n<p>Technorati Tags: <a href=\"http:\/\/technorati.com\/tag\/ruby\" rel=\"tag\">ruby<\/a>, <a href=\"http:\/\/technorati.com\/tag\/rubyconf\" rel=\"tag\"> rubyconf<\/a>, <a href=\"http:\/\/technorati.com\/tag\/rubyconf2006\" rel=\"tag\"> rubyconf2006<\/a>, <a href=\"http:\/\/technorati.com\/tag\/language\" rel=\"tag\"> language<\/a>, <a href=\"http:\/\/technorati.com\/tag\/natural+languge\" rel=\"tag\"> natural languge<\/a>, <a href=\"http:\/\/technorati.com\/tag\/nlp\" rel=\"tag\"> nlp<\/a>, <a href=\"http:\/\/technorati.com\/tag\/nlg\" rel=\"tag\"> nlg<\/a>, <a href=\"http:\/\/technorati.com\/tag\/linkparser\" rel=\"tag\"> linkparser<\/a>, <a href=\"http:\/\/technorati.com\/tag\/libraries\" rel=\"tag\"> libraries<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Michael Granger gave a RubyConf 2006 presentation on Natural Language Processing and Natural Language Generation in Ruby. Michael gave some interesting demos where he was able to break a sentence into its grammatical building blocks such as subject, verb, and noun. He was also able to translate a sentence into a more generic version of [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spay_email":"","footnotes":""},"categories":[8,22,3],"tags":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p902K-2Y","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"http:\/\/juixe.com\/techknow\/index.php\/wp-json\/wp\/v2\/posts\/184"}],"collection":[{"href":"http:\/\/juixe.com\/techknow\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/juixe.com\/techknow\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/juixe.com\/techknow\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/juixe.com\/techknow\/index.php\/wp-json\/wp\/v2\/comments?post=184"}],"version-history":[{"count":0,"href":"http:\/\/juixe.com\/techknow\/index.php\/wp-json\/wp\/v2\/posts\/184\/revisions"}],"wp:attachment":[{"href":"http:\/\/juixe.com\/techknow\/index.php\/wp-json\/wp\/v2\/media?parent=184"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/juixe.com\/techknow\/index.php\/wp-json\/wp\/v2\/categories?post=184"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/juixe.com\/techknow\/index.php\/wp-json\/wp\/v2\/tags?post=184"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}