การโหลด english.pickle ล้มเหลวด้วย nltk.data.load


144

เมื่อพยายามโหลดpunkttokenizer ...

import nltk.data
tokenizer = nltk.data.load('nltk:tokenizers/punkt/english.pickle')

... a LookupErrorได้รับการเลี้ยงดู:

> LookupError: 
>     *********************************************************************   
> Resource 'tokenizers/punkt/english.pickle' not found.  Please use the NLTK Downloader to obtain the resource: nltk.download().   Searched in:
>         - 'C:\\Users\\Martinos/nltk_data'
>         - 'C:\\nltk_data'
>         - 'D:\\nltk_data'
>         - 'E:\\nltk_data'
>         - 'E:\\Python26\\nltk_data'
>         - 'E:\\Python26\\lib\\nltk_data'
>         - 'C:\\Users\\Martinos\\AppData\\Roaming\\nltk_data'
>     **********************************************************************

2
คุณสามารถดาวน์โหลดรุ่นของดองได้โดยใช้>>> nltk.download()
alvas

คำตอบ:


262

ฉันมีปัญหาเดียวกันนี้ ไปที่ python shell แล้วพิมพ์:

>>> import nltk
>>> nltk.download()

จากนั้นหน้าต่างการติดตั้งจะปรากฏขึ้น ไปที่แท็บ 'รุ่น' และเลือก 'punkt' จากใต้คอลัมน์ 'ตัวระบุ' จากนั้นคลิกดาวน์โหลดและมันจะติดตั้งไฟล์ที่จำเป็น ถ้าอย่างนั้นมันก็ใช้ได้!


4
โปรดทราบว่าในบางรุ่นไม่มีแท็บรุ่นและคุณสามารถไปที่ 'ดาวน์โหลด' และลองรับแพคเกจ 'punkt' หรือใช้ตัวเลือก 'รายการ' ใด ๆ เพื่อแสดงรายการแพ็คเกจที่มี
ely

2
มันติดตั้งในโฟลเดอร์บ้านของฉันในไดเรกทอรี nltk_data ฉันควรจะคัดลอกไดเร็กทอรีของ punkt นี้ไปยังโฟลเดอร์ใด ๆ ของ nltk กรุณาช่วย
sumanth232

ฉันไม่แน่ใจว่าคุณหมายถึงอะไร tokenizer = nltk.data.load('nltk:tokenizers/punkt/english.pickle')แล้วควรจะทำงานและคุณสามารถใช้ tokenizer tokenizer.tokenize('The cat. The mat. It Sat.')ชอบโดย: ที่นี่ nltk พยายามที่จะแก้ไขเส้นทางสัมพัทธ์tokenizers/punkt/english.pickleกับหลายสถานที่ เช่นบน Windows มันมีลักษณะ%APPDATA%\nltk_data\tokenizers\punkt\english.pickleหรือC:\nltk_data\tokenizers\punkt\english.pickle(เหมือนกันสำหรับ D: และ E :) ดังนั้นหากคุณตรวจสอบให้แน่ใจว่าไฟล์ punkt.zip ถูกคลายซิปในลักษณะที่มีอยู่ในตำแหน่งดังกล่าวควรจะสามารถค้นหาได้
richardr

หรือตั้งค่าNLTK_DATAตัวแปรสภาพแวดล้อมของคุณให้ชี้ไปที่โฟลเดอร์ nltk_data เพื่อให้%NLTK_DATA%\tokenizers\punkt\english.pickleมีอยู่
richardr

หากทำงานบนระบบที่ไม่ใช่ X-Window (เช่นผ่านการsshเชื่อมต่อ) จะไม่มีหน้าต่าง GUI และไม่มีแท็บ 'รุ่น'
mknaf

95

คุณสามารถทำสิ่งนี้ได้

import nltk
nltk.download('punkt')

from nltk import word_tokenize,sent_tokenize

คุณสามารถดาวน์โหลด tokenizers ได้โดยส่งผ่านpunktอาร์กิวเมนต์ไปยังdownloadฟังก์ชัน คำศัพท์และประโยค tokenizers nltkแล้วที่มีอยู่บน

