Di seguito una serie di esercizi utili per arrivare alla costruzione di un piccolo motore di ricerca scritto nel linguaggio C.
Supponendo che l' elenco dei siti internet o dei file da indicizzare si trovi in un documento di testo, può essere molto utile calcolare il numero di file che devono essere indicizzati. Per esempio supponendo che nel file.txt che contiene l' elenco ci sia scritto:
Allora sarebbe utile un programma che ci dica che ci sono 3 file da indicizzare.
Altrettanto utile potrebbe essere avere un programma simile, ma dove noi inseriamo il numero della riga alla quale vogliamo leggere.
Pensiamo ora di leggere dal file che contiene l' elenco, i nomi dei file da indicizzare, e stamparli su schermo.
Questo esercizio conta il numero di file da indicizzare, inserisce questo numero in un ciclo for, in modo da leggere il contenuto di ognuno dei file inseriti in elenco. Il risultato che darà questo esercizio sarà una cosa di questo tipo:
Pensiamo ora di prendere una stringa che contenga una frase, e di dividerla in parole. Per fare questo si può utilizzare la funzione di libreria strtok. Questa funzione (STRing TOKenize) serve a ridurre una stringa in token, cioè minime unità espressive; tale funzione è molto comoda per separare le parole di una frase. Ha il seguente aspetto strtok(stringa, delimitatore). Suddivide la stringa passata come primo argomento, utilizzando il delimitatore passato come secondo argomento. Questa funzione restituisce un puntatore al primo token (alla prima parola).
In questo esercizio, per mezzo di una funzione da noi definita, viene manipolata (con l'utilizzo della funzione strtok) una stringa acquisita da un file di testo, in modo da separarla in parole. Avremo un puntatore ad un vettore di puntatori a char terminato da NULL. Ognuno di questi puntatori punterà ad una sottostringa (le parole del documento). La funzione ritorna il numero di token separati o 1 se la stringa non contiene parole.
Una volta acquisito un testo da un documento, averlo copiato in una stringa, aver diviso il testo in parole, dobbiamo eliminare quelle parole che non vogliamo vengano indicizzate, come gli articoli, preposizioni ecc..Creiamo una documento di testo, per esempio dizionario.txt, dove scriviamo tutte quelle parole che vogliamo eliminare. Dopodiché non ci resta che confrontare le parole del testo da indicizzare con quelle inserite nel dizionario. Se ne troviamo qualcuna uguale la eliminiamo e scaliamo tutte le altre (per esempio la parola puntata da argv[2] verrà assegnata ad argv[1] e all' ultimo puntatore assegneremo valore null).
Questo esercizio è molto simile a quello precedente, vengono però eliminate anche le ripetizioni. Ovvero se una parola compare due volte nello stesso documento, noi la elimineremo tenendone solo una.
Naturalmente quello fatto nell' esercizio18 possiamo farlo su un elenco di più file.
Un programmino utile può essere quello che prende una stringa e ne fa la somma dei codici ASCII dei singoli caratteri. L' utilità di questo programma si può comprendere meglio nell' esercizio successivo.
Abbiamo a questo punto diviso un documento in parole ed eliminate quelle che non ci interessano. Dobbiamo ora andare a collocare queste parole da qualche parte in memoria. Per velocizzare quella che sarà la ricerca queste parole verranno collocate dentro delle liste (vedi esercizio10). Saranno create cosi alcune liste: lista1, lista 2 ecc……… Con che criterio collochiamo una parola in una lista? Supponiamo innanzi tutto che le liste che siano 53 (un numero primo) Prendiamo la stringa che dobbiamo indicizzare, ne facciamo la somma dei codici ASCII dei singoli caratteri, e ne facciamo il modulo53, in modo da ottenere un numero minore di 53. Il numero che otteniamo indica in quale lista verrà inserita la parola indicizzata. Per esempio se otteniamo il numero 10 la parola da indicizzare sarà inserita nella lista10. Tutto ciò in modo da velocizzare la fase di ricerca. Della parola da ricercare inserita dall' utente, ne verrà fatta la somma dei codici ASCII e poi il modulo, ottenendo cosi la lista in cui andare a cercare la parola. Molto più veloce che confrontare la parola inserita dall' utente con tutte quelle indicizzate.
In questo esercizio vengono indicizzate le parole di un testo e ne viene inserito il numero della pagina nella quale sono state lette, in una lista. Viene poi interrogata una lista, chiedendogli di visualizzare l' elenco di tutte le pagine contenuto in essa. Il risultato che darà questo esercizio sarà una cosa di questo tipo:
Tutto quanto riportato in questa pagina è a puro scopo informativo personale. Se non ti trovi in accordo con quanto riportato nella pagina, vuoi fare delle precisazioni, vuoi fare delle aggiunte o hai delle proposte e dei consigli da dare, puoi farlo mandando un email. Ogni indicazione è fondamentale per la continua crescita del sito.