web-dev-qa-db-fra.com

Installer par programmation des corpus / modèles NLTK, c'est-à-dire sans le téléchargeur GUI?

Mon projet utilise le NLTK. Comment puis-je répertorier les exigences du corpus et du modèle du projet afin qu'elles puissent être installées automatiquement? Je ne veux pas cliquer sur l'interface graphique de nltk.download(), en installant les packages un par un.

De plus, n'importe quel moyen de geler cette même liste d'exigences (comme pip freeze)?

52
Bluu

Le site NLTK répertorie une interface de ligne de commande pour télécharger des packages et des collections au bas de cette page:

http://www.nltk.org/data

L'utilisation de la ligne de commande varie selon la version de Python que vous utilisez, mais sur mon installation Python2.6, j'ai remarqué que je manquais le modèle 'spanish_grammar' et cela a bien fonctionné:

python -m nltk.downloader spanish_grammars

Vous mentionnez la liste des exigences du corpus et du modèle du projet et bien que je ne sois pas sûr d'un moyen de le faire automatiquement, j'ai pensé que je partagerais au moins cela.

47
burgersmoke

Pour installer tous les corpus et modèles NLTK:

python -m nltk.downloader all

Alternativement, sous Linux, vous pouvez utiliser:

Sudo python -m nltk.downloader -d /usr/local/share/nltk_data all

Remplacez all par popular si vous voulez simplement lister les corpus et modèles les plus populaires.


Vous pouvez également parcourir les corpus et les modèles via la ligne de commande:

mlee@server:/scratch/jjylee/tests$ Sudo python -m nltk.downloader
[Sudo] password for jjylee:
NLTK Downloader
---------------------------------------------------------------------------
    d) Download   l) List    u) Update   c) Config   h) Help   q) Quit
---------------------------------------------------------------------------
Downloader> d

Download which package (l=list; x=cancel)?
  Identifier> l
Packages:
  [ ] averaged_perceptron_tagger_ru Averaged Perceptron Tagger (Russian)
  [ ] basque_grammars..... Grammars for Basque
  [ ] bllip_wsj_no_aux.... BLLIP Parser: WSJ Model
  [ ] book_grammars....... Grammars from NLTK Book
  [ ] cess_esp............ CESS-ESP Treebank
  [ ] chat80.............. Chat-80 Data Files
  [ ] city_database....... City Database
  [ ] cmudict............. The Carnegie Mellon Pronouncing Dictionary (0.6)
  [ ] comparative_sentences Comparative Sentence Dataset
  [ ] comtrans............ ComTrans Corpus Sample
  [ ] conll2000........... CONLL 2000 Chunking Corpus
  [ ] conll2002........... CONLL 2002 Named Entity Recognition Corpus
  [ ] conll2007........... Dependency Treebanks from CoNLL 2007 (Catalan
                           and Basque Subset)
  [ ] crubadan............ Crubadan Corpus
  [ ] dependency_treebank. Dependency Parsed Treebank
  [ ] europarl_raw........ Sample European Parliament Proceedings Parallel
                           Corpus
  [ ] floresta............ Portuguese Treebank
  [ ] framenet_v15........ FrameNet 1.5
Hit Enter to continue: 
  [ ] framenet_v17........ FrameNet 1.7
  [ ] gazetteers.......... Gazeteer Lists
  [ ] genesis............. Genesis Corpus
  [ ] gutenberg........... Project Gutenberg Selections
  [ ] hmm_treebank_pos_tagger Treebank Part of Speech Tagger (HMM)
  [ ] ieer................ NIST IE-ER DATA SAMPLE
  [ ] inaugural........... C-Span Inaugural Address Corpus
  [ ] indian.............. Indian Language POS-Tagged Corpus
  [ ] jeita............... JEITA Public Morphologically Tagged Corpus (in
                           ChaSen format)
  [ ] kimmo............... PC-KIMMO Data Files
  [ ] knbc................ KNB Corpus (Annotated blog corpus)
  [ ] large_grammars...... Large context-free and feature-based grammars
                           for parser comparison
  [ ] lin_thesaurus....... Lin's Dependency Thesaurus
  [ ] mac_morpho.......... MAC-MORPHO: Brazilian Portuguese news text with
                           part-of-speech tags
  [ ] machado............. Machado de Assis -- Obra Completa
  [ ] masc_tagged......... MASC Tagged Corpus
  [ ] maxent_ne_chunker... ACE Named Entity Chunker (Maximum entropy)
  [ ] moses_sample........ Moses Sample Models
Hit Enter to continue: x


Download which package (l=list; x=cancel)?
  Identifier> conll2002
    Downloading package conll2002 to
        /afs/mit.edu/u/m/mlee/nltk_data...
      Unzipping corpora/conll2002.Zip.

---------------------------------------------------------------------------
    d) Download   l) List    u) Update   c) Config   h) Help   q) Quit
---------------------------------------------------------------------------
Downloader>
27
Franck Dernoncourt

En plus de l'option de ligne de commande déjà mentionnée, vous pouvez installer par programmation des données NLTK dans votre script Python en ajoutant un argument à la fonction download().

Voir le texte help(nltk.download), en particulier:

Individual packages can be downloaded by calling the ``download()``
function with a single argument, giving the package identifier for the
package that should be downloaded:

    >>> download('treebank') # doctest: +SKIP
    [nltk_data] Downloading package 'treebank'...
    [nltk_data]   Unzipping corpora/treebank.Zip.

Je peux confirmer que cela fonctionne pour le téléchargement d'un package à la fois, ou lorsqu'il est passé un list ou Tuple.

>>> import nltk
>>> nltk.download('wordnet')
[nltk_data] Downloading package 'wordnet' to
[nltk_data]     C:\Users\_my-username_\AppData\Roaming\nltk_data...
[nltk_data]   Unzipping corpora\wordnet.Zip.
True

Vous pouvez également essayer de télécharger un package déjà téléchargé sans problème:

>>> nltk.download('wordnet')
[nltk_data] Downloading package 'wordnet' to
[nltk_data]     C:\Users\_my-username_\AppData\Roaming\nltk_data...
[nltk_data]   Package wordnet is already up-to-date!
True

En outre, il semble que la fonction renvoie une valeur booléenne que vous pouvez utiliser pour voir si le téléchargement a réussi ou non:

>>> nltk.download('not-a-real-name')
[nltk_data] Error loading not-a-real-name: Package 'not-a-real-name'
[nltk_data]     not found in index
False
15
Wesley Baugh

J'ai réussi à installer les corpus et les modèles dans un répertoire personnalisé en utilisant le code suivant:

import nltk
nltk.download(info_or_id="popular", download_dir="/path/to/dir")
nltk.data.path.append("/path/to/dir")

cela installera "tous" des corpus/modèles dans /path/to/dir, et indiquera NLTK où le chercher (data.path.append).

Vous ne pouvez pas "figer" les données dans un fichier d'exigences, mais vous pouvez ajouter ce code à votre __init__ en plus viennent du code pour vérifier si les fichiers sont déjà là.

3