Category: Motore di ricerca Nutch

Nutch: Conclusioni

La semplice istallazione e la facilità con cui può essere configurato, pongono Nutch alla portata di tutti i tipi di utenza. Esso si è distinto subito dai concorrenti per la praticità, bontà d’uso e grande scalabilità. I suoi punti forti sono stati riscontrati nel Web, dove grazie alla funzionalità analyze può scalare in qualità, visto che sceglie a priori quali pagine dovrà scaricare e indicizzare.

Per quanto riguarda le query, non si basa sulla complessità di query booleane composte o wildcard, ma sulla semplicità, che effettivamente il web richiede, di query in AND e per frase. Altri punti a favore sono la cache e la spiegazione del punteggio ottenuto, anche queste componenti essenziali per un search engine. I punti forti per il web sono quelli deboli per il filesystem, dove la mancanza di query differenziate e i pochi formati di file supportati, non permettono ad utenti più esperti di compiere interrogazioni approfondite, per esempio su file xml.

Nutch: query

I Per compiere ricerche sull’indice precedentemente creato, è necessario installare l’applicazione JSP su Jakarta Tomcat. È sufficiente copiare il file $NUTCH_HOME/nutch-*.war e la directory Index/ (dove sono contenuti i segments), creata con uno dei modi visti precedentemente, nella cartella $TOMCAT_HOME/webapps; poi lanciare Tomcat da linea di comando, con $TOMCAT_HOME/bin/startup.sh.

Ora bisogna assicurarsi che vada ad eseguire le query sull’indice e i segmenti appena generati; Nutch li cerca nelle sottodirectory index e segments della directory specificata nella proprietà searcher.dir. Il valore di default di searcher.dir è la cartella corrente, ossia dove viene avviato Tomcat. Questo potrebbe essere conveniente durante lo sviluppo, ma più spesso non si sa dove sia installato Tomcat, quindi è preferibile utilizzare il percorso assoluto. Andiamo a modificare il file contenuto nella directory TOMCAT-HOME/webapps/nutch-*/WEB-INF/classes/ chiamato nutch-site.xml.

Ora per effettuare le query bisogna solo andare all’indirizzo http://localhost:8080/nutch-*/ e proviamo qualche ricerca:
ecco i risultati generati dal motore digitando la parola “Mignosi” (Fig. 12).

La sintassi delle interrogazioni è semplice, poiché per sottomettere una query AND si devono solo inserire nella text-box due o più termini; nelle ricerche per frase si devono usare le virgolette per racchiudere il testo da cercare. Si possono escludere documenti con termini non voluti, utilizzando il segno “-” davanti alla parola non ammessa. Un fattore da non sottovalutare è che la ricerca non è case sensitive e la punteggiatura fra il testo da cercare (www.univaq.it) è elaborata come se si effettuasse una query per frase “www univaq it”.

Come vediamo il motore funziona come i motori commerciali ma vi sono alcune differenze: anchors e explain.
Cliccando su explain per la prima pagina dei risultati, verrà visualizzata la schermata in figura (Fig. 13). Esso mostra alcuni metadati della pagina e la spiegazione del punteggio. Il punteggio è una caratteristica di Lucene che mostra tutti i fattori che contribuiscono a calcolare il punteggio di una particolare pagina (in base alla parola inserita). La pagina in questione è molto tecnica e qualcuno si chiederà perché essa viene messa in mostra quando qualunque utente non la guarderà mai.

La spiegazione sta’ nel fatto che un punto fondamentale nella campagna promossa da Nutch è la trasparenza. I suoi algoritmi per i punteggi sono open source, quindi ognuno può vederli. L’abilità di Nutch di spiegare i punteggi online serve proprio a questa trasparenza, in modo che chiunque possa capire il perché della posizione assunta da una pagina.
La pagina anchors fornisce una lista di tutti i link entranti (in formato testuale): anche questa utilità non è utile all’utente medio.

Indicizzazione intero Web

Per fare il crawling di tutto il web o anche di una sua piccola percentuale, sarebbero necessari cluster in funzione per varie settimane e un’ingente disponibilità di hardware, tuttavia il meccanismo che Nutch mette a disposizione è di semplice utilizzo e si può applicare anche a domini di alcune decine di migliaia di pagine.

Innanzitutto, una breve descrizione dei file creati da Nutch; ci sono due tipi di strutture dati:

·       db è il database contenente le informazioni sulle pagine visitate dal crawler e sui link.

·       segments mantiene le pagine scaricate e indicizzate ed è composto da altre entità.

fetchlist:contiene le Url che dovranno essere prelevate.

