Ricerca nel testo

di il
8 risposte

Ricerca nel testo

Ciao. devo ottenere un dizionario di tutte le parole contenute in un dato file di testo (libro vero e proprio) con il numero di ricorrenze. mi hanno detto di usare dei tools di unix. qualcuno sa darmi consigli in qst? possibile che nn ci siano metodi libreria java a riguardo?

8 Risposte

  • Re: Ricerca nel testo

    fe ha scritto:


    devo ottenere un dizionario di tutte le parole contenute in un dato file di testo (libro vero e proprio) con il numero di ricorrenze. mi hanno detto di usare dei tools di unix. qualcuno sa darmi consigli in qst?
    Teoricamente il dizionario lo potresti ottenere anche con un comando del tipo:
    
    cat libro.txt | tr ' ' '\\n' | sed -e 's,[[:punct]],,g' | sort | uniq > dizionario.txt
    
    anche se probabilmente non è del tutto affidabile come metodo.

    Rimarrebbe il problema del conteggio delle parole: potresti provare a sostituire nella pipe sopra uniq con delle opportune istruzioni ad awk, oppure, visto che ormai quasi tutti i sistemi unix hanno installato perl o Python e li si possono considerare a tutti gli effetti dei tool di sistema, ti scrivi un unico script che crea il dizionario e conteggia le parole.
  • Re: Ricerca nel testo

    Anzi, con questo comando
    
    cat libro.txt | sed -e 's,[[:punct:]], ,g' | tr ' ' '\\n' | egrep '^[[:alnum:]]+' | sort | uniq -c > dictionary.txt
    ottieni l'elenco ordinato delle parole presenti in libro.txt precedute dal numero delle proprie occorrenze. Forse andrebbero raffinate un po' le espressioni regolari, ma comunque come spunto iniziale dovrebbe andare...
  • Re: Ricerca nel testo

    Se lo tengo fisso e non come spunto che dici?
    le mie scarse conoscenze unix mi sono proprio d'ostacolo... x questo cercavo magari qc cosa in java o win...
    ma se proprio nn ho scelta..
    grazie mille cmq
  • Re: Ricerca nel testo

    fe ha scritto:


    se lo tengo fisso e non come spunto che dici?
    Mah, non so, andrebbe migliorato, perché ad esempio il comando sopra fa distinzione tra maiuscolo e minuscolo, quindi potrebbe succedere di avere elencate nel dizionario entrambe le versioni della parola.
    le mie scarse conoscenze unix mi sono proprio d'ostacolo... x questo cercavo magari qc cosa in java o win... ma se proprio nn ho scelta..
    Con Java si può fare sicuramente, ma richiederebbe forse più tempo implementare il tutto...
  • Re: Ricerca nel testo

    Possibile che un word un notepad++ o pure un context nn mi possano aiutare? sgrunt.
    stavo pensando a realizzare velocemente una mappa in java ora mi do un okkio alla libreria.. xkè le tue scritte sono arabo x me
  • Re: Ricerca nel testo

    Se mi spieghi brevemente come hai fatto a farlo... mah
  • Re: Ricerca nel testo

    fe ha scritto:


    se mi spieghi brevemente come hai fatto a farlo... mah
    In breve, senza cioè farti un corso accelerato di comandi Unix e non in maniera troppo tecnica, ti descrivo cosa fanno i vari comandi.

    Il primo non fa granché: semplicemente legge il file libro.txt e lo scrive in output. Questo output viene mandato in input al secondo comando tramite il simbolo cosidetto di pipe |, creando in pratica un filtro.

    Il secondo comando, che è , legge questo input e lo modifica seguendo le istruzioni passategli come argomento, nel nostro caso l'istruzione è s,[[:punct:]], ,g e significa: sostituisci tutti i caratteri di punteggiatura e altri tipo &, <, >, #, etc. che trovi con uno spazio. L'output prodotto da sed diventa l'input del comando successivo tramite il solito simbolo di pipe |.

    Il terzo comando () trasforma ogni singolo spazio in input in un newline scrivendo il risultato in output e lasciando inalterati gli altri caratteri.

    A questo punto il testo iniziale è stato spezzato nelle singole parole e non ci resta che eliminare i newline, i caratteri di tabulazione, etc, e lo facciamo mandando l'output di tr in input tramite la solita pipe | al comando .
    Quest'ultimo filtra soltanto quelle righe (del suo input) che corrispondono all'espressione regolare ^[[:alnum:]]+.
    Questa espressione significa appunto: una riga che inizi con almeno un carattere alfanumerico.

    A questo punto, l'output di egrep viene raccolto dal comando il quale ordina alfabeticamente le righe e le manda in input all'ultimo comando nella pipe.

    E` proprio che fa la magia di eliminare le ripetizioni di ogni parola e, grazie all'opzione -c, aggiunge al suo output anche il numero di occorrenze con cui ogni singola parola compariva in input.

    L'output di uniq viene infine scritto (redirezionato) tramite il simbolo > nel file di nome dizionario.txt

    Come detto però il risultato finale potrebbe non essere quello voluto: ci potrebbero essere ad esempio parole sia maiuscolo che minuscole, etc...
  • Re: Ricerca nel testo

    Ok grazie ... io intanto sto provando a fare un hashmap in java. visto ora ke il testo interessato spezza parole da una riga all'altra... mah sinceramente nn so come unix o classe scanner si comportino in qst caso.
Devi accedere o registrarti per scrivere nel forum
8 risposte