Telemat Lab's home page

Copyright © 1997 Universita'di Firenze. All rights reserved.

Free license available.

Corso di Telematica
Manuale d'uso di CREAINDEX
a cura di Vincenzo Chiummariello, Giuseppe Migliarese
Revisori: Ing. Claudio Bizzarri, Prof. Franco Pirri
Ultimo aggiornamento: 8/2/1998

Indice
home page Esempi file indici  Succ.
 
 
Sommario
Questo documento illustra, in modo schematico ma esauriente, le funzionalità, il modo di utilizzo, le opzioni sulla riga di comando e le librerie dello script creaindex, realizzato per l'indicizzazione di parole-chiave all'interno di documenti HTML (presumibilmente situati su Server Web).
  Introduzione

        
  Come installare lo script Perl CREAINDEX

  Requisiti dello script Perl CREAINDEX

  Tipologie dei file creati:
 

  Come usare lo script: opzioni sulla riga di comando
 
Prima modalità:
  Seconda modalità:
  Esempi di righe di comando:
   
  Breve descrizione delle librerie associate:
   
 
Torna all'inizio

Introduzione

Nella rete Internet esistono numerosissimi Server che mettono a disposizione pagine Web di natura e contenuti molto diversi.

Per cercare di ridurre il tempo di ricerca delle informazioni che interessano, consentendo così un risparmio economico e una riduzione del traffico nei collegamenti in rete, sarebbe molto utile avere a disposizione appositi indici, disponibili sul server stesso, in cui trovare delle parole-chiave che indirizzino ai documenti HTML di interesse.

Il nostro lavoro, andando in questa direzione, è sfociato nella realizzazione dello script creaindex, avente come obiettivo finale proprio la creazione di un insieme di indici ordinati, ottenuti elaborando opportunamente i documenti HTML presenti sul sito.
 

Torna all'inizio


Come installare lo script Perl creaindex

Lo script creaindex si trova compattato, unitamente alle sue librerie.pl e al presente manuale d'uso.html, nell'archivio creaindex.tgz. In questo formato è possibile scaricarlo dalla Rete agevolmente, per poi scompattarlo (con tar o WinZip) nella directory desiderata.

Bisogna però tener presente che lo script creaindex (ma non le librerie associate) deve essere inteso come un comando Unix e pertanto deve essere posizionato in una directory tipo /usr/local/bin, visibile dal path di ricerca del sistema operativo locale. Inoltre, deve eventualmente essere eseguibile da tutti e da qualsiasi parte del sistema (ciò si ottiene usando opportunamente il comando Unix chmod).

Le librerie invece possono essere sistemate in qualsiasi directory leggibile dallo script creaindex. Per poterle usare bisogna aprire in scrittura il file creaindex con un normale editor di testo e aggiornare la variabile perl $pathlibrerie, che si trova nelle prime linee dello script, con il nuovo path assoluto (dalla radice del sistema alla directory in cui sono memorizzate). In questo modo vengono aggiornati automaticamente tutti i percorsi delle librerie, rendendole così funzionanti.

E' chiaro che, essendo il Perl un linguaggio interpretato, per poter usare lo script è necessario disporre dell'interprete perl: creaindex è stato realizzato usando il PERL 4.x per il sistema UNIX.
 

N.B: In teoria si potrebbe usare anche la versione WINPERL 4.x per sistemi Windows, a patto di:

 

Torna all'inizio


Requisiti dello script Perl creaindex

Lo script creaindex, come già detto, è stato realizzato in Perl 4.x e gira sotto il sistema UNIX; per il suo funzionamento ha necessariamente bisogno delle seguenti librerie:

 

 

Queste librerie, costruite ad hoc per creaindex, sono comunque indipendenti, nel senso che possono essere usate in diversi contesti da altri script, con la sola condizione di passare ad esse in modo corretto i parametri di funzionamento (come approfondiremo più avanti).
 

Torna all'inizio


Tipologie dei file creati