หากคุณต้องการดาวน์โหลดทุกอย่างเช่นchunkers, grammars, misc, sentiment, taggers, corpora, help, models, stemmers, tokenizersไม่ผ่านข้อโต้แย้งใด ๆ เช่นนี้

nltk.download()

ดูข้อมูลเชิงลึกนี้เพิ่มเติม https://www.nltk.org/data.html


1
รหัสคำตอบเท่านั้นจะขมวดคิ้วอย่างมาก โปรดเพิ่มคำอธิบายเพิ่มเติมให้กับคำตอบของคุณ วิธีการทำงานนี้ ทำไมถึงมีประโยชน์
RubberDuck

สิ่งที่จะทำได้ก็คือการดาวน์โหลดไลบรารี่ที่จำเป็นเพื่อให้ nltk ทำงานโทเค็นใด ๆ
Itzik Gili

tokenizers ใช้อย่างไร?
luckyhandler

python -c "import nltk; nltk.download('punkt')" [nltk_data] Downloading package punkt to /home/my_user/nltk_data... [nltk_data] Error downloading 'punkt' from [nltk_data] <https://raw.githubusercontent.com/nltk/nltk_data/gh- [nltk_data] pages/packages/tokenizers/punkt.zip>: HTTP Error [nltk_data] 503: first byte timeout
mrgloom

27

นี่คือสิ่งที่ใช้ได้ผลสำหรับฉันในตอนนี้:

# Do this in a separate python interpreter session, since you only have to do it once
import nltk
nltk.download('punkt')

# Do this in your ipython notebook or analysis script
from nltk.tokenize import word_tokenize

sentences = [
    "Mr. Green killed Colonel Mustard in the study with the candlestick. Mr. Green is not a very nice fellow.",
    "Professor Plum has a green plant in his study.",
    "Miss Scarlett watered Professor Plum's green plant while he was away from his office last week."
]

sentences_tokenized = []
for s in sentences:
    sentences_tokenized.append(word_tokenize(s))

sentences_tokenized เป็นรายการของโทเค็น:

[['Mr.', 'Green', 'killed', 'Colonel', 'Mustard', 'in', 'the', 'study', 'with', 'the', 'candlestick', '.', 'Mr.', 'Green', 'is', 'not', 'a', 'very', 'nice', 'fellow', '.'],
['Professor', 'Plum', 'has', 'a', 'green', 'plant', 'in', 'his', 'study', '.'],
['Miss', 'Scarlett', 'watered', 'Professor', 'Plum', "'s", 'green', 'plant', 'while', 'he', 'was', 'away', 'from', 'his', 'office', 'last', 'week', '.']]

ประโยคที่นำมาจากตัวอย่างโน๊ตบุ๊ค ipython ที่มาพร้อมกับหนังสือ "Mining the Social Web, 2nd Edition"


16

จากบรรทัดคำสั่ง bash ให้รัน:

$ python -c "import nltk; nltk.download('punkt')"

ฉันได้รับ [nltk_data] เกิดข้อผิดพลาดในการโหลด punkt: HTTP Error 405: ไม่อนุญาต
user2478236

1
@ user2478236 GitHub บล็อกการดาวน์โหลดด้วย HTTP 405 เนื่องจากมีปริมาณการใช้งานสูงมาก ดูgithub.com/nltk/nltk/issues/1787
John Vandenberg

1
ใช้งานได้สำหรับฉันนี่สร้างโฟลเดอร์nltk_dataลงใน dir บ้านของฉันและบันทึกพังค์ไว้ในนั้น ฉันมี Fedora 27, Py3.6
MaNKuR

13

มันใช้งานได้สำหรับฉัน:

>>> import nltk
>>> nltk.download()

ใน windows คุณจะได้รับ nltk downloader ด้วย

ดาวน์โหลด NLTK


9

Simple nltk.download()จะไม่แก้ปัญหานี้ ฉันลองด้านล่างและใช้งานได้สำหรับฉัน:

ในnltkโฟลเดอร์สร้างtokenizersโฟลเดอร์และคัดลอกpunktโฟลเดอร์ของคุณลงในtokenizersโฟลเดอร์

สิ่งนี้จะได้ผล! โครงสร้างโฟลเดอร์จะต้องเป็นไปตามที่แสดงในภาพ! 1


1
สิ่งนี้ใช้ได้กับฉันในกรณีของฉันฉันไม่สามารถดาวน์โหลดผ่าน nltk.download ... ดังนั้นฉันจึงดาวน์โหลดไฟล์ด้วยตนเองจากnltk.org/nltk_data และสร้างโฟลเดอร์ c: / nltk_data / tokenizers / punkt และฉันคัดลอกไฟล์ทั้งหมด ไฟล์ในตำแหน่งนี้
Fermin Pitol

6

nltk มีโมเดลของ tokenizer ที่ผ่านการฝึกอบรมมาแล้ว โมเดลกำลังดาวน์โหลดจากแหล่งข้อมูลที่กำหนดไว้ล่วงหน้าภายในเว็บและเก็บไว้ที่เส้นทางของแพ็คเกจ nltk ที่ติดตั้งในขณะที่ดำเนินการตามการเรียกใช้ฟังก์ชันที่เป็นไปได้

เช่น 1 tokenizer = nltk.data.load ('nltk: tokenizers / punkt / english.pickle')

เช่น 2 nltk.download ('punkt')

หากคุณโทรประโยคข้างต้นในรหัสของคุณตรวจสอบให้แน่ใจว่าคุณมีการเชื่อมต่ออินเทอร์เน็ตโดยไม่มีการป้องกันไฟร์วอลล์

ฉันต้องการแบ่งปันวิธีการแก้ไขที่ดีกว่าเพื่อแก้ไขปัญหาข้างต้นด้วยความเข้าใจที่ลึกซึ้งยิ่งขึ้น

โปรดทำตามขั้นตอนต่อไปนี้และเพลิดเพลินกับการโทเค็นคำภาษาอังกฤษโดยใช้ nltk

ขั้นตอนที่ 1: ดาวน์โหลดโมเดล "english.pickle" ตามเส้นทางเว็บก่อน

ไปที่ลิงค์ " http://www.nltk.org/nltk_data/ " และคลิกที่ "ดาวน์โหลด" ที่ตัวเลือก "107. รุ่น Punkt Tokenizer"

ขั้นตอนที่ 2: แยกไฟล์ "punkt.zip" ที่ดาวน์โหลดมาและค้นหาไฟล์ "english.pickle" จากไฟล์นั้นและวางในไดรฟ์ C

ขั้นตอนที่ 3: คัดลอกวางรหัสต่อไปนี้และดำเนินการ

from nltk.data import load
from nltk.tokenize.treebank import TreebankWordTokenizer

sentences = [
    "Mr. Green killed Colonel Mustard in the study with the candlestick. Mr. Green is not a very nice fellow.",
    "Professor Plum has a green plant in his study.",
    "Miss Scarlett watered Professor Plum's green plant while he was away from his office last week."
]

tokenizer = load('file:C:/english.pickle')
treebank_word_tokenize = TreebankWordTokenizer().tokenize

wordToken = []
for sent in sentences:
    subSentToken = []
    for subSent in tokenizer.tokenize(sent):
        subSentToken.extend([token for token in treebank_word_tokenize(subSent)])

    wordToken.append(subSentToken)

for token in wordToken:
    print token

แจ้งให้เราทราบหากคุณประสบปัญหาใด ๆ


คำตอบที่ดีจริงๆถ้าคุณอยู่หลังไฟร์วอลล์ที่ดุดันมาก
kariato

5

ใน Jenkins สามารถแก้ไขได้โดยเพิ่มรหัสต่อไปนี้ลงในVirtualenv Builderภายใต้แท็บBuild :

python -m nltk.downloader punkt

ป้อนคำอธิบายรูปภาพที่นี่


4

