Newsgroup: it.comp.java
Titolo: motore di ricerca xml

Salve a tutti,
dovrei creare un semplice "motore di ricerca" che vada a cercare le parole
all'interno di un documento xml e mi restituisca le pagine che contengono
quella parola, ovviamente le pagine sono delineate da un tag opportuno..
Avete qualche idea su come realizzare il tutto? La prima cosa che mi viene
in mente e' quella di prelevare le pagine con un parser e da li andare alla
ricerca delle parole con qualche funzione sulle stringhe.. ma non c'e' un
modo migliore?
Volendo si potrebbe scrivere un foglio di stile xslt che lo faccia?
grazie, Marco

Elfoscuro wrote:

Non č che abbia tanto ben compreso lo scenario: la butto lě 
(nell'ipotesi che tu abbia un xml che ti raccolga gli url di degli html 
su cui vuoi fare la ricerca e che l'xml non sia generato ad ogni ricerca)
Per prelevare le pagine vai di xpath (io lascerei stare l'xslt se devi 
solo estrarre nodi da un xml e non trasformarlo), riguardo la ricerca 
delle occorrenze negli html se usi Lucene puoi avere un motore di 
ricerca full-featured (ma devi fargli generare un indice in anticipo)
http://jakarta.apache.org/lucene/
ciao

Ciao, provo a spiegarmi meglio..
io ho un vero e proprio "documento" xml, nel formato di AurigaDoc, non so se
conosci..
cmq ad ogni tag:
<section name="usage" label="Usage">
TESTO
<page-break />
</section>
corrisponde una pagina del mio documento.
Ora, io devo andare a ricercare delle parole all'interno del testo e nel
caso siano presenti creare un nuovo xml con le pagine che contengono la/e
parola/e da cercare.
grazie, Marco

Scusa: avevo proprio capito male...
La cosa più carina che tu possa fare è scrivere un'estensione di Lucene 
che gli consenta di indicizzare singole <section> di Aurigadoc come file 
diversi (e donarla poi al progetto Lucene o a Aurigadoc così la 
mantengono e potenziano loro). :)
Parserizzarsi l'intero aurigadoc per poi cercarci dentro le occorrenze 
della (o anche più d'una con espressioni booleane?) stringa da cercare 
ha alcune complicazioni non proprio ovvie (alcune delle quali ti 
costringeranno a modificare il parser via via che aurigadoc continua il 
suo sviluppo = che ci aggiungono tag):
* devi ignorare i tag in-line (non so se in aurigadoc si chiamano così)
se cerchi "non è" dovrai matchare anche "<b>non</b> è" e "non<br>è"
* devi ignorare/sostituire (a seconda dei casi) alcuni caratteri
se in aurigadoc c'è scritto "non\nè" devi considerarlo come "non è" (lo 
stesso per \r\n) mentre dovrai considerare "non, è" e "non  è" come "non è"
* devi stare attento alle entity (&nbsp;) e al fatto che il tuo 
aurigadoc è scritto in UNICODE (quindi, ad esempio, ci possono essere 
più caratteri che indicano uno spazio)
(queste mi vengono in mente, ma sarai mai sicuro di averle considerate 
tutte?)
inoltre alla fine della fiera avrai sviluppato un motore di ricerca che 
darà lo stesso peso ad una pagina che si intitola "Analisi matematica" 
ad una che dice (in una nota a piè di pagina) "..questo metodo si basa 
sull'analisi matematica del.."
Un'altra ipotesi, che sebbene sia più "sporca" forse è quella che più 
unisce semplicità e potenza, è quella di:
- generarti gli html a partire dall'aurigadoc
- indicizzare gli html con lucene
- usare l'indice per fare le ricerche e ricondurre gli URL degli html 
alle <section> da cui sono stati generati
Ma alla fine se generi un nuovo aurigadoc come risultato della ricerca 
non ottieni un documento poco utile? avresti l'equivalente di un libro 
fatto rilegando pagine strappati da altri testi (ad esempio, potresti 
avere link che puntano a sezioni che non fanno parte dei risultati della 
ricerca e cose del genere)
Ciao
PS: non conscevo Aurigadoc - grazie a te adesso sì :)

grazie della risposta...
sinceramente non avevo pensato a tutte le problematiche che mi hai
elencato.. ed effettivamente non sono per niente irrilevanti...
lucene non lo conosco, ora gli daro' un'occhiata..
sul fatto dell'utilita' di tutto questo.. be' guarda, mi han chiesto di
farlo per uno stage che sto facendo... secondo me lo useranno ben poco..
probabilmente la cosa piu' utile (per loro) che mi han chiesto di fare e'
stato integrare ad AurigaDoc la conversione in Tif in modo che possano
faxare facilmente i documenti xml..
ciao, Marco