PDA

Visualizza la versione completa : Motore di ricerca


scrivoperl
18-10-2006, 20:52
Ciao a tutti,

Sono nuovo di questo forum e vorrei il vostro cortese aiuto per risolvere una questione:
Ho trovato uno script gratuito per realizzare un motore di ricerca elementare, da installare in un mio sito per la ricerca rapida di documenti interni;
funziona tutto benissimo ed ho già apportato alcune necessarie personalizzazioni, ma ho notato che a volte fornisce risultati di ricerca incoerenti. Mi spiego:
Lo script lavora su un file di testo che funge da database, in cui ogni riga rappresenta un record;quando qualcuno fa una query,il programma semplicemente fa un matching riga per riga e restituisce i record in questo ordine. Con la conseguenza che finchè cerco "automobili fiat" e l'ultimo record inserito contiene queste parole, ottengo risultati corretti, ma se per caso aggiungo un record contenente le parole "automobili, "ford" sarà questo a comparirmi come primo risultato della ricerca...
Così dovrei escogitare un sistema che renda i risultati più coerenti:
Avrei pensato ad un mini-algoritmo per attribuire durante la ricerca,un punteggio ad ogni record in base al numero di parole chiave trovate, così da affidare la successiva formattazione dei risultati ad una funzione di elencazione in ordine decrescente;in questo modo i record con più parole chiave saranno i primi, e poi saranno elencati via via gli altri,ed è esattamente quello che voglio...

Mi suggerite un modo semplice ed efficace per aiutarmi a realizzare questo risultato?
O avete idee migliori?
Grazie in anticipo per la partecipazione

Ciao

Mich_
19-10-2006, 10:08
Non e` facile rispondere, e non credo sia la sezione adatta.
Suppongo che il programma sia scritto in Perl, e che la parte di ricerca sia un CGI

In realta` sono convinto che il lavoro lo devi fare tu, che hai a disposizione il programma. Eventualmente ti puo` dare una mano chi ha sviluppato il programma (di solito e` citato nel sorgente): se la modifica e` interessante, potrebbe essere contento di aiutarti, dato che il relativo know-hw rimane pure a lui.

Ti faccio alcune domande e considerazioni, che potrebbero aiutarti a capire meglio il problema.

Stai pensando ad una modifica del programma di indicizzazione o del programma di ricerca?

Nel primo caso (modifica all'indicizzazione), devi lavorare sull'algoritmo che genera il database: essendo un programma piuttosto complesso, e necessitando di tecniche di programmazione avanzata (quello che si chiamava "intelligenza artificiale"), devi fare un'analisi del flusso del programma, che ritengo sia fuori dagli scopi di questo forum, e puo` trovare spazio in "programmazione". Invece quando si tratta di tradurre lo schema in codice Perl, puoi tornare qui.

Nel caso invece in cui il problema e` l'algoritmo di ricerca, probabilmente la modifica e` piu` semplice, ma richiede comunque un'analisi del flusso e la sua correzione.

Buon lavoro!

scrivoperl
22-10-2006, 01:15
Innanzitutto grazie per la risposta.

Credo sia da modificare il programma di ricerca: Non mi interessa infatti l' ordine di inserimento nel database, ma l' opportuna classificazione dei risultati.

Ragionando un pò in pseudocodice, avrei bisogno di modificare la routine in questo modo:

- Confronta le prime tre parole della query di ricerca per ogni riga del database:

1- Se trovi una o più corrispondenze per tutte le tre parole attribuisci un punteggio,mettiamo 5:

2- Se trovi una o più corrispondenze per le prime due parole attribuisci 4.

3- Se trovi una o più corrispondenze solo per la prima parola attribuisci 3.

4- Se trovi una o più corrispondenze per le ultime due parole attribuisci 2.

5- Se trovi una o più corrispondenze solo per l' ultima parola attribuisci 1.

- Ordina i risultati in base al punteggio attribuito, in ordine decrescente dal 5 all'1 e formatta opportunamente in html.

La previsione dei diversi casi mi farebbe pensare ad uno switch,ma non riesco a pensare ad un modo per ottenere l'ordine decrescente per i risultati...

Pensi sempre che debba postare in Programmazione?

Loading