<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Flying memes &#187; natural language parser</title>
	<atom:link href="http://sandropaganotti.com/tag/natural-language-parser/feed/" rel="self" type="application/rss+xml" />
	<link>http://sandropaganotti.com</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Sun, 08 Jan 2012 16:00:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Ruby linguistic, Wordnet e LinkParser su Snow Leopard</title>
		<link>http://sandropaganotti.com/2010/02/03/ruby-linguistic-wordnet-e-linkparser-su-snow-leopard/</link>
		<comments>http://sandropaganotti.com/2010/02/03/ruby-linguistic-wordnet-e-linkparser-su-snow-leopard/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 22:46:09 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Librerie]]></category>
		<category><![CDATA[linguistics]]></category>
		<category><![CDATA[link parser]]></category>
		<category><![CDATA[link-grammar]]></category>
		<category><![CDATA[natural language generator]]></category>
		<category><![CDATA[natural language parser]]></category>
		<category><![CDATA[wordnet]]></category>

		<guid isPermaLink="false">http://sandropaganotti.com/?p=292</guid>
		<description><![CDATA[Update, 05/02/10: Ecco il link alle slide della presentazione! Ringrazio tutti i partecipanti alla bellissima serata! Il prossimo giovedì (4 febbraio 2010) terrò un Lightning Talk al Ruby Social Club su alcuni strumenti interessanti che orbitano attorno al concetto di Natural Language Generation/Parsing. In particolare vedremo due librerie che consentono di interfacciarsi con  WordNet e [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Update, 05/02/10: </strong>Ecco il <a title="Natural Languages and Ruby" href="http://prezi.com/hdlhowymuge2/" target="_blank">link alle slide della presentazione</a>! Ringrazio tutti i partecipanti alla bellissima serata!</p>
<p>Il prossimo giovedì (4 febbraio 2010) terrò un Lightning Talk al <a href="http://therubymine.com/2010/01/25/primo-ruby-social-club-del-2010/" target="_blank">Ruby Social Club</a> su alcuni strumenti interessanti che orbitano attorno al concetto di Natural Language Generation/Parsing. In particolare vedremo due librerie che consentono di interfacciarsi con  <a href="http://wordnet.princeton.edu/" target="_blank">WordNet</a> e <a href="http://www.link.cs.cmu.edu/link/" target="_blank">Link-Grammar</a>.</p>
<p>Non voglio svelare nulla dello speech in questo post (anche se sicuramente venerdi farò un update allegando le slide della presentazione) ma solamente fornire a coloro che lo ritengano utile le istruzioni su come installare tali librerie sul proprio Mac.</p>
<p><span id="more-292"></span></p>
<h3>WordNet</h3>
<p><strong>Update, 05/02/10:</strong> mi segnalano <a href="http://github.com/roja/words" target="_blank">Words</a>, un wrapper analogo a quello che presento nelle prossime righe ma decisamente più aggiornato, it worths a look.</p>
<p>Partiamo da WordNet; la prima cosa da fare è installare la gemma BerkleyDB, il che comporta in primis l&#8217;installazione dello stesso BDB, quindi il primo comando è:</p>
<pre><code>sudo port install db47
</code></pre>
<p>Fatto questo <a href="ftp://ftp.eenet.ee/pub/FreeBSD/distfiles/ruby/bdb-0.6.4.tar.gz" target="_blank">scarichiamo la versione vecchia della gemma BDB</a> (<a href="http://github.com/mattbauer/bdb" target="_blank">quella su GitHub</a> non va bene, hanno cambiato i nomi alle costanti), decomprimiamola e modifichiamo la chiamata alla funzione &#8216;have_library&#8217; nel file src/extconf.rb (riga 72 e riga 79) come segue:</p>
<pre><code>have_library("db-#{with_ver}", db_version)
</code></pre>
<p>lanciamo infine la compilazione e l&#8217;installazione della libreria con i comandi (da eseguire all&#8217;interno della cartella di BDB):</p>
<pre><code>sudo env ARCHFLAGS="-arch x86_64" ruby extconf.rb  -- --with-db-include=/opt/local/include/db46 --with-db-lib=/opt/local/lib/db46 --with-db-version=4.6
make
sudo make install
</code></pre>
<p>Ok, ora installiamo la gemma di wordnet:</p>
<pre><code>sudo gem install wordnet
</code></pre>
<p>modifichiamo quindi il file &#8216;lib/wordnet/lexicon.rb&#8217; all&#8217;interno della gemma impostando alla riga 68 un path assoluto come ad esempio:</p>
<pre><code>DEFAULT_DB_ENV = File::join( '/Library/Ruby/Gems/1.8/gems/wordnet-0.0.5/ruby-wordnet' )
</code></pre>
<p>A questo punto non ci resta che  scaricare e convertire il database di wordnet nel formato BDB richiesto dalla gemma, per fare questo recuperiamo <a href="http://wordnetcode.princeton.edu/3.0/WordNet-3.0.tar.gz" target="_blank">l&#8217;ultima versione di wordnet disponibile</a> e decomprimiamola. Poi eseguiamo da linea di comando lo script presente nella cartella della gemma &#8216;convertdb.db&#8217; e, quando ci viene chiesto, inseriamo il percorso assoluto alla cartella &#8216;dict&#8217; all&#8217;interno dell&#8217;archivio di wordnet appena decompresso.<br />
Testiamo il funzionamento del tutto eseguendo questo semplice script:</p>
<pre><code class="ruby">require 'rubygems'
require 'wordnet'
include WordNet::Constants

lex     = WordNet::Lexicon::new
origins = lex.lookup_synsets( "house", Noun )
puts "#{(o=origins.first).words}: #{o.lex_info}"
[:meronyms,:hypernyms,:derivations,:hyponyms].each do |m|
  puts "#{m}: #{o.send(m).map{|s| s.words}.flatten.uniq.join(",")}"
end</code></pre>
<h3>Link Grammar</h3>
<p>Installiamo link grammar usando i MacPort:</p>
<pre><code>sudo port install link-grammar</code></pre>
<p>quindi <a href="http://deveiate.org/projects/Ruby-LinkParser" target="_blank">scarichiamo il sorgente della gemma</a> che fungerà da wrapper e decomprimiamolo in una cartella a nostro piacimento. Dall&#8217;interno di questa cartella compiliamo ed installiamo la gemma con questi comandi:</p>
<pre><code>ARCHFLAGS="-arch x86_64" rake --  --with-link-grammar-include=/opt/local/include/link-grammar --with-link-grammar-lib=/opt/local/lib
sudo rake install
</code></pre>
<p>Testiamo anche questa installazione eseguendo questo piccolo script:</p>
<pre><code class="ruby">require 'rubygems'
require 'linkparser'

dict = LinkParser::Dictionary.new('en')
sent = dict.parse( "People use Ruby for all kinds of nifty things." )

puts sent.subject
puts sent.verb
puts sent.object
</code></pre>
<h3>Linguistic</h3>
<p>Questa gemma funziona un pò da meta-wrapper raggruppando le funzionalità delle due gemme finora installate in un unico e omogeneo set di API. Installiamola con rubygems:</p>
<pre><code>sudo gem install linguistics</code></pre>
<p>quindi modifichiamo il file &#8216;lib/linguistics/en/linkparser.rb&#8217; all&#8217;interno della cartella dove risiede la gemma sistemando la riga 90 come segue:</p>
<pre><code>return @lp_dict ||= LinkParser::Dictionary.new('en', :verbosity =&gt; 0 )
</code></pre>
<p>Eseguiamo quindi un piccolo script di prova per sancirne la riuscita installazione:</p>
<pre><code class="ruby">require 'rubygems'
require 'linguistics'

Linguistics::use( :en )
frase = "the cat chased a snake"

puts &lt;&lt;-EOS
  Sogg:        #{frase.en.sentence.subject}
  Verbo:       #{frase.en.sentence.verb}
  Comp.ogg:    #{frase.en.sentence.object}
  Verbo (inf): #{frase.en.sentence.verb.en.infinitive}
EOS
</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://sandropaganotti.com/2010/02/03/ruby-linguistic-wordnet-e-linkparser-su-snow-leopard/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