Lo script, nel suo uso più generale, partendo da una directory-radice di un sottoalbero, costruisce un pseudo-albero gemello, le cui directory rispettino la gerarchia del sottoalbero di partenza.
Nel caso la directory esaminata contenga uno o più documenti HTML (cioè con estensione html, htm o shtml, con alcune o tutte le lettere minuscole o maiuscole, ovvero non case-sensitive) nella pseudo-directory corrispondente vengono creati i vari file indici in formato testo in seguito descritti.
La corretta creazione di questi file indici richiede necessariamente l'interazione con un web-master (o con un utente in generale), almeno in una prima fase, per scegliere le parole ritenute interessanti nel contesto del sottoalbero scandito.

 
La tipologia dei file creati è qui di seguito riportata:
 

Torna all'inizio

Come usare lo script: opzioni sulla riga di comando

Lo script viene attivato digitando un'opportuna riga al prompt dei comandi.

Il generico formato della riga di comando è:
 
 

creaindex -r | -d | -f pathinput[nomefile] -o | -p pathoutput  [-b] [-g] [-i] [-v]

 

I parametri devono essere preceduti da un trattino (-) ed essere separati tra di essi e rispetto ai loro eventuali argomenti da uno spazio.
 
 

Torna all'inizio



 
Lo script funziona in due modalità differenti, in base alla presenza o meno del parametro -i nella riga di comando:
 
 

    Prima modalità di funzionamento: assenza del parametro -i

1) vengono esaminati, in base ai parametri inseriti nella riga di comando (di seguito esposti), un file HTML o una directory o un albero di directory nel percorso specificato in 'pathinput';
 
2) nel caso in cui si esamina una directory vengono ricercati in essa, ed in seguito processati, i file con estensione .html, .htm o .shtml (le estensioni ed i nomi dei file possono contenere sia lettere minuscole che maiuscole, cioè la ricerca non è case-sensitive);
 
3) infine, per ogni file esaminato vengono scritti i relativi file indici nel percorso specificato in 'pathoutput'.

 
Parametri di input: -f | -d | -r pathinput[nomefile.html]
 

Parametri di output: -o | -p pathoutput  
 Parametri funzionali: [-b] [-g] [-v]
Torna all'inizio


    Seconda modalità di funzionamento: presenza del parametro -i Vengono scandite le pseudo-directory, specificate però adesso in 'pathinput', alla ricerca dei file di indice generale in base ai quali costruire il file di indice globale che verrà scritto nella directory specificata in 'pathoutput'.
I parametri possibili sono uguali a quelli della prima modalità (tranne l'opzione -f), ma cambiano di significato, come illustrato di seguito.
    Parametri di input: -d | -r pathinput
 
 

 

Osservazioni sulla seconda modalità:   Torna all'inizio

Illustriamo ora in dettaglio il funzionamento dello script con degli esempi, partendo sempre dalla riga di comando:

 

    1)  creaindex -f /home/rkey.html -o /giuseppe/
     

    In questo caso viene esaminato il file rkey.html, che si trova nella directory di input home, e vengono creati nella directory di output giuseppe i seguenti file indici di testo:
     

Come opera lo script in questo caso?
  1. In base al nome della directory e del file HTML vengono generati i nomi da attribuire ai file.txt di output, come abbiamo già visto precedentemente.
  2. Vengono creati i file di testo per le parole interessanti (home_int.txt) e non interessanti (home_nonint.txt). Se gli stessi tipi di file esistono in una delle directory superiori (in questo caso la root del sistema) rispetto quella di output (/giuseppe/), vengono ricopiati e rinominati in quest'ultima directory, secondo un meccanismo di "ereditarietà".
  3. Il contenuto del file rkey.html viene "ripulito" dai tag del linguaggio HTML, vengono convertite le sequenze di escape ed il testo rimanente, trasformato in minuscolo e scomposto in parole (stringhe alfanumeriche), è memorizzato nell'array (vettore) 'lista_ordinata' secondo un ordine alfabetico.
  4. Vengono eliminate dal vettore 'lista_ordinata' le parole non interessanti, prese dal file 'home_nonint.txt', e le parole interessanti , prese da 'home_int.txt'. Le parole interessanti vengono memorizzate, con le relative occorrenze, nell'array 'trovate', che alla fine servirà a scrivere l'indice locale 'rkey.html_iloc.txt'. Le parole rimanenti in 'lista_ordinata' dovranno essere processate dall'utente per decidere se sono interessanti o meno. E' chiaro che, se inizialmente i file delle parole interessanti e non interessanti sono vuoti, nulla verrà eliminato dall'array 'lista ordinata', cosicchè l'utente dovrà decidere su tutte le parole inizialmente ricavate dal documento rkey.html.
  5. A questo punto vengono proposte una per una all'utente le parole rimaste nel vettore 'lista_ordinata',  presentando per ogni parola esaminata quattro possibili opzioni:

  6.  
  1. Finito l'esame delle parole vengono riscritti tutti i file di testo eventualmente modificati e l'esecuzione dello script termina.

  2.  
