• Super User

    Progettare e fare un semplice motore di ricerca -Discussione

    In [url=http://www.giorgiotave.it/forum/viewtopic.php?t=6145]questo thread Low ci invita a tentare di iniziate a progettare un semplice motore di ricerca.

    Per la verità il suo è un discorso più ampio ed articolato che va ben oltre il progettare un semplice motore di ricerca.

    Low ci parla di IR e dice che siamo messi proprio male e che però qui abbiamo le condizioni per emanciparci.

    Certo c'è gente in questo ForumGT che non penso proprio debba avere problemi a creare un semplice motore di ricerca.

    Altri invece, come me, che non saprebbero nemmeno da dove partire :bho:

    Ecco, questa può essere la grande scommessa, una delle tante sfide alle quali oramai il ForumGT ci ha abituati; creiamolo assieme!

    Nominiamo un bel Gruppo di Esperti che sappia come e cosa fare ed a questi deleghiamo il compito di muovere un folto manipolo di ignari volontari, il più possibile ampio, che realizzi la cosa.

    Che ne dite?

    Si parlava ad esempio in questi giorni di realizzare un qualcosa, un [url=http://www.pandorabots.com/pandora/talk?botid=f5d922d97e345aa1]robottino da mettere sul ForumGT col quale fosse possibile dialogare, capace insomma di rispondere a query dirette degli utenti con il nostro [url=http://www.giorgiotave.it/forum/viewtopic.php?t=1864]FAQ-Glossario già esistente e debitamente sviluppato.

    Certo che bisognerebbe essere capaci di fargli riconoscere l'argomento della domanda e quindi compreso semanticamente quello, saper individuare la risposta giusta.

    Che ne dite? :yuppi:


  • Bannato Super User

    Trovo l'idea ottima, mi candido volentieri per dare una mano come "ignaro volontario".

    A disposizione.


  • User Attivo

    Se posso aiutare lato codice, contate su di me: esperienza in C++ (non tantissimo), ASP.NET e C# (molta di più).


  • User Attivo

    Io posso fare il tifo, penso di essere uno dei più ignoranti del forum in quanto a programmazione (me la gioco a dadi con Mamilu).

    Vorrei imparare però 😞


  • Bannato Super User

    E' molto interessante la proposta di Elena...

    Da parte mia sia a livello di programmazione che di analisi c'è una forte esperienza, però per linguaggi strutturati e orientati allo sviluppo di applicazioni gestionali/aziendali... contabilità - gestione delle produzione...

    Ritengo cmq che in questo forum ci siano dei ragazzi della nuova generazione (io ho 44 anni), in grado di portare avanti questo studio, ne cito alcuni e non me ne vogliano gli altri che dimentico.

    Keruoac Claudioweb Beke --- tre di cui ricordo interventi e di cui ho visto script che fanno pensare ad una ottima esperienza, anche Massimo (Tuono Rosso ) è preparatissimo... ma ce ne sono parecchi... lo stesso Simone (Rinzi).

    🙂 🙂


  • Super User

    l'idea è buona...

    mi candito per collaborare...

    avevo in mente in passato di svilupare uno spider in java e relative elaborazioni di valutazione delle pagine...ma una di quelle idee che ti prende la sera e poi ....

    con un gruppo però si può fare

    🙂


  • Super User

    Io purtroppo conosco solo il php e faccio sempre tutto solo col php 😞 è un grande problema, perchè mi mancano le conoscenze su come interaggire tra vari linguaggi.

    Inoltre ultimamente sono sempre molto impegnato e non so se riuscirò a seguire tutto, ma cerco di dare una mano come possibile.

    Qualche giorno fa mi sono fatto una chiacchierata con Low su questo argomento e trovo molto interessante questo modo di imparare tecniche di posizionamento tramite lo studio degli algoritmi che regolano i motori di ricerca.

    Ho inoltre (come credo anche claudioweb) delle buone basi matematiche (mi sono appena licenziato dalla "prestigiosa" carica di studente universitario della facoltà di Matematica :lol: ) e posso esservi d'aiuto anche da quel punto di vista.

    Intanto chiediamoci esattamente che informazioni deve prelevare lo spider dalle singole pagine web..io direi che le informazioni di base sono semplicemente il testo e l'url della pagina, anche se certamente google preleva altri dati utili, ma noi partiamo dalla base.

    Un altro dato utile può essere il tempo di generazione della pagina.
    Inoltre sarebbe utile prelevare anche il file robots.txt e analizzarlo.


  • Super User

    @kerouac3001 said:

    Intanto chiediamoci esattamente che informazioni deve prelevare lo spider dalle singole pagine web..io direi che le informazioni di base sono semplicemente il testo e l'url della pagina, anche se certamente google preleva altri dati utili, ma noi partiamo dalla base.

    Io preleverei e memorizzerei tutto il contenuto della pagina in un db, da questo poi vanno creati due altri database di vettori di termini, uno "diretto" ed uno "inverso".

    Quello inverso (chiedi un termine e vengono serviti i documenti che lo contengono) serve a identificare velocemente i documenti da ordinare in risposta ad una query.

    Quello diretto (chiedi un documento e viene restituito il vettore dei termini contenuti) serve a fare confronti per stabilirne il grado di similarità fra i documenti o fra questi e le query, le query espanse o dei vettori di argomento.
    http://www.posizionamento-web.com/database-vettori-termini.asp


  • Super User

    Bella nuova scommessa per il forum GT 🙂
    Me la cavicchio poco poco col php e di programmazione in generale ne conosco solo dei concetti puramente teorici... e a graaandi linee anche un po sfumate.

    Vorrei far notare però l'esistenza del progetto ht://Dig - http://www.htdig.org/ che potrebbe essere un punto di riferimento per estrapolare del codice o capire come implementarne altro sul nuovo progetto GT.

    Magari sono andato completamente fuori strada consigliando sta cosa, ma mi sembrava giusto dirvela 😉
    :ciauz:


  • Super User

    Consiglio la lettura di questo documento che dà una buona vista d'insieme sul tipo di strutture di dati e di algoritmi con i quali avremo a che fare.

    http://www.di.unipi.it/~grossi/AIW/SurveyGulli.pdf


  • Super User

    La mia disponibilita' c'e', ahime' nei limiti di tempo dettati dai 10 esami che mi mancano per la laurea.

    Tuonorosso, vista la tesi, su questo argomento e' sicuramente uno dei piu' preparati nel forum.

    Mettiamoci un po' tutti alla prova 🙂


  • Super User

    Se posso dare un consiglio: iniziate a progettare le parti del motore che possono sin dall'inizio aiutarvi ad estrapolare delle regole per posizionare meglio le pagine.

    Un piccolo motore che usa i term vector, il calcolo della similarità col coseno ed una semplice attribuzione di pesi con un generico tf*idf, sarebbe un buon punto di partenza.

    Il crawling può attendere, all'inizio i documenti da indicizzare magari glieli fate trovare in una directory o in un database.


  • Super User

    Ragazzi, mi spiace ma io non ho abbastanza tempo da dedicare al progetto vista la tesi, il mio lavoro (10 ore al giorno) e i miei siti da portare avanti.

    Di sicuro seguirò l'evolversi e se potrò darò una mano.

    In culo al lupo (o si dice in bocca alla balena? :bho: )

    Ciao ciao!


  • Community Manager

    @LowLevel said:

    Il crawling può attendere, all'inizio i documenti da indicizzare magari glieli fate trovare in una directory o in un database.

    Si, credo sia la soluzione migliore.

    Per database di documenti usiamo pure tutti i documenti di Gt.it, poi possiamo farci cosa ci pare. Lo mettiamo anche a disposizione degli utenti per vedere come si comportano.

    @LowLevel said:

    Un piccolo motore che usa i term vector, il calcolo della similarità col coseno ed una semplice attribuzione di pesi con un generico tf*idf, sarebbe un buon punto di partenza.

    Premetto che devo studiare molto e sto già leggendo moltissimo, dobbiamo identificare delle zone dei documenti da dividere in più parti?

    La prima cosa da studiare non è come è melgio organizzare i dati nel nostro database?

    @Mamilu said:

    Si parlava ad esempio in questi giorni di realizzare un qualcosa, un robottino da mettere sul ForumGT col quale fosse possibile dialogare, capace insomma di rispondere a query dirette degli utenti con il nostro FAQ-Glossario già esistente e debitamente sviluppato.

    Questo è un bellissimo progetto, il robotino semanticamente "intelligente".
    Con il Vector model non dovrebbe essere difficile da creare ed inoltre poi possiamo riempirlo di domande e immagazzinare i passi dell'utente per fornire risposte sempre migliori.

    Si, credo che questi due progetti ci possano aiutare a capire meglio i motori di ricerca.

    Che il nostro obiettivo è quello 😉


  • User Attivo

    Per fare un crawler che analizza i file di una directory o uno che li prende dal web dal punto di vista della programmazione i tempi sono gli stessi, quindi io partirei direttamente ad usare i socket !


  • Super User

    @Giorgiotave said:

    La prima cosa da studiare non è come è melgio organizzare i dati nel nostro database?

    la prima cosa è progettare un DB adeguato e preparare un minimo di analisi per giustificare/confermare le scelte della progettazione del DB

    l'analisi del progetto è fondamentale, partire in fretta o con il piede sbagliato moltiplica le fatiche di sviluppo successivamente


  • User Attivo

    Io stavo già facendo delle prove per conto mio con OpenWebSpider...qualche tempo fa poi ho smesso, ma ora riprendo più che volentieri...
    Stavo pensando di lanciarlo su GT e poi postare qui un dump del db (MySQL). Può essere utile come base su cui lavorare?
    Essendo OpenSource è anche modificabile a piacimento...


  • User Attivo

    mh...chi ha 5 minuti dovrebbe stilare una serie di regole antispam.
    questo permette di detrarre dal peso di una pagina il punteggio....


  • User Attivo

    Beh su quello non è difficile, io ho 1000 parametri da consigliare !


  • Super User

    Io come suggerito, ma era gia' quello che volevo fare, parto dalla fine 😄

    Analisi del testo:

    • rimozioni dei termini non significativi confrontandoli con una lista:

    • rimozione dei suffissi o stemming: permette di risalire alla radice di una parola. Permettendo di analizzare in maniera più semplice, attribuendo un significato comune, molti termini ottenuti dalla stessa radice, ad esempio elimina la distinzione tra singolari e plurali.

    • consultazione di un database di sinonimi

    • individuazione dei termini significativi: la tecnica più usata e' quella basata sulla frequenza con cui una key compare.
      A tal proposito si indica con TF (term frequency) la frequenza di tali parole nel testo. Si stabilisce un numero massimo di volte che puo' essere ripetuta una key. Le key ripetute più volte rispetto a tale valore limite tendono ad assumere significati diversi.
      Con IDF si indica del raporto il numero tatale di documenti e il numero di documenti contenenti la key (espresso in logaritmo). I termini comuni a molti documenti hanno un IDF basso.

    • assegnazione di un peso a questi termini in base a dei criteri da stabilire.

    • rappresentazione delle informazioni mediate opportune corrispondenze


    Ora ci poniamo il problema di confrontare una query di un utente e restituire un risultato valido.
    Cioe' la query deve essere rappresentata in maniera omogenea a quella usata per immagazinare le informazioni e confrontata con in dati disponibili.

    Definiamo alcuni concetti:
    Recall e' il rapporto tra il numero di documenti rilevanti individuati e il numero totale di quelli rilevanti effettivi.
    Precision e' il rapporto tra il numero di documenti rilevanti individuati e il numero totale di documente individuati.

    Un buon sistema di IR (detto anche IRS) deve massimizzare Recall e Precision.

    Ci sono diversi modi per effettuare il confronto tra la query e il documento e vederne il grado di similitudine:

    • Booleano
    • Fuzzy
    • Vettoriale
    • Cluster

    Nel modello spazio vettoriale sia la query che il
    documento sono rappresentati come vettori in uno
    spazio n-dimensionale:
    Di = (di1 di2 ... din)
    Qj = (q j1 qj2 ... qjn)

    dove dik e qjk: i valori del termine k nel
    documento Di e nella query Qj.
    I valori di un termine possono essere semplicemente
    0 o 1 per indicare la sua presenza/assenza nel
    documento/query
    Oppure possono rappresentare il peso del termine nel
    documento o la query.

    Ora si pone il problema di confrontare i due vettori.

    [alla prossima puntata... ;)]