Вопрос:

Resource 'corpora/wordnet' not found on Heroku

python django heroku nltk wordnet

23761 просмотра

7 ответа

108 Репутация автора

I'm trying to get NLTK and wordnet working on Heroku. I've already done

heroku run python
nltk.download()
  wordnet
pip install -r requirements.txt

But I get this error:

Resource 'corpora/wordnet' not found.  Please use the NLTK
  Downloader to obtain the resource:  >>> nltk.download()
  Searched in:
    - '/app/nltk_data'
    - '/usr/share/nltk_data'
    - '/usr/local/share/nltk_data'
    - '/usr/lib/nltk_data'
    - '/usr/local/lib/nltk_data'

Yet, I've looked at in /app/nltk_data and it's there, so I'm not sure what's going on.

Автор: user1881006 Источник Размещён: 20.12.2012 05:21

Ответы (7)


53 плюса

1619 Репутация автора

Решение

I just had this same problem. What ended up working for me is creating an 'nltk_data' directory in the application's folder itself, downloading the corpus to that directory and adding a line to my code that lets the nltk know to look in that directory. You can do this all locally and then push the changes to Heroku.

So, supposing my python application is in a directory called "myapp/"

Step 1: Create the directory

cd myapp/
mkdir nltk_data

Step 2: Download Corpus to New Directory

python -m nltk.downloader

Это выскочит nltkзагрузчик. Установите каталог загрузки на whatever_the_absolute_path_to_myapp_is/nltk_data/. Если вы используете загрузчик графического интерфейса, каталог загрузки устанавливается через текстовое поле в нижней части пользовательского интерфейса. Если вы используете командную строку один, вы устанавливаете его в меню конфигурации.

Как только загрузчик узнает, что он указывает на вновь созданный nltk_dataкаталог, загрузите ваш корпус.

Или в одном шаге от кода Python:

nltk.download("wordnet", "whatever_the_absolute_path_to_myapp_is/nltk_data/")

Шаг 3: Дайте nltk знать, где искать

ntlkищет данные, ресурсы и т. д. в местах, указанных в nltk.data.pathпеременной. Все, что вам нужно сделать, это добавить nltk.data.path.append('./nltk_data/')в файл python, фактически использующий nltk, и он будет искать корпоративные, токенизаторы и тому подобное в дополнение к путям по умолчанию.

Шаг 4: Отправить его Heroku

git add nltk_data/
git commit -m 'super useful commit message'
git push heroku master

Это должно работать! Это все равно для меня. Стоит отметить, что путь от файла python, выполняющего материал nltk, к каталогу nltk_data может отличаться в зависимости от того, как вы структурировали свое приложение, поэтому просто учитывайте это, когда вы делаетеnltk.data.path.append('path_to_nltk_data')

Автор: follyroof Размещён: 14.02.2013 07:02

2 плюса

86 Репутация автора

Я получил эту проблему. Для тех, кто не работает в виртуальной среде, необходимо скачать в следующий каталог в Ubuntu:

/usr/share/nltk_data/corpora/wordnet

Вместо Wordnet это может быть коричневым или что-то еще. Вы можете напрямую запустить эту команду в своем терминале, если вы хотите загрузить корпус.

$ sudo python -m nltk.downloader -d /usr/share/nltk_data wordnet

Снова вместо Wordnet это может быть коричневым.

Автор: Gaurav Anand Размещён: 13.01.2016 08:28

4 плюса

2167 Репутация автора

Только для пользователей Mac OS.

python -m nltk.downloader -d /usr/share/nltk_data wordnet