Torna all'inizio

    2)  creaindex -d /home/ -p /giuseppe/
     

    In questo caso viene scandita la directory home alla ricerca dei file HTML in essa contenuti, creando nella directory /giuseppe/ la pseudo-directory home_pseudo in cui verranno memorizzati, con percorso assoluto, i seguenti file d'output:

  1. Per ogni file HTML trovato nella directory di input 'home' vengono eseguiti tutti i passi descritti sopra nell'esempio 1.
  2. Il file di indice globale non viene generato in quanto l'opzione -g non è presente.

  3.  
  Torna all'inizio

    3)  creaindex -r /home/ -p /giuseppe/
     
  1. In questo caso vengono scandite tutte le directory dell'albero avente come radice la directory home alla ricerca di file HTML. Durante la scansione viene "replicato" nella directory giuseppe un pseudo-albero nel quale verranno memorizzati tutti i file di output relativi ai documenti HTML trovati e alle directory esaminate, così come descritto precedentemente nell'esempio 2 per una sola directory.
  2. Per ogni file.htm trovato vengono eseguite tutte le operazioni sopra descritte nei passi dell'esempio1.
  3. Il file di indice globale non viene generato in quanto l'opzione -g non è presente.

  4.  
  Torna all'inizio

    4)  creaindex -r /home/ -p /giuseppe/ -g
     
  1. In questo caso lo script esegue le stesse operazioni descritte precedentemente nell'esempio 3, con in più la costruzione dell'indice globale (dovuta alla presenza dell'opzione -g sulla riga di comando) realizzata in modo concomitante all'analisi dei file HTML.
  2. Il file di indice globale viene aggiornato utilizzando il file di indice generale dell'ultima directory esaminata, è memorizzato nella directory di output giuseppe e alla fine dell'elaborazione contiene tutte le parole interessanti, con le relative occorrenze e con il riferimento al documento HTML in cui sono state trovate.

  3. L'indice globale si riferisce a tutto il sottoalbero di /home/ esaminato.
     
 Torna all'inizio

    5)  creaindex -r /home/ -p /giuseppe/ -b
     
  1. Come nell'esempio 3, però non ci sarà l'interazione con l'utente, essendo presente il parametro -b.

  2. In altre parole, quando verrà esaminato un file HTML trovato in un qualsiasi punto del sottoalbero con root home, verranno eseguiti solo i passi a .. c dell'esempio 1 sopra descritto, e verranno riscritti i file testo di indice generale e di limbo.
  3. Se si fosse specificata anche l'opzione -g , sarebbe stato costruito anche l'indice globale (come spiegato nel passo b dell'esempio 4).

  4.  
  Torna all'inizio

    6)  creaindex -r /giuseppe/ -p /www/ -i
     

    In questo caso, essendo presente l'opzione -i , per la costruzione dell'indice globale non vengono utilizzati più i file HTML, ma direttamente i file di indice generale. Vengono infatti scandite la directory giuseppe e tutte le sue sottodirectory alla ricerca dei file di testo terminanti con la stringa 'indgen.txt', che sono proprio gli indici generali. Quando il programma ne trova uno, inserisce il suo contenuto nel file di indice globale, eliminando le eventuali ripetizioni e ordinando con criterio alfabetico le parole e in modo decrescente le occorrenze.
    L'indice globale viene scritto nella directory d'output www, come specificato sulla riga di comando.

    N.B: viene presa per default l'opzione -b; l'opzione -g, anche se presente, viene ignorata.  
     

