2016-03-18 9 views
5

Ich versuche zu lernen mit NLTK Paket in Python. Insbesondere muss ich den Penn-Tree-Bank-Datensatz in NLTK verwenden. Soweit ich weiß, wenn ich nltk.download('treebank') anrufen kann ich die 5% des Datensatzes bekommen. Ich habe jedoch einen vollständigen Datensatz in der tar.gz-Datei und möchte ihn verwenden. In here wird gesagt, dass:Wie könnte ich komplette Penn Baumbank Datensatz in Python/Nltk

Wenn Sie Zugriff auf eine vollständige Installation der Penn Treebank, NLTK kann so konfiguriert werden, als auch zu laden. Laden Sie das ptb-Paket herunter, und geben Sie in das Verzeichnis nltk_data/corpora/ptb die Verzeichnisse BROWN und WSJ der Treebank-Installation an (Symlinks funktionieren ebenfalls). Dann das ptb Modul anstelle von Baumbank:

Also, ich den Python von Terminal geöffnet, importiert nltk und tippte nltk.download('ptb'). Mit diesem Befehl wurde das Verzeichnis "ptb" unter meinem Verzeichnis ~/nltk_data erstellt. Am Ende habe ich jetzt Verzeichnis. Wie in dem obigen Link angedeutet, habe ich dort meinen Dataset-Ordner abgelegt. Das ist meine letzte Verzeichnishierarchie.

$: 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 

Innen alle Ordner 00-24, gibt es viele .mrg Dateien wie wsj_0001.mrg , wsj_0002.mrg und so weiter.

Jetzt können wir meine Frage zurückgeben. Wieder nach here:

Ich sollte die Datei-IDs erhalten können, wenn ich die folgenden schreiben:

>>> 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', ...] 

Leider, wenn ich print(ptb.fileids()) Ich habe leeres Array eingeben.

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

Gibt es jemanden, der mir helfen könnte?

EDIT hier ist der Inhalt meiner ptb Verzeichnis und einige allcats.txt Datei:

$: 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 .. 

Antwort

3

Die PTB corpus Leser muss Groß- Verzeichnis- und Dateinamen (wie durch den Inhalt von allcats.txt deutete an, dass Sie haben in Ihre Frage aufgenommen). Dies kollidiert mit vielen Distributionen von Penn Treebank, die Kleinbuchstaben verwenden.

Eine schnelle Lösung dafür wäre, die Ordner wsj und brown und ihre Inhalte in Großbuchstaben umzubenennen. Ein UNIX-Befehl, den Sie für diese verwenden können, ist:

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 

(Gewonnen aus this question). Es wird Verzeichnis und Dateinamen rekursiv in Großbuchstabe ändern.