ฉันเจอปัญหานี้เมื่อฉันพยายามที่จะทำการติดแท็ก pos ใน nltk วิธีที่ฉันทำให้ถูกต้องคือการสร้างไดเรกทอรีใหม่พร้อมกับไดเรกทอรี corpora ชื่อ "แท็กเกอร์" และคัดลอก max_pos_tagger ในแท็กไดเรกทอรี
หวังว่ามันจะเหมาะกับคุณเช่นกัน โชคดีที่สุดกับมัน !!!


4

ใน Spyder ไปที่เชลล์ที่ใช้งานอยู่ของคุณและดาวน์โหลด nltk โดยใช้คำสั่งด้านล่าง 2 นำเข้า nltk nltk.download () จากนั้นคุณจะเห็นหน้าต่างตัวดาวน์โหลด NLTK เปิดขึ้นด้านล่างไปที่แท็บ 'รุ่น' ในหน้าต่างนี้และคลิกที่ 'punkt' และดาวน์โหลด 'punkt'

หน้าต่าง



0

ข้อมูลโทเค็นของพังค์นั้นมีขนาดใหญ่กว่า35 MBซึ่งอาจเป็นเรื่องใหญ่ถ้าหากฉันเหมือนคุณกำลังใช้ nltk ในสภาพแวดล้อมเช่นแลมบ์ดาที่มีทรัพยากร จำกัด

หากคุณต้องการเพียง tokenizers ภาษาหนึ่งหรือสองสามภาษาคุณสามารถลดขนาดของข้อมูลได้อย่างมากด้วยการรวม.pickleไฟล์ภาษาเหล่านั้นเท่านั้น

หากคุณเพียงต้องการสนับสนุนภาษาอังกฤษขนาดข้อมูล nltk ของคุณจะลดลงเหลือ407 KB (สำหรับ python 3 เวอร์ชั่น)

ขั้นตอน

  1. ดาวน์โหลดข้อมูล nltk punkt: https://raw.githubusercontent.com/nltk/nltk_data/gh-pages/packages/tokenizers/punkt.zip
  2. ที่ไหนสักแห่งในสภาพแวดล้อมของคุณสร้างโฟลเดอร์: nltk_data/tokenizers/punktถ้าใช้หลาม 3 เพิ่มโฟลเดอร์อื่นเพื่อให้รูปลักษณ์โครงสร้างไดเรกทอรีใหม่ของคุณเช่นPY3 nltk_data/tokenizers/punkt/PY3ในกรณีของฉันฉันสร้างโฟลเดอร์เหล่านี้ที่รากของโครงการของฉัน
  3. แตกไฟล์ zip และย้าย.pickleไฟล์สำหรับภาษาที่คุณต้องการรองรับไปยังpunktโฟลเดอร์ที่คุณเพิ่งสร้างขึ้น หมายเหตุ: ผู้ใช้ Python 3 ควรใช้ผักดองจากPY3โฟลเดอร์ เมื่อโหลดไฟล์ภาษาของคุณแล้วควรมีลักษณะเช่น: example-folder-stucture
  4. ตอนนี้คุณเพียงแค่ต้องเพิ่มของคุณnltk_dataโฟลเดอร์เส้นทางการค้นหาสมมติว่าข้อมูลของคุณไม่ได้อยู่ในหนึ่งในเส้นทางการค้นหาที่กำหนดไว้ล่วงหน้า NLTK_DATA='path/to/your/nltk_data'คุณสามารถเพิ่มข้อมูลของคุณโดยใช้ตัวแปรสภาพแวดล้อม คุณยังสามารถเพิ่มพา ธ ที่กำหนดเองตอนรันไทม์ในไพ ธ อนได้
from nltk import data
data.path += ['/path/to/your/nltk_data']

หมายเหตุ: หากคุณไม่จำเป็นต้องโหลดในข้อมูลที่รันไทม์หรือกำข้อมูลด้วยรหัสของคุณก็จะดีที่สุดในการสร้างของคุณnltk_dataโฟลเดอร์ที่สถานที่ในตัวที่มีลักษณะ nltk สำหรับ