Torna all'inizio

    7)  creaindex -r /home/ -i
     

    In questo caso non è stata specificata la directory di output in cui scrivere il file di indice globale, allora per default la directory di input diventa anche quella di output: in pratica, il file indiceglobale.txt verrà scritto nella root home.
    Per il resto vale quanto illustrato precedentemente nell'esempio 6.
     

Torna all'inizio

Breve descrizione delle librerie associate
 

Nozioni preliminari sulle librerie: input, output, subroutine

Ogni libreria, per svolgere correttamente la sua funzione, ha bisogno di alcuni dati forniti dall’esterno (in questo caso dallo script che la richiama) che ne costituiscono l’input. Tali dati devono essere passati necessariamente nella giusta sequenza, altrimenti la libreria potrebbe fornire risultati errati o addirittura non funzionare.

Inoltre, durante la sua esecuzione, la libreria produce alcuni dati che ne rappresentano l'output e che al termine verranno restituiti, di nuovo secondo una sequenza prestabilita, allo script chiamante.

Ogni script libreria contiene poi delle subroutine (sotto-programmi) interne che svolgono parte del lavoro o delle funzioni assegnate alla libreria stessa.

Ad esempio, la libreria calls_lib.pl contiene due subroutine interne: 'calls' e 'verifica'.

La subroutine 'verifica', come suggerisce il nome stesso, svolge il compito di verificare l’esistenza dei file di testo contenenti le parole interessanti e non interessanti ed eventualmente di ereditarli dalla prima tra le directory superiori che già li contenga o di crearli ex-novo.

La subroutine 'calls' è invece il sotto-programma principale, i cui parametri di input e di output sono gli stessi della libreria; essa definisce i nomi dei file testo da creare e, come suggerisce il nome stesso, richiama le altre librerie in base alle opzioni specificate sulla riga di comando.

Il risultato complessivo di queste due subroutine è lo svolgimento dei compiti assegnati alla libreria stessa.  L’esecuzione delle subroutine e delle librerie è comunque trasparente all’utente, che non si accorge di nulla circa la loro esecuzione, se non dei dati che vengono eventualmente visualizzati di volta in volta a video (opzione -v).

Osserviamo infine che in certi casi un subroutine, così come una libreria più in generale, può non avere output.
 

Torna all'inizio


Script CALLS_LIB.PL
 

La libreria calls_lib.pl attiva i seguenti script (librerie):

Calls_lib.pl viene attivata direttamente dallo script principale creaindex ed ha le seguenti funzioni: Input di calls_lib.pl:
  1. nome del file HTML su cui eseguire le operazioni previste.
  2. nome della pseudo-directory nella quale memorizzare i file di testo creati.
  3. opzione di input sulla riga di comando (-f,-d,-r): se è uguale a -f non si deve creare l’indice generale.
  4. l'opzione -v se presente sulla riga di comando, altrimenti una stringa vuota. Serve ad abilitare la visualizzazione dei messaggi durante l'esecuzione dello script.
  5. l’opzione -b se presente sulla riga di comando, altrimenti una stringa vuota. Serve ad evitare l’interazione con l’utente per l’aggiornamento dei file di testo.
  6. percorso librerie: viene passato direttamente come parametro interno (modificabile manualmente) dallo script chiamante per evitare all’utente di dover cambiare il percorso di tutte le librerie attivate da calls_lib.pl, nel caso sia stato cambiato il loro posto nel sistema.

  7.  
Output di calls_lib.pl:

La libreria restituisce allo script chiamante il nome assegnato al file di indice generale per permettere così, nel caso sia presente l’opzione -g, la costruzione runtime del file di indice globale. 
 

Torna all'inizio