fetcher: è un insieme di file con le pagine scaricate.

index: è l’indice in formato Lucene.

Questa struttura è quella creata durante il processo di crawl, precedentemente visto, che con il metodo per l’intero web dovrà essere costituita passo dopo passo.

  1. Creare le directory db/, segments/ e il database vuoto:

$ mkdir segments

$ mkdir db

$ $NUTCH_HOME/bin/nutch admin db create

  1. Inserire nel db le URL da scaricare, passando al comando inject un file di testo oppure un file DMOZ (contenente URL suddivise in categorie); tali URL devono rispettare regole simili a quelle viste precedentemente che si trovano nel file $NUTCH_HOME/conf/regex-urlfilter.txt:

$ $NUTCH_HOME/bin/nutch inject db –urlfile url

  1. Con le informazioni inserite nel db, generare la lista delle pagine da scaricare (fetchlist):

$ $NUTCH_HOME/bin/nutch generate db segments

  1. In seguito, scaricare le pagine e aggiornare il database con tali informazioni; è utile dichiarare una variabile d’ambiente seg1 con il nome della sottodirectory di segments creata dalla generate:

$ seg1=`ls -d segments/2* | tail -1`

$ $NUTCH_HOME/bin/nutch fetch $seg1

$ $NUTCH_HOME/bin/nutch updatedb db $seg1

  1. Per continuare in profondità il crawling, Nutch inserisce un meccanismo molto funzionale di analisi dei link finora acceduti; praticamente con il comando analyze vengono ordinati i successivi link da prelevare in base alla loro importanza, intesa come numero di link in ingresso in rapporto a quelli in uscita (tipo PageRank):

     $ $NUTCH_HOME/bin/nutch analyze db 3

Generare la fetchlist come al passo 3), ma con la selezione di un sottoinsieme di URL, ordinate dal precedente processo di analisi.

$ $NUTCH_HOME/bin/nutch generate db segments -topN 20

Scaricare nuovamente le pagine e aggiornare il database:

$ seg2=`ls -d segments/2* | tail -1`

$ $NUTCH_HOME/bin/nutch fetch $seg2

$ $NUTCH_HOME/bin/nutch updatedb db $seg2

Ripetere il passo 5) tante volte, in base alla profondità che si vuole dare allo spidering. Per ogni iterazione si deve dichiarare una nuova variabile d’ambiente.

  1. Dopodiché costruire l’indice, ripetendo per ogni variabile d’ambiente dichiarata (contenente una sottodirectory di segments):

$ $NUTCH_HOME/bin/nutch index $seg1

….

$$NUTCH_HOME/bin/nutch index $segN

  1. Infine, Nutch ha un ottimo meccanismo d’eliminazione dei duplicati utilizzando la funzione hash MD5 per ogni URL; in altre parole, quelle che creano uno stesso risultato dopo l’applicazione di tale funzione sono pagine duplicate.

 $ $NUTCH_HOME/bin/nutch dedup segments duplicati.tmp.

Indicizzazione locale o intranet

I Prima di far partire il crawler, dobbiamo creare un semplice file di testo senza estensione nella sottocartella urls e scrivere in esso l’insieme delle url da cui il crawler inizia a raccogliere tutte le pagine dei relativi siti.

Lo strumento crawl usa un filtro per decidere quali URL andranno nel WebDB. Questo può essere usato per restringere il crawl agli url che fanno match con un certo pattern, specificato da un’espressione regolare. Quindi si deve modificare il file $NUTCH_HOME/conf/craw l-urlfilter.txt, contenente le regole imposte al crawler:

# The url filter file used by the crawl command.

# Better for intranet crawling.
# Be sure to change +^http://([a-z0-9]*\.)*apache.org/ to your domain name.
+^http://([a-z0-9]*\.)*apache.org/

# Each non-comment, non-blank line contains a regular expression
# prefixed by ‘+’ or ‘-’. The first matching pattern in the file
# determines whether a URL is included or ignored. If no pattern
# matches, the URL is ignored.

# skip file:, ftp:, & mailto: urls
-^(file|ftp|mailto):

# skip image and other suffixes we can’t yet parse
-\.(gif|GIF|jpg|JPG|ico|ICO|css|sit|eps|wmf|zip|ppt|mpg|xls|gz|rpm|tgz|mov|MOV|exe|png)$

# skip URLs containing certain characters as probable queries, etc.
-[?*!@=]

# skip URLs with slash-delimited segment that repeats 3+ times, to break loops
-.*(/.+?)/.*?\1/.*?\1/