данные корпуса не могут быть загружены непосредственно в /usr/share/nltk_dataпапку. Сообщения об ошибках «нет разрешения», два решения:

  1. Добавьте дополнительное изменение разрешений в систему Mac, подробности см. В разделе « Операция не разрешена» для пользователя root el capitan (без root отключено) . Тем не менее, я не хочу менять настройки Mac по умолчанию только для этой корпорации. и я иду на второе решение.

    • Загрузите корпус в любой каталог, к которому у вас есть доступ. `python -m nltk.downloader -d some_user_accessable_directory wordnet '. Заметим, что там вы загружаете только необходимые корпусы, например, wordnet, reuters, а не целые корпуса из nltk.
    • Добавить путь к пути nltk. В файле py добавьте следующие строки:

      import nltk nltk.data.path.append('nltk_data')

Автор: HappyCoding Размещён: 26.02.2016 03:26

3 плюса

645 Репутация автора

Обновить

Как отметил Кеннет Рейтц , в heroku-python-buildpack было добавлено гораздо более простое решение. Добавьте nltk.txtфайл в корневую директорию и перечислите свои корпорации внутри. См. Https://devcenter.heroku.com/articles/python-nltk для получения подробной информации.


Оригинальный ответ

Вот более чистое решение, которое позволяет вам устанавливать данные NLTK непосредственно в Heroku, не добавляя их в ваш репозиторий git.

Я использовал аналогичные шаги для установки Textblob на Heroku, который использует NLTK в качестве зависимости. Я сделал некоторые небольшие изменения в своем исходном коде в шагах 3 и 4, которые должны работать только для установки NLTK.

Стандартный пакет сборки heroku включает в себя post_compileшаг, который выполняется после того, как все стандартные шаги сборки были выполнены:

# post_compile
#!/usr/bin/env bash

if [ -f bin/post_compile ]; then
    echo "-----> Running post-compile hook"
    chmod +x bin/post_compile
    sub-env bin/post_compile
fi

Как видите, он ищет в каталоге вашего проекта собственный post_compileфайл в binкаталоге и запускает его, если он существует. Вы можете использовать этот хук для установки данных nltk.

  1. Создайте binкаталог в корне вашего локального проекта.

  2. Добавьте свой собственный post_compileфайл в binкаталог.

    # bin/post_compile
    #!/usr/bin/env bash
    
    if [ -f bin/install_nltk_data ]; then
        echo "-----> Running install_nltk_data"
        chmod +x bin/install_nltk_data
        bin/install_nltk_data
    fi
    
    echo "-----> Post-compile done"
    
  3. Добавьте свой собственный install_nltk_dataфайл в binкаталог.

    # bin/install_nltk_data
    #!/usr/bin/env bash
    
    source $BIN_DIR/utils
    
    echo "-----> Starting nltk data installation"
    
    # Assumes NLTK_DATA environment variable is already set
    # $ heroku config:set NLTK_DATA='/app/nltk_data'
    
    # Install the nltk data
    # NOTE: The following command installs the wordnet corpora, 
    # so you may want to change for your specific needs.  
    # See http://www.nltk.org/data.html
    python -m nltk.downloader wordnet
    
    # If using Textblob, use this instead:
    # python -m textblob.download_corpora lite
    
    # Open the NLTK_DATA directory
    cd ${NLTK_DATA}
    
    # Delete all of the zip files
    find . -name "*.zip" -type f -delete
    
    echo "-----> Finished nltk data installation"
    
  4. Добавьте nltkв свой requirements.txtфайл (или, textblobесли вы используете Textblob).

  5. Зафиксируйте все эти изменения в своем репо.
  6. Установите переменную окружения NLTK_DATA в вашем приложении heroku.

    $ heroku config:set NLTK_DATA='/app/nltk_data'
    
  7. Развернуть в Heroku. Вы увидите post_compileтриггер шага в конце развертывания, за которым следует загрузка nltk.

Я надеюсь, что вы нашли это полезным! Наслаждайтесь!

Автор: Michael Godshall Размещён: 01.06.2016 02:26

1 плюс

5583 Репутация автора

Heroku теперь официально поддерживает данные NLTK, встроенные!

https://devcenter.heroku.com/articles/python-nltk

Автор: Kenneth Reitz Размещён: 17.03.2017 07:05

1 плюс

5315 Репутация автора

Этот работает:

Для пользователей Mac OS.

python -m nltk.downloader -d /usr/local/share/nltk_data wordnet
Автор: Joolah Размещён: 13.11.2017 03:09

0 плюса

1 Репутация автора

Я столкнулся с точно такой же проблемой при развертывании чат-бота на платформе Heroku. Хотя ответ от follyroof является надежным решением, но во многих случаях размер хранилища будет резко увеличен.

Итак, я использовал nltk.download ('PACKAGE') в моем файле app.py. Таким образом, каждый раз, когда запускается app.py, зависимости загружаются автоматически.

Автор: Scid Размещён: 14.06.2019 05:19
Вопросы из категории :
32x32