Script CONV_HTM_LIB.PL
 

La libreria conv_htm_lib.pl viene attivata dallo script calls_lib.pl ed ha le seguenti caratteristiche:
 

Torna all'inizio

Script MANIPOLA_LIB.PL
 

La libreria manipola_lib.pl viene attivata dallo script calls_lib.pl, da cui riceve in input i seguenti parametri:

Lo scopo di manipola_lib.pl è sostanzialmente quello di eliminare dall’array associativo le parole interessanti e non interessanti contenute rispettivamente nei file nomedir_int.txt e nomedir_nonint.txt.

Inoltre le parole interessanti, trovate ed eliminate dal vettore, vengono memorizzate nel file nomefile.html_iloc.txt, creato dallo script stesso che al termine dell'esecuzione restituisce alla libreria chiamante l'array 'listaass' contenente le parole rimanenti.
 

Torna all'inizio


Script AGGIORNAIND_LIB.PL
 

La libreria aggiornaind_lib.pl viene attivata da calls_lib.pl, appena termina l'esecuzione della libreria manipola_lib.pl, solo nel caso siano rimaste delle parole nell'array associativo 'listaass' e l'utente desideri esaminarle.
Se è presente sulla riga di comando l'opzione -b, questo script non viene eseguito, ma si passa direttamente all'esecuzione dello script indgen_lib.pl (descritto più avanti).
 

Aggiornaind_lib.pl riceve come input i seguenti parametri:

La funzione di aggiornaind_lib.pl è proprio quella di sottoporre all'utente le parole dubbie rimaste e in base alle sue scelte eliminarle dal vettore associativo (passatogli come argomento), per aggiornare poi opportunamente i file testo delle parole interessanti, non interessanti e l'indice locale.
 

L'output restituito è un'array contenente le parole rimaste, cioè quelle che l'utente non ha voluto per il momento vagliare, e che verranno scritte nel file limbo dall'apposita libreria (limbogen_lib.pl).
 

Torna all'inizio


Script INDGEN_LIB.PL
 

La libreria indgen_lib.pl viene attivata da calls_lib.pl (se l'opzione di input non è -f).
 

Come parametri di input deve ricevere:

 
Lo script riceve quindi in ingresso l'array delle parole interessanti dell'ultimo file HTML esaminato, al quale aggiunge il contenuto del file indice generale già esistente (in caso contrario lo crea vuoto).
Il vettore viene poi ripulito dalle possibili ripetizioni (sicuramente presenti se lo script viene lanciato più volte). Infine si ordina l'array - alfabeticamente rispetto le parole e in modo decrescente rispetto le occorrenze - e lo si memorizza nel file di indice generale, che risulta così riscritto.
 

La libreria non ritorna nulla in output allo script chiamante.
 

Torna all'inizio


Script LIMBOGEN_LIB.PL
 

La libreria limbogen_lib.pl viene attivata da calls_lib.pl subito dopo indgen_lib.pl.
 

Il suo input è costituito da:

Lo script esegue le seguenti operazioni:
  1. Riceve in ingresso l'array delle parole dubbie dell'ultimo file HTML esaminato, a cui aggiunge il contenuto del file limbo esistente.
  2. Elimina da questo array le parole che si trovano nell'indice generale e nel file delle parole non interessanti.
  3. Ordina alfabeticamente le parole e in modo decrescente le occorrenze nell'array, aggiornando il file limbo.

  4.  
La libreria non restituisce nulla in output allo script chiamante.

 
Torna all'inizio


Script GLOBALE_LIB.PL
 

La libreria globale_lib.pl viene richiamata dallo script principale creaindex quando sulla riga di comando è presente l'opzione -g oppure l'opzione -i.
 

I parametri di input passati sono:

Lo scopo dello script è, come suggerisce il suo nome, quello di scrivere l'indice globale e per far ciò svolge i seguenti passi: La libreria non ritorna nulla in output allo script chiamante.
 

Torna all'inizio


Telemat Lab's home page                                                          Explore the TELEMAT Site !!!!

home page Esempi file indici  Succ.