0

nltk.download()จะไม่แก้ปัญหานี้ ฉันลองด้านล่างและใช้งานได้สำหรับฉัน:

ใน'...AppData\Roaming\nltk_data\tokenizers'โฟลเดอร์ให้แตกpunkt.zipโฟลเดอร์ที่ดาวน์โหลดมาในตำแหน่งเดียวกัน


0

ในPython-3.6ฉันสามารถดูข้อเสนอแนะในการติดตามกลับ มันค่อนข้างมีประโยชน์ ดังนั้นฉันจะบอกพวกคุณให้ใส่ใจกับข้อผิดพลาดที่คุณได้รับคำตอบส่วนใหญ่อยู่ในปัญหานั้น;)

ป้อนคำอธิบายรูปภาพที่นี่

และจากคำแนะนำของผู้ใช้รายอื่นที่นี่ไม่ว่าจะเป็นการใช้เทอร์มินัลไพ ธ อนหรือการใช้คำสั่งอย่างที่python -c "import nltk; nltk.download('wordnet')"เราสามารถติดตั้งได้ทันที คุณเพียงแค่ต้องเรียกใช้คำสั่งนั้นครั้งเดียวแล้วมันจะบันทึกข้อมูลในเครื่องในโฮมไดเร็กตอรี่ของคุณ


0

ฉันมีปัญหาที่คล้ายกันเมื่อใช้โฟลเดอร์ที่กำหนดสำหรับการดาวน์โหลดหลายครั้งและฉันต้องผนวกเส้นทางข้อมูลด้วยตนเอง:

ดาวน์โหลดเพียงครั้งเดียวสามารถบรรลุได้ดังต่อไปนี้ (งาน)

import os as _os
from nltk.corpus import stopwords
from nltk import download as nltk_download

nltk_download('stopwords', download_dir=_os.path.join(get_project_root_path(), 'temp'), raise_on_error=True)

stop_words: list = stopwords.words('english')

รหัสนี้ใช้งานได้ซึ่งหมายความว่า nltk จะจดจำเส้นทางการดาวน์โหลดที่ส่งผ่านในส่วนดาวน์โหลด ใน nads อื่นถ้าฉันดาวน์โหลดแพ็คเกจถัดไปฉันได้รับข้อผิดพลาดคล้ายกันตามที่อธิบายโดยผู้ใช้:

การดาวน์โหลดหลายครั้งทำให้เกิดข้อผิดพลาด:

import os as _os

from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize

from nltk import download as nltk_download

nltk_download(['stopwords', 'punkt'], download_dir=_os.path.join(get_project_root_path(), 'temp'), raise_on_error=True)

print(stopwords.words('english'))
print(word_tokenize("I am trying to find the download path 99."))

ข้อผิดพลาด:

ไม่พบทรัพยากร punkt กรุณาใช้ NLTK Downloader เพื่อรับทรัพยากร:

นำเข้า nltk nltk.download ('punkt')

ตอนนี้ถ้าฉันต่อท้าย ntlk data path กับพา ธ ดาวน์โหลดของฉันมันก็ใช้งานได้:

import os as _os

from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize

from nltk import download as nltk_download
from nltk.data import path as nltk_path


nltk_path.append( _os.path.join(get_project_root_path(), 'temp'))


nltk_download(['stopwords', 'punkt'], download_dir=_os.path.join(get_project_root_path(), 'temp'), raise_on_error=True)

print(stopwords.words('english'))
print(word_tokenize("I am trying to find the download path 99."))

ใช้งานได้ ... ไม่แน่ใจว่าเหตุใดจึงทำงานได้ในกรณีหนึ่ง แต่ไม่ใช่อีกกรณีหนึ่ง แต่ข้อความแสดงข้อผิดพลาดดูเหมือนจะบอกเป็นนัยว่าไม่ได้ตรวจสอบในโฟลเดอร์ดาวน์โหลดในครั้งที่สอง หมายเหตุ: ใช้ windows8.1 / python3.7 / nltk3.5

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.