วิธีกำหนดค่าไดเรกทอรีข้อมูล nltk จากรหัส


คำตอบ:


73

เพียงแค่เปลี่ยนรายการnltk.data.pathเป็นรายการง่ายๆ


30
หรือตั้งค่าตัวแปรสภาพแวดล้อม NLTK_DATA
แผนผัง

nltk.data.path ของฉันมี'/home/aankney/nltk_data'เป็นองค์ประกอบแรกของรายการ แต่ฉันอยู่บนเซิร์ฟเวอร์และต้องการnltk_dataให้คนอื่นใช้เซิร์ฟเวอร์ร่วมกัน ฉันจะป้องกันไม่ให้ nltk ใช้สิ่งนี้เป็นหนึ่งในเส้นทางการดาวน์โหลดได้อย่างไร
Austin A

43

จากรหัสhttp://www.nltk.org/_modules/nltk/data.html :

``nltk:path``: Specifies the file stored in the NLTK data
 package at *path*.  NLTK will search for these files in the
 directories specified by ``nltk.data.path``.

จากนั้นภายในรหัส:

######################################################################
# Search Path
######################################################################

path = []
"""A list of directories where the NLTK data package might reside.
   These directories will be checked in order when looking for a
   resource in the data package.  Note that this allows users to
   substitute in their own versions of resources, if they have them
   (e.g., in their home directory under ~/nltk_data)."""

# User-specified locations:
path += [d for d in os.environ.get('NLTK_DATA', str('')).split(os.pathsep) if d]
if os.path.expanduser('~/') != '~/':
    path.append(os.path.expanduser(str('~/nltk_data')))

if sys.platform.startswith('win'):
    # Common locations on Windows:
    path += [
        str(r'C:\nltk_data'), str(r'D:\nltk_data'), str(r'E:\nltk_data'),
        os.path.join(sys.prefix, str('nltk_data')),
        os.path.join(sys.prefix, str('lib'), str('nltk_data')),
        os.path.join(os.environ.get(str('APPDATA'), str('C:\\')), str('nltk_data'))
    ]
else:
    # Common locations on UNIX & OS X:
    path += [
        str('/usr/share/nltk_data'),
        str('/usr/local/share/nltk_data'),
        str('/usr/lib/nltk_data'),
        str('/usr/local/lib/nltk_data')
    ]

หากต้องการแก้ไขเส้นทางเพียงต่อท้ายรายการเส้นทางที่เป็นไปได้:

import nltk
nltk.data.path.append("/home/yourusername/whateverpath/")

หรือใน windows:

import nltk
nltk.data.path.append("C:\somewhere\farfar\away\path")

ไดเร็กทอรีใดที่มีไฟล์นี้
hlin117

มันอยู่ในซอร์สโค้ดดั้งเดิมของ NLTK ไปที่ไดเร็กทอรีที่คุณบันทึกซอร์สโค้ดจากนั้นไปที่nltk/nltk/data
alvas

ดูmagically_find_nltk_data()จากstackoverflow.com/questions/36382937/…
alvas


15

แทนที่จะเพิ่มnltk.data.path.append('your/path/to/nltk_data')ลงในทุกสคริปต์ NLTK ยอมรับตัวแปรสภาพแวดล้อม NLTK_DATA ( ลิงค์รหัส )

เปิด~/.bashrc(หรือ~/.profile) ด้วยโปรแกรมแก้ไขข้อความ (เช่นnano, vim, gedit) และเพิ่มบรรทัดต่อไปนี้:

export NLTK_DATA="your/path/to/nltk_data"

ดำเนินการsourceเพื่อโหลดตัวแปรสภาพแวดล้อม

source ~/.bashrc


ทดสอบ

เปิด python และดำเนินการตามบรรทัดต่อไปนี้

import nltk
nltk.data.path

คุณสามารถเห็นเส้นทางข้อมูล nltk ของคุณอยู่แล้ว

อ้างอิง: คำตอบของ @ alvations บน nltk / nltk # 1997


1

สำหรับผู้ที่ใช้ uwsgi:

ฉันประสบปัญหาเพราะต้องการให้แอป uwsgi (ทำงานเป็นผู้ใช้อื่นที่ไม่ใช่ตัวฉันเอง) เพื่อเข้าถึงข้อมูล nltk ที่ฉันดาวน์โหลดมาก่อนหน้านี้ สิ่งที่ได้ผลสำหรับฉันคือการเพิ่มบรรทัดต่อไปนี้ในmyapp_uwsgi.ini:

env = NLTK_DATA=/home/myuser/nltk_data/

สิ่งนี้ตั้งค่าตัวแปรสภาพแวดล้อมNLTK_DATAตามที่แนะนำโดย @schemacs
คุณอาจต้องเริ่มกระบวนการ uwsgi ของคุณใหม่หลังจากทำการเปลี่ยนแปลงนี้


0

อีกวิธีหนึ่งคือการก้าวไปข้างหน้า

ลองนำเข้า nltk nltk.download ()

เมื่อกล่องหน้าต่างปรากฏขึ้นถามว่าคุณต้องการดาวน์โหลดคลังข้อมูลหรือไม่คุณสามารถระบุไดเร็กทอรีที่จะดาวน์โหลดได้


0

ใช้คำแนะนำของ fnjn ด้านบนในการพิมพ์เส้นทาง:

print(nltk.data.path)

ฉันเห็นสตริงเส้นทางในรูปแบบประเภทนี้บน windows:

C:\\Users\\my_user_name\\AppData\\Roaming\\SPB_Data

ดังนั้นฉันจึงเปลี่ยนเส้นทางของฉันจาก python ประเภท forward slash '/' เป็นแบ็กสแลชคู่ '\\' เมื่อฉันใช้ path.append:

nltk.data.path.append("C:\\workspace\\my_project\\data\\nltk_books")

ข้อยกเว้นหายไป

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