2016-03-18 38 views
5

Sto cercando di imparare usando il pacchetto NLTK in python. In particolare, ho bisogno di usare il set di dati di penn tree bank in NLTK. Per quanto ne so, se chiamo nltk.download('treebank') posso ottenere il 5% del set di dati. Tuttavia, ho un set di dati completo nel file tar.gz e voglio usarlo. In here si dice che:come posso usare il set completo di penn treebank all'interno di python/nltk

Se si ha accesso ad un'installazione completa del Penn Treebank, NLTK può essere configurato per caricarlo pure. Scarica il pacchetto ptb e in la directory nltk_data/corpora/ptb colloca le directory MARRONE e WSJ dell'installazione Treebank (anche i collegamenti simbolici funzionano). Poi utilizzare il modulo ptb invece di Treebank:

Così, ho aperto il pitone dal terminal, NLTK importato e digitato nltk.download('ptb'). Con questo comando, la directory "ptb" è stata creata sotto la mia directory ~/nltk_data. Alla fine, ora ho la directory ~/nltk_data/ptb. Dentro là, come suggerito nel collegamento che ho dato sopra, ho messo la mia cartella del set di dati. Quindi questa è la mia ultima gerarchia di directory.

$: pwd 
    $: ~/nltk_data/corpora/ptb/WSJ 
    $: ls 
    $:00 02 04 06 08 10 12 14 16 18 20 22 24 
     01 03 05 07 09 11 13 15 17 19 21 23 merge.log 

All'interno tutte le cartelle da 00 a 24, ci sono molti .mrg file come wsj_0001.mrg , wsj_0002.mrg e così via.

Ora, restituire la mia domanda. Sempre secondo here:

I dovrebbe essere in grado di ottenere gli ID di file se scrivo le seguenti:

>>> from nltk.corpus import ptb 
>>> print(ptb.fileids()) # doctest: +SKIP 
['BROWN/CF/CF01.MRG', 'BROWN/CF/CF02.MRG', 'BROWN/CF/CF03.MRG', 'BROWN/CF/CF04.MRG', ...] 

Sfortunatamente, quando si digita print(ptb.fileids()) ho ottenuto array vuoto.

>>> print(ptb.fileids()) 
[] 

C'è qualcuno che potrebbe aiutarmi?

EDIT Ecco il contenuto della mia cartella ptb e alcuni dei file di allcats.txt:

$: pwd 
    $: ~/nltk_data/corpora/ptb 
    $: ls 
    $: allcats.txt WSJ 
    $: cat allcats.txt 
    $: WSJ/00/WSJ_0001.MRG news 
    WSJ/00/WSJ_0002.MRG news 
    WSJ/00/WSJ_0003.MRG news 
    WSJ/00/WSJ_0004.MRG news 
    WSJ/00/WSJ_0005.MRG news 

    and so on .. 

risposta

3

Il lettore corpus PTB ha bisogno di nomi di file e directory maiuscole (come suggerito dal contenuto del allcats.txt che hai incluso nella tua domanda). Questo si scontra con molte distribuzioni di Penn Treebank, che usano lettere minuscole.

Una soluzione rapida per questo sarebbe rinominare le cartelle wsj e brown e il loro contenuto in maiuscolo. Un comando UNIX è possibile utilizzare per questo è:

find . -depth | \ 
    while read LONG 
    do 
     SHORT=$(basename "$LONG" | tr '[:lower:]' '[:upper:]') 
     DIR=$(dirname "$LONG") 
     if [ "${LONG}" != "${DIR}/${SHORT}" ] 
     then 
      mv "${LONG}" "${DIR}/${SHORT}" 
     fi 
    done 

(Ottenuto da this question). Cambierà ricorsivamente i nomi di directory e file in maiuscolo.