# accept hosts in MY.DOMAIN.NAME
+^http://([a-z0-9]*\.)*NOME_DOMINIO
# skip everything else
-.

In questo esempio, lo spider deve saltare link con protocolli ftp e mailto, non deve scaricare file con formati non indicizzabili e non uscire dal dominio di partenza (è possibile aggiungere altri domini).
Ora siamo pronti per far girare il crawler lanciando il seguente script:
$ $NUTCH_HOME/bin/nutch crawl url –dir Index –depth 10
Il crawl usa gli url contenuti nel file ursl/nome_file per iniziare il suo lavoro, e mette i suoi risultati nella cartella Index. L’opzione -depth indica al crawler fino a quale profondità si vuole esplorare il sito.
Per il filesystem si passa allo script, precedentemente visto, un file con il path assoluto della directory da indicizzare proceduto dall’intestazione “file:/”; si deve, inoltre, modificare opportunamente il file $NUTCH_HOME/conf/crawl-urlfilter.txt.
Nutch ci fornisce dei comandi per analizzare il contenuto nel WebDB:
bin/nutch readdb Index/crawldb –stats.

È anche possibile analizzare ogni singolo url preso in fase di crawling, il comando è: bin/nutch readdb Index/crawldb –stats –url NOME_URL. In questo caso si può vedere che di ogni pagina viene salvato l’orario di salvataggio, ultima modifica, e altre informazioni come il punteggio della pagina, utile hai fini della visualizzazione dei risultati.
Il crawl crea tre segmenti visualizzabili nelle sotto-directory della cartella Index/segments, una per ogni ciclo generate/fetch/update. Il tool segread da un’utile resoconto di tutti i segmenti (Fig. 10).

Prerequisiti e Istallazione Nutch

I prerequisiti per l’istallazione sono:

• Ambiente java 1.4: per l’esecuzione del codice java.
• Jakarta Tomcat: come engine per l’interfaccia web di ricerca.
• Cygwin: solo se si vuole utilizzare sotto Windows. Cygwin è un interprete di shell Linux.

I codici nel pacchetto Nutch sono già compilati; è ovvio che se si vogliono effettuare delle modifiche al codice si deve ricompilare con Ant ma, è tutto già predisposto per farlo.
Dopo aver scompattato il pacchetto nutch-*.tar.gz con il comando:
$ tar –xzf nutch-*.tar.gz
si dichiara la variabile d’ambiente $NUTCH_HOME con la directory in cui abbiamo installato Nutch e tutto è pronto per farlo girare.

Informazioni Nutch

È uno dei più famosi motori di ricerca open-source oggi disponibili [17]. Benché sia un progetto molto giovane, nato nel 2003, la sua fama è dovuta essenzialmente ai suoi sviluppatori, in particolare Doug Cutting creatore di Apache Lucene, il cuore di Nutch, in quanto costituisce le sue librerie per l’indicizzazione e per la ricerca. L’obbiettivo di Nutch è di rendere disponibile la tecnologia di un motore di ricerca aumentando la trasparenza sui risultati forniti; quindi perfetto per Università e Organizzazioni di governo, dove la percezione dell’imparzialità del ranking è più importante.
Nutch è flessibile: può essere personalizzato e incorporato in altre applicazioni.

Fra i siti che utilizzano Nutch i più importanti sono http://labs.yahoo.com/demo/nutch e http://www.mozdex.com. Dato il semplice utilizzo di Nutch, la documentazione non è molto ampia (www.nutch.org/cgi-bin/twiki/), in più ci sono quattro mailing list per sviluppatori e semplici utenti.

Dopo la semplice istallazione, utilizzare e configurare Nutch [16] è immediato, vi sono tre metodi di indicizzazione: FileSystem locale, intranet e l’intero web o piccoli domini. Tutti e tre hanno differenti caratteristiche. Per esempio, il crawling del filesystem è molto più affidabile, in quanto non ci sono errori di rete e non sono necessarie copie cache dei contenuti delle pagine mentre, il crawling del web pone grandi problemi ingegneristici: da quale pagina partire, come si divide il lavoro di un insieme di crawler? ogni quanto tempo aggiornare le pagine?

Le estensioni supportate sono html, pdf e doc; sono indicizzate anche le URL e l’anchor text quindi, effettuando una query, si cerca il testo voluto anche in questi campi. Nutch può effettuare query in AND e per frase ed è possibile visualizzare: la pagina in cache, l’anchor text e la spiegazione del calcolo del rank del risultato, tutto raggiungibile dalla pagina dei match.

WordPress Themes