2013-04-05 10 views
7

PROBLEMA:corrispondenza di file più vicina nella data di testo ASCII Files

Ho circa 20 file di testo ASCII, ciascuna una dimensione inferiore a 10^9 Bytes .Un altro file di testo ASCII avere (diciamo FOO) è dato . Il programma è quello di abbinare strategicamente il contenuto di FOO con i dati di 20 file e stampare il nome del file di matching di CLOSEST. Il contenuto di FOO potrebbe corrispondere solo parzialmente.

Poiché la dimensione del file è troppo grande, mi chiedo:

1.How da usare Information Retrieval (dato che non so molto di IR)

struttura dati

2.Which dovrei usare per memorizzare tali informazioni

3. Quale sarebbe il miglior Algoritmo per implementarlo.

So che sto chiedendo troppo, ma in realtà sono bloccato a questo problema e non sono in grado di scoprire come affrontare. Qualsiasi aiuto sarebbe apprezzato. Grazie!

+0

come su di scansione di tutti i file e creare un vettore tridimensionale di parole per ogni file di testo, allora si può calcolare l'angolo tra i documets e selezionare la quello più vicino? –

+0

Un modo più semplice sarebbe utilizzare l'indice Jaccard http://en.wikipedia.org/wiki/Jaccard_index, anche se potrebbe non fornire la stessa accuratezza della somiglianza del coseno. Si noti che queste tecniche operano su conteggi di parole normalizzati. – decden

+9

Hai davvero bisogno di definire "il più vicino". Se il file di test corrisponde a tutte le parole del file n. 1, ma con le parole in ordine inverso (ad es. "Quick fox rosso" e "fox red quick the"), è "più vicino" rispetto a se corrisponde esattamente al file n. in ordine per il primo 30%, ma poi ha pochissime somiglianze in seguito? Il caso è significativo? Spazio bianco?Senza una definizione di "più vicino", avrai un momento difficile per decidere cosa confrontare. –

risposta

0

Quindi presumo che un file contenga del testo. Quindi possiamo dire che ognuno dei file è una grande stringa. Ora realizza 20 vettori o array. Passa attraverso il file e metti ogni parola come un elemento nel vettore. Ora crea un vettore con una dimensione di 20 per memorizzare la corrispondenza di ciascun file Ora crea anche un vettore di parole per il file specificato. Ora crea un ciclo per correre attraverso questi vettori se in un dato indice trovi una corrispondenza con uno di questi 20 vettori e con i tuoi vettori dati. Aumentare il valore per il file corrispondente in corrispondenza della memorizzazione dei vettori. Alla fine, il valore più alto nel vettore di memorizzazione delle corrispondenze indicherà il file con la migliore corrispondenza.

0

Soluzione di Vampire Coder presuppone che i documenti siano un sacco di parole, il che significa che l'ordine delle parole non ha importanza. Ma per "corrispondere parzialmente", intendevi alcune delle corrispondenze, quindi non servirà a nulla.

È possibile dividere ciascun documento in sottoinsiemi sovrapposti e utilizzare l'hash di ciascun sottoinsieme. Quindi trasformi il tuo documento in un set di hash. Quindi è possibile confrontare gli hash. Questo è un modo in cui puoi fare ciò che vuoi fare.

Per ogni documento, una volta ristrette le potenziali corrispondenze, è possibile aumentare la risoluzione con cui si suddividono i documenti. Diciamo che inizialmente li hai divisi in due, ora puoi dividerli in 10. Questo per minimizzare il tempo di esecuzione.

Inoltre si dovrebbe usare algoritmo di hash sensibili località come: http://en.wikipedia.org/wiki/Nilsimsa_Hash

Problemi correlati