• User Attivo

    Indicizzare 1000000 di pagine mi sembra vada più che bene per i nostri studi...
    O no?!?


  • Super User

    Fare un motore di ricerca e' semplicissimo, potrebbe avere anche 2 o 3 algoritmi di sort e via.

    Spiegare come è stato fatto ai forumisti rendendoli partecipi del suo funzionamento ed innalzandone il livello conoscitivo sarà interessantissimo 😉


  • Super User

    Eccoci qui. 🙂

    Cominciamo per ora l'approfondimento del IR in questo thread, per evitare dispersioni, poi appena sarà più sviluppato ne creeremo uno apposito.

    Come abbiamo già più volte scritto, il fine è quello di alzare il più possibile il livello della parte attiva di questo ForumGT, ricordando che il livello del Forum stesso non è dato dalle domande dei forumisti ma dalle risposte.

    Stà a noi ora fare il possibile affinchè si cerchi di rendere accessibile a quella parte il funzionamento dei MDR.


    ** Modello Vettoriale di Reperimento Informazioni**
    Il [url=http://www.hray.com/5264/math.htm]Modello Vettoriale di Reperimento delle Informazioni è un potente strumento per la realizzazione del Motore di ricerca.

    Questa discussione cerca di fornire un'introduzione ai concetti matematici richiesti per capire il vector model ed intende mostrare l'applicazione di quei concetti nello sviluppo del modello stesso.

    L'aritmetica con cui "funzionano" i computers è a base 2
    Le informazioni (numeri, parole ecc .) che vengono elaborate o memorizzate in un computer sono codificate come sequenze di bit.
    Un bit (binary digit) è la più piccola unità di informazione e può prendere i valori : 0 oppure 1 .

    Un byte è una sequenza di 2 ³ = 8 bit . Per esempio: 00110101 è il possibile contenuto di un byte.

    Il Kb (chilobyte) corrisponde a image bytes, cioè 1024 bytes.
    Il Mb (megabyte) corrisponde a image Kb .
    Il Gb (gigabyte) corrisponde a image Mb .

    **Logaritmi: log(N) **
    Il logaritmo è la prima funzione matematica che dobbiamo capire perché il Modello Vettoriale ha equazioni logaritmiche (N/ni).
    **Se non conosciamo cos?è un logaritmo non possiamo capire il concetto del Modello Vettoriale. **

    In primo luogo, che cosa è una funzione matematica? Nella sua forma più semplice, una funzione è un calcolo che prende un numero come input, effettua un calcolo su quell'input e restituisce il valore del calcolo.
    Consideriamo la funzione quadrata, "sq".

    • sq(2) restituisce 4.
    • sq(9) restituisce 81.
      Così il sq(N) significa restituire il valore di N * N.

    Seguendo questa linea di pensiero, il log (2) significa restituire il logaritmo del numero 2.
    Il log (N) significa restituire il valore del logaritmo della variabile N, qualunque valore N possa avere.

    Conosciamo ora come quadrare un numero, ma che cosa è la funzione di logaritmo?
    Come è calcolato?

    Si chiama logaritmo in base a di b l'unica soluzione dell'equazione esponenziale elementare.

    Supponiamo di dover risolvere un'equazione esponenziale ax=b :
    :
    ? se a e b si scrivono come potenze (razionali) della stessa base, si eguagliano gli esponenti :

    2x* =8 --> 2x = 23 --> x=3 *

    ? se a e b non si scrivono come potenze (razionali) della stessa base, le soluzioni si scrivono sotto forma di logaritmi : 2x = 8 --> x=log2 8

    Il logaritmo risulta essere l'operazione inversa dell'esponenziale.

    Senza studiare troppo il senso del termine, possiamo giocare un pò con Google e vedere le risposte che restituisce per la funzione di logaritmo. Google ha un calcolatore incorporato che utilizziamo per questa ricerca.
    Digitiamo "log 0,5" (senza le virgolette) in Google e otteniamo -0,301029996.
    Proviamo con "log 95" ed otteniamo 1,97772361.
    Possiamo tentarne altri; qual è il log 6666?

    Questi numeri a caso ci danno un?idea del sistema, ma se realizziamo una tabella organizzata di numeri, questa ci rivela la vera traccia:

    N -->log ( N )
    1 --> 0
    10 --> 1
    100 --> 2
    1000 --> 3
    10000 --> 4

    Base 10 alla potenza del* log (N)*=N.
    Quindi, se abbiamo un numero (10) e prendiamo il suo logaritmo e innalziamo 10 a quella potenza, otteniamo di nuovo il nostro numero originale:

    • 10 alla prima =10
    • 10 alla seconda = 100
    • 10 alla terza = 1.000
    • 10 alla quarta = 10.000

    La tabella indica che la funzione di logaritmo è utile nei numeri compressi molto grandi fino ai formati maneggevoli; questo è un calcolo di riduzione in "ordine di grandezza?.
    Inoltre, notiamo che il log(1) è uguale a zero.

    Ripetiamo facendo un altro esempio.

    la potenza abbiamo visto è il prodotto di fattori uguali alla base tante volte quanto indicato dall'esponente.
    Per esempio:
    image
    5 ³ = 125

    La potenza ammette due tipi diversi di operazione inversa : la radice ed il logaritmo.

    Radici.
    Consideriamo la potenza 5 ³ = 125 . Possiamo allora definire l' "operazione" di radice a indice 3 (o radice cubica) :

    image

    Logaritmi.
    Esiste un altro modo di definire l'operazione inversa dell'elevamento a potenza : il logaritmo.

    Consideriamo ancora la potenza 5 ³ = 125 . Chiediamoci : qual'è il numero per cui elevare la base 5 per ottenere 125 ? Ovviamente questo numero è 3 .

    Abbiamo così definito il concetto di logaritmo. Scriviamo allora :
    image

    dove il numero 5 scritto in basso a destra del simbolo *log * si chiama base ed il numero di cui si fa il logaritmo si chiama argomento.

    La definizione di logaritmo è allora :

    Il logaritmo di un numero secondo una certa base è quel numero per cui si deve elevare quella base per ottenere il numero dato.

    La caratteristica più interessante della funzione di logaritmo è che i log dei valori fra 0 e 1 sono numeri negativi.
    Per esempio, log (0,5) = -0,301029996.
    Molte volte vedremo* -log(x)* in un'equazione.

    Se il valore di quel segno è negativo, ora sappiamo dunque che la X è una variabile che varia da zero ad uno.

    Così ora se vediamo il log (N) in un'equazione, abbiamo un?idea di che cosa significhi e con esso possiamo valutare alcuni valori.

    Un logaritmo misura quindi l'ordine di grandezza di un numero N.
    E? solo un più piccolo numero che sostituisce quello originale.

    E nel caso speciale dove la N è uno, allora il log(N) sarà zero.


    Un ardito Gruppo di Geniacci ha già iniziato a tramare per realizzare un semplice motore di ricerca.

    Passo passo vi terrò informati sugli sviluppi, cercando di spiegare cosa hanno realizzato e perchè i nostri eroi.

    Oggi abbiamo visto i logaritmi.

    La prossima puntata studieremo i coseni. :ciauz:


  • Super User

    Il coseno
    Il coseno è una funzione trigonometrica con alcune proprietà che sono molto utili nell'analizzare i vettori. [vector model]

    Stiamo raffigurando i** documenti** della nostra raccolta del nostro motore come vettori.
    Inoltre raffiguriamo la **query **dell'utente come vettore.
    Se potessimo confrontare in qualche modo il vettore di domanda ai vettori di ciascuno dei documenti, potremmo dire quale dei documenti sia "il più vicino" alla domanda.
    Ciò ci darebbe una classifica per la nostra ricerca.

    Dunque, come classificare la prossimità dei vettori?

    Una via da considerare (un pò complicata) è misurare l'angolo fra loro.
    Se l'angolo è molto piccolo, significa che i due vettori sono abbastanza vicini. Se l'angolo è grande, allora non lo sono.
    Facile.

    Tuttavia, se desideriamo usare la matematica occupandoci di angoli, otteniamo numeri-gradi bizzarri.
    Gli angoli non sono difficili da manipolare se sono predisposti per variare in modo regolare ... come fra uno e zero per esempio.

    **0 **potrebbe significare "completamente differente" e 1 potrebbe significare "identico" con una gamma completa di valori (somiglianze) fra 0 e 1.

    Ora, se facciamo una tabella di alcuni angoli e dei loro coseni, possiamo vedere come il coseno semplifica gli angoli:

    Angolo A --> Coseno (A)
    0° --> 1
    30° --> .86
    45° --> .70
    60° --> .5
    90° --> 0

    La tabella indica che quando l'angolo fra due vettori è molto piccolo, il coseno è prossimo a 1.
    Effettivamente, se i due vettori combinano perfettamente, il coseno è uguale a 1.
    Nella nostra applicazione IR, quello sarebbe una accostazione perfetta fra il vettore di domanda e un vettore del documento. 🙂

    Mentre l'angolo aumenta, il coseno (il grado di somiglianza fra i vettori) diminuisce fino a che non raggiunge zero quando i vettori sono a 90 gradi.
    Guardiamo l?immagine:
    imageimageimage
    In un sistema organizzato in cui ogni coordinata ha avuto la sua dimensione, quella potrebbe essere una misura approssimativa di somiglianza. Tuttavia per il nostro modello di vettore desideriamo stimare diverse coordinate (termini di ricerca) anche usando sistemi diversi; dobbiamo quindi rendere il sistema un po? più complicato 🙂
    E lo faremo presto!

    **Per ora, vediamo che il coseno è una funzione che misura un rapporto fra due vettori. **

    Il coseno dell'angolo fra loro è prossimo a UNO se i vettori convergono ed è prossimo a ZERO se l?angolo fra i vettori si avvicina a novanta gradi.


    Abbiamo già visto che usando la funzione matematica dei logaritmi log (N) possiamo suddividere valori fra 0 e 1;

    • log (1) = 0
    • -log(x) [i log dei valori fra 0 e 1 sono numeri negativi, per esempio, log (0,5) = -0,301029996. ] Se il valore di quel segno è negativo, sappiamo che la X è una variabile che varia da zero ad uno.
      Nel caso speciale log (N) dove il valore (N) è uno, allora il log(N) sarà zero.

    Sappiamo ora anche che con l'uso dei coseni possiamo misurare un rapporto fra due vettori; il coseno dell'angolo fra loro è:

    • prossimo a UNO se i vettori convergono.

    • prossimo a ZERO se l?angolo fra i vettori si avvicina a novanta gradi.

    La prossima puntata studieremo la Sommatoria
    image

    :ciauz:


  • User Attivo

    Ciao a tutti ragazzi, progetto davvero interessante :vai:

    mi sarebbe piaciuto potermi unire al gruppo, ma non posso farne neanche richiesta perchè sono troppo impegnato. 😞

    preparare il meccanismo base credo sia la cosa più complicata, ma nessuno si è posto il problema di come individuare il testo illeggibile

    Non sottovalutate questo aspetto, ci sono dichiarazioni nei fogli di stile complicatissime

    es: UL#categoria_destra LI A.gruppo

    associare del testo a queste dichiarazioni è davvero difficle. Per non parlere dei livelli a diversi z-index e/o posizionati fuori dalla visibilità.

    Insomma, sebbene per ora non sia una cosa fondamentale, è bene che qualcuno ci inizi a lavorare perchè non mi sembra una cosa semplice.

    In bocca al lupo a tutti! :ciauz:


  • Bannato User

    Mi posso unire anche io ??
    Io avevo gia incominciato qualcosa da solo per me
    Ho utilizzato openwebspider leggermente modificato

    Sto usando mysql come db anche se non mi sembra il massimo Io sono arrivato a spiderizzare qualcosa come 500 mila siti ed il db supera i 2 giga per questo dico che non va troppo bene perchè appena mi fa una query complessa muore li e arriva anche a 2 minuti

    Io sto usando lavorando in una sorta di logica fuzzy (anche se la trovo parecchio inadatta per come ho strutturato io) e dove attribuisco al numero dei caratteri della pagina un valore massimo di 1 la numero decimale delle lettere presenti e lo divido per il numero fuzzy degli spazi e cosi ottengo una sorta di coefficiente che mi da la media di distanza tra parola e parola . A questa guardo quanti spazi ho tra una frase mia e quella che è stata cercata dall'utente. Poi provo a suggerire con la funzione levenshtein in php 5 eventuali possibilità di suggerimento (ma anche questo lo devo ottimizzare perche troppo lento - salvo i valori in un array e poi li estraggo ma non mi piace) . Ora mi sono fatto un bot in php che segue gli url nelle pagine (avevo pensato a sto bot per far creare online la mappa di google proprio per risolvere il problema dei siti dinamici e dover far mettere a mano agli utenti i singoli link) e devo dire che funziona davvero bene . Il limite è il timeout di esecuzione che ha i limiti di apache

    A me la cosa interessa tantissimo
    se mi posso aggregare mi farebbe piacere

    PS : io so programmare in php e mysql


  • Super User

    Il nostro obiettivo è: > - creare un piccolo Gruppo molto preparato [ i Geniacci] e coordinato da un Responsabile che realizzino un semplice motore di ricercaal fine di comprendere il funzionamento dell' IR e del vector model. [questo Gruppo è già partito]

    • coinvolgere la parte più attiva del ForumGT nella discussione e nell'approfondimento di ciò che il Gruppo stà creando e metterlo in condizioni di comprendere il Progetto spiegando loro come è stato fatto, rendendoli partecipi del suo funzionamento ed innalzandone il livello conoscitivo

    Caro Gasmor 🙂
    Non ho capito perchè dobbiamo assolutamente porci il problema di come individuare il testo illeggibile. Il nostro obiettivo è ben altro che individuare il testo illeggibile.

    Caro Cached, certo che ti puoi unire, sei il benvenuto 🙂
    Per la realizzazione del semplice motore di ricerca, come puoi immaginare occorre un Gruppo molto affiatato, ed i nostri Geniacci sono già all'opera ;)... vi terrò costantemente informati.
    Per quanto riguarda invece il discutere ed approfondire l'argomento del funzionamento dei MDR, ogni contributo è il benvenuto.

    Ovviamente qui approfondiamo *questa *esperienza e potrebbe risultare fuorviante aprire discussioni sulle proprie esperienze personali, per le quali ti consiglio eventualmente di aprire un altro thread.

    :ciauz:


  • Bannato User

    @Mamilu said:

    Ovviamente qui approfondiamo *questa *esperienza e potrebbe risultare fuorviante aprire discussioni sulle proprie esperienze personali, per le quali ti consiglio eventualmente di aprire un altro thread.

    :ciauz:

    Complimenti per l'avatar (sei carina 🙂 ) cmq certo che allora mi aggrego
    Se mi dite da dove posso iniziare a trovare o mettere materiale ..


  • Super User

    Caro Cached, nell'attesa di valutare assieme la Sigma, potresti iniziare col commentare i precedenti post relativi ai logaritmi e coseni e la loro possibile applicabilità nell' IR e vector model 😄


  • User Attivo

    Mamilu, secondo me rischiate di complicare gli aspetti piu' semplici di questo progetto.

    I passaggi per un motore sono abbastanza comuni.

    1. si spiderizzano le pagine seguendo certi schemi.
    2. si decide cosa salvare in db e cosa no di quanto si e' spiderizzato
    3. si stabilisce come e dove archiviare quanto salvato
    4. si implementano gli algoritmi che "lavorano" solo sul contenuto delle pagine, posizionamento-distribuzione delle key, semantica, spam, ecc ecc
    5. si implementano gli algoritmi che "lavorano" sulle correlazioni esterne, link, duplicazione, dimensione ed estensione sito, ecc ecc
    6. si accorpa il tutto e si fa un sort in base alle query.

    Ognuno di questi punti puo' essere ampliato e corretto all'infinito.
    Per capirci che senso avrebbe scegliere le migliori pagine che rispondono ad una data query se a monte non ho stabilito quali potrebbero essere i migliori siti da spiderizzare che potrebbero soddisfare le query?

    E di questi migliori siti quante pagine spiderizzo per ogni sito?

    Domanda pratica, si stabilisce di spiderizzare 1.000.000 di pagine.
    Ma 10 pagine per 100.000 siti, 1 pagina per 1.000.000 di siti, a caso o come, in base a quali paramentri?

    Capisci cosa intendo?


    Ora tu mi dirai qui che lo scopo e prendere un tot di documenti anche in modo casuale per lavorare sull'aspetto interessantissimo di come estrapolare quelli che meglio rispondono a determinate query.

    Ma in questo caso si dovrebbe parlare di motore di ricerca interno, per intranet.

    Ok, in questo caso la tua intranet e' data da 5 sole pagine il cui contenuto e':

    Il cane correva nel prato erboso e fresco di rugiada.
    Correva come un cane, che cane come corridore!
    Il gatto ed il cane correvano.
    Corre il cane.
    Cane.

    5 semplici pagine di una riga ognuna. Ignoriamo il codice.

    Per la query cane, quale delle 5 metti al primo posto?

    La prima e' bella ma cane appare 1 volta su un tot di parole, la seconda appare 2 volte, ma si parla di "come un cane"... la terza magari, ma i soggetti sono 2 e cane non e' tra i primi termini, la terza perfetta ma corta, la quinta dice poco, una sola parola che senso ha per un utente, lui cerca cane e trova cane... ma se sbagli algoritmo sara' al primo posto.

    Ci vorranno tanti e tanti algoritmi per stabilire l'ordine, ed ogni algoritmo dovra' essere ben soppesato. Per farlo ci sono particolari tecniche di riscontro in base a come si comportono gli utenti, e 1000 altri modi.

    Modi statici e modi dinamici.


    Insomma e' giusto perseguire questo obbiettivo perche' ha un bellissimo scopo, quello di imparare o approfondire, ma fregatevene di seni, coseni, e formule matematiche, almeno in questa prima fase di approccio.

    Le cose migliori sono quelle semplici ed immediate, un problema e via con la soluzione, poco spazio e via con un hd nuovo.

    I problemi che sottolineano Cached e Gasmor sono alcuni di tantissimi altri problemi da affrontare. Ma basta un solo problema mal risolto per inficiare tutto.

    Finisco raccontano un anneddoto. 2 anni un dirigente di una multinazionale russa, o di quelle parti li', mi chise di mettere giu' un progetto per fare un buon motore per il loro mercato. Gli chiesi in quanto tempo lo voleva sviluppato e quanti soldi aveva. Mi parlo' di almeno 100 ml. Io pensai di euro e gli dissi che era fattibile ma non con meno di 3 anni di duro lavoro.

    La cifra poi scoprii essere in lire. Mai riso tanto. C'e' un limite anche al ridicolo.


  • Super User

    Insomma e' giusto perseguire questo obbiettivo perche' ha un bellissimo scopo, quello di imparare o approfondire, ma fregatevene di seni, coseni, e formule matematiche, almeno in questa prima fase di approccio.

    Le cose migliori sono quelle semplici ed immediate, un problema e via con la soluzione, poco spazio e via con un hd nuovo.

    Il problema caro Agoago, credo siano le macumbe ed i metodi profetici alla Nostradamus 😄
    O ci abbandoniamo a quelli [ma mi sembra si siano scelti altri metodi da tempo] o dimostriamo ciò che diciamo.

    E' quindi evidente che non è necessario studiare Coseni, Algoritmi ecc., ma è indispensabile sapere di cosa stiamo parlando ed indicare da dove provengono le apparenti alchimie magiche che stiamo per trattare.

    L'alternativa è enunciare probabili fanfaronate e pretendere di essere creduti sulla parola.
    A nessuno di noi piace questo. Vero?

    Accarezzati dal dolce brusio di sottofondo dei nostri Geniacci raccolti in conclave che stanno tramando i primi passi del nostro Semplice Motore di Ricerca...al fine di essere in grado di comprenderne i misteriosi meccanismi...procediamo quindi con la:
    Sommatoria.

    Ora cerchiamo di capire l'operatore di sommatoria, pronunciato "sigma."
    image

    Il sigma è un operatore, proprio come un segno di moltiplicazione o un segno di divisione.
    Dice di aggiungere insieme una serie di numeri. Quando vediamo un segno di moltiplicazione, sappiamo che moltiplicheremo quei numeri.
    Quando vediamo una sigma, sappiamo che aggiungeremo insieme una serie di numeri.

    Sia data la successione image che è come dire la "sequenza" di numeri image . Con essa possiamo costruire la seguente successione detta delle somme parziali :
    image

    La successione image (i puntini significano che si va all'infinito) così ottenuta si chiama serie e si indica con il simbolo :
    image

    ed equivale alla somma di tutti i termini della successione da cui siamo partiti, ovvero :
    image

    Ci sono alcune variabili connesse con quell'espressione che dobbiamo conoscere.
    image
    Le variabili determinano quanti termini vengono aggiunti e quali membri della serie sono inclusi:

      • K* variabile è l'indice della sommatoria.. I valori di* K* si allontanano da 1 a n nell'espressione qui sopra.
    • Le* a *sono i termini che vengono aggiunti insieme. Possono anche essere espressioni molto complesse, ma sono sempre membri di una serie e vengono sempre sommati insieme.

    • Il numero 1 è il limite più basso della sommatoria. Quello ci dice da quale termine iniziare.

    • La* n* variabile ci dice quando arrestarci, il limite superiore della sommatoria.

    Quando vediamo un'espressione come quella, la traduzione sarebbe "**prodotto della sommatoria da k uguali 1 a k uguali n di *a *sub k"
    **
    Così, una sigma significa " ottieni la somma di questa serie" e quando vediamo un sigma, guardiamo solo quali sono i termini e quindi sommiamoli insieme.
    Li aggiungeremo sempre insieme; questo è ciò che significa.

    La prossima volta studieremo il **Dot product ** 😄


  • User Attivo

    Mamilu scrive:

    "L'alternativa è enunciare probabili fanfaronate e pretendere di essere creduti sulla parola.
    A nessuno di noi piace questo. Vero?"

    Beh, quando chiunque di noi dice qualcosa credo pretenda in coscienza (e non da meno gli faccia piacere) essere creduto sulla parola, sempre che abbia stima della propria parola e soprattutto sia in buona fede.

    Quando poi, a fronte di prove contrarie, quello che dice e' smentito allora mi sembra il minimo che si ricreda e riveda il tutto, partendo da capo.

    Nella matematica stessa ci sono teoremi teorizzati e non dimostrati che aspettano da anni una dimostrazione, come la congettura di Riemann, ma non per questo quando Riemann la formulo' pensava di dire fanfaronate e soprattutto, sono certo, che gli avrebbe fatto piacere essere creduto sulla parola, in attesa che qualcuno nei secoli futuri potesse o smentirlo o avvalolarlo.

    Cosi' come quando dico che (non puoi creare anche il piu' semplici dei motori), se non disponi di sufficiente banda, forza hardware, ore lavoro e cultura informatica, non serve a nulla approfondire l'aspetto matematico (almeno in questa prima fase di approccio), mi fa piacere che mi si creda sulla parola, salvo ovviamente una logica e ferrea dimostrazione contraria.

    Come e' normale, da che mondo e' mondo, sia. Se leggo che oggi G ha cambiato le proprie serp credo cosa leggo partendo dal presupposto che nessun galantuomo scriva pubblicamente per fuorviare i colleghi.

    Poi se ho tempo e voglia certifico personalmente se e' vera la cosa, se non posso o voglio o non trovo smentite mi fido, anche fosse solo per principio.


    Per esempio spesso nei forum si legge post di chi domanda quale estensione usare per le proprie pagine, se htm, html, asp, php ecc ecc

    Che strano dubbio, beh se hai un dubbio non ci sono dubbi, ed allora invece di chiamare una pagina pagina.htm o pagina.php ecc ecc perche' piu' semplicemente non la si nomina pagina?

    Senza estensione.

    Un ottima estensione e' la NON estensione.

    Potrei dimostrarlo o forse no, forse e' solo un ipotesi, forse, ma nel momento in cui l'affermo, metto in gioco pubblicamente (come chiunque di noi scriva qualcosa condiviso con gli altri) la mia reputazione e credibilita' di informatico.

    E spero che mi si creda fino ovviamente a prova contraria (e che ben venga, almeno non mi danno con ennesimi test su test).

    E faccio sigma per sommare sequenze di numeri, positivi e negativi e senza nessuna correlazione tra di loro, grazie ad un buon e vecchio foglio elettronico o grazie alle formule delle librerie dei linguaggi di programmazione.

    Fidandomi per principio del risultato che mi da il computer, perche' parto dal presupposto che chi ha creato hardware e software l'abbia fatto con le migliori intenzioni e non per fregarmi.

    Ed anche se mi fregasse, beh sarei in buona compagnia, la vostra.


  • User Attivo

    Cosi' come quando dico che (non puoi creare anche il piu' semplici dei motori), se non disponi di sufficiente banda, forza hardware, ore lavoro e cultura informatica, non serve a nulla approfondire l'aspetto matematico (almeno in questa prima fase di approccio), mi fa piacere che mi si creda sulla parola, salvo ovviamente una logica e ferrea dimostrazione contraria.

    Quoto e aggiungo: quanti di voi conoscono bene il c ?
    Per bene non intendo condizioni e cicli che hanno tutti i linguaggi, piuttosto puntatori stringhe alberi grafi ordinamento fusione ecc ecc..

    Creare un motore di ricerca in un linguaggio diverso dal c (per lo meno lo spider) è a mio parere da pazzi, a meno che non si disponga di un clister di 15-20 mila computer chiaramente..
    Ho finito da poco di convertire alcuni tools in c su server linux, la differenza nei tempi è madornale rispetto a perl o altri linguaggi interpretati.
    Partendo con poche risorse è basilare ottimizzare quelle che si hanno..


  • Super User

    Leggendo agoago ed uMoR mi viene il dubbio che esista un gigantesco equivoco di fondo sul tipo di motore di ricerca che si intende realizzare e sui motivi e finalità per cui viene progettato.

    Ad esempio si parla di necessità di banda, ma a che servirebbe la banda se venisse deciso che il motore non dovrà operare in rete?

    Qui tutti danno per scontato che "motore di ricerca" equivalga a "motore di ricerca dedicato al Web ed ad un uso pubblico". Perché si sta dando per scontato questa cosa?

    Esistono decine di tipi diversi di motori di ricerca e sono certo che il gruppo di lavoro che si è creato ne progetterà uno tenendo conto degli obiettivi principali e delle risorse disponibili.

    Volendo escludere a priori che l'obiettivo di agoago ed uMoR sia quello di criticare per partito preso, sono certo che arrivando a comprendere le finalità del progetto anche loro potranno concludere che non ha senso andare da un cineamatore dilettante per dirgli di piantarla di giocare con la cinepresa visto che non possiede gli stessi mezzi di Cinecittà o Hollywood.

    Fategli fare pratica, a quel cineamatore: finché quello che ottiene risponde alle proprie esigenze, il suo obiettivo è raggiunto. E senza aver usato effetti speciali né giganteschi teatri di posa.


  • User Attivo

    sono certo che arrivando a comprendere le finalità del progetto anche loro potranno concludere che non ha senso andare da un cineamatore dilettante per dirgli di piantarla di giocare con la cinepresa visto che non possiede gli stessi mezzi di Cinecittà o Hollywood.

    Hai ragione e comprendo benissimo quel che dici nulla da ridire.
    E' un bug della mia mentalità quella di pensare in grande, mi sono allontanato da quel che era l'obiettivo iniziale, un semplice motore di ricerca come dice il thread stesso.

    Io credo però che anche il più semplice fra i motori di ricerca sia complesso da realizzare, perchè come diceva agoago basta un minimo accorgimento perchè tutto funzioni male.

    Escludiamo allora il problema banda, escludiamo il problema potenza di calcolo e ottimizzazione delle risorse, i risultati in qualche modo devono pur essere presentati.
    Quoto agoago per spiegarmi:

    Ok, in questo caso la tua intranet e' data da 5 sole pagine il cui contenuto e':

    Il cane correva nel prato erboso e fresco di rugiada.
    Correva come un cane, che cane come corridore!
    Il gatto ed il cane correvano.
    Corre il cane.
    Cane.

    5 semplici pagine di una riga ognuna. Ignoriamo il codice.

    Per la query cane, quale delle 5 metti al primo posto?

    La mia non è una contestazione, per carità.
    Vedo (forse erroneamente) impossibile creare un motore di ricerca "semplice", in quanto anche il più "semplice" è complesso.


  • User Attivo

    potranno concludere che non ha senso andare da un cineamatore dilettante per dirgli di piantarla di giocare con la cinepresa visto che non possiede gli stessi mezzi di Cinecittà o Hollywood

    Aggiungo:
    l'intento dei miei post (e credo anche quelli di ago) non è di far morire un progetto ma semplicemente di dare un punto di vista.

    In questo caso credo che il messaggio sia chiaro e non offensivo:
    ci sono tantissimi fattori da tenere presente nella creazione di un motore di ricerca, semplice o meno che sia.

    Saranno pure estremi i casi riportati da me ed agoago ma credo che siano di aiuto a tutti per farsi un'idea, poi in base alle problematiche evidenziate si può scegliere il miglior percorso da seguire nella creazione del motore di ricerca.


  • Super User

    @uMoR said:

    Vedo (forse erroneamente) impossibile creare un motore di ricerca "semplice", in quanto anche il più "semplice" è complesso.

    si si... il più semplice è complesso....

    hai ragione come hai ragione nel proporre altre problematiche quali il linguaggio di programmazione da adottare o eventuali tecniche...

    ma è anche vero che in questo momento l'obiettivo non è la performance ma raggiungere un risultato...sprecando magari parzialmente banda o tempo...

    ... a risultati raggiunti SE vale la pena potrà essere presa in considerazione l'idea di ottimizzare/riscrivere/riprogettare/modificare il semplice motore di ricerca

    non è ora si cercherà di progettarlo male, assolutamente.. ma come si fa a sviluppare al meglio una cosa che non si conosce minimamente?

    vediamo cosa verrà partorito 🙂


  • Super User

    l'intento dei miei post (e credo anche quelli di ago) non è di far morire un progetto ma semplicemente di dare un punto di vista.
    In questo caso credo che il messaggio sia chiaro e non offensivo..

    Caro uMoR,
    il tuo messaggio mi sembra per nulla offensivo ma tutt'altro che chiaro. 😄

    Essendo l'obiettivo, come hai appena ricordato, creare un semplice motore di ricerca al solo fine di consentirne lo studio prima di tutto ai realizzatori e quindi al Forum, riportare casi e difficoltà estremi che nulla hanno a che vedere con questo progetto NON mi sembra di aiuto, e come Low [e come ha appena confermato Rinzi 😉 ] sono certa che il bel Gruppo di lavoro che si è creato stia progettando un semplice motore tenendo conto di questi obiettivi principali e delle risorse disponibili.

    Andiamo dunque avanti senza indugio e passiamo come promesso a trattare del:

    **Dot product - Prodotto scalare **

    Bene, ci siamo, è ora di allacciare le nostre cinture di sicurezza!

    Questa sezione è un pò una sfida, ma è l'essenza di come funziona il modello vettoriale.

    Descriviamo ora un altro operatore matematico.

    Quando i matematici (o fisici, o assistenti tecnici, o bibliotecari) desiderano moltiplicare insieme due vettori, l'unico sistema è usare un operatore denominato "Prodotto scalare".

    Il relativo simbolo è un puntino grasso: ?

    Se avessimo due vettori A e B e desiderassimo moltiplicarli insieme, scriveremmo A ? B.
    E pronunceremo quell'espressione "A Prodotto scalare B".

    Il risultato di una operazione di Prodotto scalare è uno scalare (un singolo numero), non un vettore.

    Se i vettori sono stati allineati perfettamente, calcoliamo un Prodotto scalare moltiplicando i loro termini corrispondenti ed aggiungendo i prodotti insieme.
    Ci saranno altrettanti prodotti quante sono le dimensioni nel sistema coordinato.

    Quindi, per un vettore tridimensionale, il Prodotto scalare sarebbe la somma (a scalare) delle coordinate moltiplicate l'un l'altra:

    Se A = (a1 , a2, a3 ) and B = (b1 , b2, b3 ), quindi

    A ? B = a1b1 + a2b2 + a3b3 (dove a1b1 significa la prima coordinata in A moltiplicato la prima coordinata in B, ecc.)

    Esempio: se A è un vettore (3, 4, 7) e B è un vettore (9, 2, 1) quindi

    A ? B = (3 * 9) + (4 * 2) + (7 * 1) = 27 + 8 + 7 = 42.

    Questo ci dimostra che per due vettori, A e B, che sono stati allineati perfettamente,** A ? B** è uguale alla somma dei prodotti delle coordinate corrispondenti dei due vettori.

    Tuttavia, se i vettori non sono stati allineati perfettamente, abbiamo bisogno di un fattore di adattamento per riportare la deviazione nel suo allineamento.
    Così la formula generalizzata per un Prodotto scalare ci porta al nostro amico coseno:

    **A ? B =|A||B|cos image **

    dove image misura l'angolo fra i vettori A e B e |A| significa il valore assoluto del vettore equivalente alla sua lunghezza.
    [ la derivazione di questa formula viene dalla Legge dei Coseni,... ma ci fidiamo senza approfondire oltre! 😉 ]

    Se tentiamo alcuni esempi vedremo il significato di tutto questo.

    Quando i vettori sono a 90°, cos image è zero, quindi il Prodotto scalare è zero.

    Quando i vettori sono molto vicini, il coseno si avvicina ad uno e lo scarto è minimo.

    Ciò è usato nella fisica per eseguire funzioni di calcolo: ** i vettori sono forza e distanza e l'angolo è l'angolo a cui la forza è applicata.**
    image
    L'immagine è riferita ad un esempio che tratteremo presto per i Term Vector auto, car ed insurance.

    Se spingiamo un armadio con la spalla in modo che la forza sia parallela al pavimento, lo faremo scorrere facilmente ma graffierà il pavimento! Se alziamo l'armadio e lo spostiamo, c'è molto più lavoro ma non graffieremo il pavimento!

    Vedremo più avanti una variabile di questo caso. Se dividiamo entrambi i lati di questa equazione con |A||B|, otteniamo:
    image
    All'inizio abbiamo visto di come il coseno sia un buon proxy per il calcolo della similarità fra i vettori, ora abbiamo scoperto la relazione che possiamo usare per descrivere la somiglianza fra due vettori.

    Usando "sim (A, B) per significare quella similarità, possiamo ottenere:
    image
    Questa è la chiave matematica dell'espressione di cui necessitiamo per il vector model, perché fornisce una formula per calcolare la somiglianza fra i vettori di termini di quei vettori.

    Ci sono tuttavia una coppia di altre formule Prodotto scalare che dobbiamo vedere prima che entriamo nel modello vettoriale.
    Usano l'algebra per fare le variazioni sulle equazioni che già abbiamo visto.

    A partire da A ? B =|A||B|cos image, se sostituite A per B (cioè usiamo lo stesso vettore sia per A che per B) otteniamo:

    A ? A =|A||A|cos image

    Ma se è lo stesso vettore, quindi allineto con sè stesso e quindi l'angolo fra loro è zero, il coseno degli angoli è dunque uguale a** 1**.

    Sostituendo 1 per cos image ci dà **A ? A=|A||A|=|A|2 **

    Se prendiamo la radice quadrata di ogni lato otteniamo:

    image |A|=sqrt A ? A

    Ricordando che A ? B = a1b1 + a2b2 + a3b3, noi possiamo vedere che** A?A = a1a1 + a2a2 + a3a3**

    Ma a1a1 è a12 quindi un modo più compatto di esprimerlo è:

    **A ?A = a12 + a22 + a32 **

    Sostituendo la serie per il Prodotto scalare, otteniamo:

    image

    Sotto il segno della radice quadrata vediamo una serie, la somma dei quadrati.

    Questa equazione può essere scritta in modo più compatto:
    image

    Vedremo più avanti una variazione di questo concetto che ci aiuterà a calcolare l'angolo di comparazione tra un vettore di domanda ed un vettore del documento.

    Bene, le cinture di sicurezza le abbiamo allacciate e questo è quanto dovevamo sapere circa il Dot Product - Prodotto scalare, ed è tutto quanto dovevamo conoscere per poter comprendere il vector model di Information Retrieval modello vettoriale di reperimento delle informazioni ]

    Siamo quindi pronti per cominciare ad approfondire il concetto di
    Calcolo del modello vettoriale :ciaosai:


  • Super User

    Piccoli aggiustamenti e precisazioni.

    Dot prodotto

    In italiano si chiama "prodotto scalare".

    A ? B = a1b1 + a2b2 + a3b3 (dove a1b1 significa la prima coordinata in A tempo la prima coordinata in B, ecc.)

    Non "tempo" ma "moltiplicato". a1b1 significa semplicemente "a1 moltiplicato per b1".

    |A| significa il valore assoluto del vettore.

    Per chiarire: il valore assoluto del vettore equivale alla sua lunghezza.


  • Super User

    Corretto.

    Grazie Low 🙂