Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it L'avatar di the-bit
    Registrato dal
    Feb 2005
    Messaggi
    543

    Algoritmo ricerca testo dentro DB con pertinenza?

    Buon giorno a tutti,
    vorrei realizzare un piccolo motore di ricerca per cercare, appunto, del testo all'interno del DB.
    Ho già impostato il campo come fulltext e usato la sintassi MATCH/AGAIN ma quello di cui avrei bisogno è una pertinenza del risultato trovato che sia proporzionata in base alle parole immesse e alla lunghezza del campo.
    Ad esempio, se io ho la frase "Benvenuti sul forum di HTML.it" non vorrei che, inserendo soltanto la parola "benvenuti", ottenga una pertinenza massima.
    Qualche idea?
    "To iterate is human, to recurse, divine." (R.(Heller))

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    devi decidere come fare la valutazione e poi implementarla... se per esempio volessi considerare come pertinenza il numero di caratteri trovati sul totale potresti creare con la SELECT un campo valorizzato con lunghezza stringa cercata/lunghezza stringa in cui si cerca*100 (per rappresentare in percentuale), per cui avresti che cercando "benvenuti" troveresti all'incirca:

    in "benvenuti su questo forum" -> 36%
    in "benvenuti qui" -> 69%
    in "benvenuti" -> 100%

  3. #3
    Utente di HTML.it L'avatar di the-bit
    Registrato dal
    Feb 2005
    Messaggi
    543
    Ciao,
    io ho fatto una ricerca per parole ma il calcolo della pertinenza è pressocchè come quello che hai suggerito tu.
    Il problema però è proprio questo: non voglio che scrivendo una sola parola contenuta nell'elenco io ottenga il 100% della pertinenza, ma appunto fare una proporzione sulle parole inserite e le parole effettivamente presenti.
    Ad esempio:
    "benvenuti su questo forum" (n° parole = 4)
    "benvenuti" (1 parola trovata su 4 => pertinenza = 25%)
    "benvenuti qui" (1 parola trovata su 4 e 1 sbagliata...cosa faccio?)

    Ammetto che scrivendolo qualcosa mi viene in mente.
    Ma cosa fare quando si inserisce una parole che non esiste? Pensalizzare la ricerca decrementando la pertinenza?
    Cosa suggerite?
    "To iterate is human, to recurse, divine." (R.(Heller))

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    mah... allora... ragionando per "parole" è un po' più complicata la cosa, ma il principio non cambia di molto... tornando all'esempio del numero di caratteri (perchè più semplice da gestire) tieni conto che se la parola non ci fosse non sarebbe selezionato il record per nulla!

    Se usi le lunghezze potresti avere qualcosa come (esempio dove '...' è il testo cercato)

    Codice PHP:
    SELECT testocontenuto, (CHAR_LENGTH('...')/(CHAR_LENGTH(testo)+CHAR_LENGTH(contenuto)))*100 AS pertinenza FROM tabella WHERE MATCH(titolocontenutoAGAINST('...'
    (da verificare e adattare! Non testata!!)

  5. #5
    Utente di HTML.it L'avatar di the-bit
    Registrato dal
    Feb 2005
    Messaggi
    543
    Scusami una domanda, ma non ho capito una cosa: normalmente in una funzione di ricerca nel testo non vanno cercate intere parole?
    "To iterate is human, to recurse, divine." (R.(Heller))

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    "intere parole"? non è detto... anzi, spesso sul web ci si aspettano corrispondenze anche incomplete... se p.es. cerco "forte" in un testo come "dove si trova il pianoforte" potrei avere un risultato (anche se con "bassa" pertinenza). Ma cmq è una tua scelta, non una vera "regola"!

  7. #7
    Utente di HTML.it L'avatar di the-bit
    Registrato dal
    Feb 2005
    Messaggi
    543
    Si hai ragione.
    In effetti, il tuo esempio calza e come!
    La mia è più che altro un'esigenza.
    Devo vedere come strutturare il tutto. Secondo te mettere una penalità per ogni parola sbagliata è troppo?
    "To iterate is human, to recurse, divine." (R.(Heller))

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    mmh... io - in generale, poi bisogna vedere il progetto specifico - calcolerei la pertinenza come "coincidenza" tra ricerca e oggetto, quindi come dicevo all'inizio il rapporto tra lunghezza testo cercato e lunghezza testo in cui si cerca è secondo me già un buon valore: non ti andrebbe bene questo?

  9. #9
    Utente di HTML.it L'avatar di the-bit
    Registrato dal
    Feb 2005
    Messaggi
    543
    Ciao eiyen,
    il discorso è: come intendi strutturare il "matching" tra caratteri presenti e trovati?
    Cito il tuo messaggio:
    se per esempio volessi considerare come pertinenza il numero di caratteri trovati sul totale potresti creare con la SELECT un campo valorizzato con lunghezza stringa cercata/lunghezza stringa in cui si cerca*100 (per rappresentare in percentuale),
    Se io, ad esempio, so che in "benvenuti" ci sono 2 'e' allora se io ne inserisco 4 di 'e' non aggiro il problema?
    Oppure semplicemente non ho capito io l'algoritmo che mi hai proposto.
    "To iterate is human, to recurse, divine." (R.(Heller))

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    guarda la bozza di query che ho postato... in pratica tu fai la ricerca e poi fai il rapporto tra il numero di caratteri della parola cercata e quello del testo in cui cerchi, moltiplicato 100, quindi:

    cerco:

    cosa dove calcolo

    ciao ciao a tutti 4 (ciao) / 12 (ciao a tutti) * 100 = 33,33
    ciao ciao e ciao 4 (ciao) / 11 (ciao e ciao) * 100 = 36,36
    ciao ciao 4 (ciao) / 4 (ciao) * 100 = 100

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.