2016-12-29 127 views
1

我是新手,但我試圖通過一本非常棒的劇本在python終端中運行一些命令。具體來說,我想下載一個語料庫。通過直觀的劇本在python終端中運行命令

$python 
>import nltk 
>nltk.download 
> ~ d (download) 
> ~ book 
> ~ q (quit) 
>quit() 

目前,我的劇本文件創建通過requirements.txt安裝NLTK的virtualenv中,但我不知道怎麼去具體NLTK功能,而無需手動下載。

我在我的搜索中跑過這條線,python -m nltk.downloader all它滿足我的程序,但它是一個很多不必要的東西下載,佔用內存。然而,在此期間,我曾嘗試它運行:

- name: Get the nltk corpus 
    shell: "python -m nltk.downloader all" 

但這犯錯與消息:

TASK [Get the nltk corpus]***************************************************** 
fatal: [127.0.0.1]: FAILED! => {"changed": true, "cmd": "python -m nltk.downloader book", "delta": "0:00:00.016227", "end": "2016-12-29 20:06:09.156953", "failed": true, "rc": 1, "start": "2016-12-29 20:06:09.140726", "stderr": "/usr/bin/python: No module named nltk", "stdout": "", "stdout_lines": [], "warnings": []} 

是否有關於如何使無論是上面的代碼工作的任何建議或另一種方法來達到我的目標,通過可靠的方式獲得特定的nltk功能?


UPDATE

只是爲了更清楚一點,我想運行一個命令,將在Python殼正常工作在ansible劇本賣出之外。

例如,行nltk.download("book")完全按照我需要它在Python終端內部工作。但是我需要運行這個程序,而無需手動輸入終端並通過完整的劇本中的任務。

我試過類似的東西,雖然它編譯,它並沒有真正下載書本語料庫,因爲我需要它。

- name: Get the "book" nltk corpus 
    shell: "/usr/local/venv/bin/python -m nltk.downloader book" 

回答

2

Documentationsource code提示,您可以下載單獨的模塊:

個別軟件包可以通過調用一個參數下載()函數來下載,給該包的包標識符應該下載

如果book是在你的例子包(我不熟悉NLTK),嘗試:

- name: Get the nltk corpus 
    shell: "python -m nltk.downloader book" 
+0

這是一個奇妙的建議,我會嘗試,但在我可以修改該聲明之前,我需要能夠使其運行。在ansible playbook中的代碼不能編譯。 (我已經編輯並添加了上面的錯誤信息) –

+0

如果你將pip包安裝到virtualenv中,不要忘記'chdir'(這裏有一個'shell'模塊的參數),並且運行本地python解釋器而不是默認python 。 –

+0

工作!我必須運行到virtualenv明確存在的python路徑'/ path/in/venv/to/** python ** -m nltk.downloader book' 非常感謝! –

1

命令nltk.download()用於下載NLTK 數據:語料庫和訓練有素的模型之類的POS惡搞。要使用它,您必須已經安裝了nltk代碼,即您必須能夠成功運行import nltk。你說你在虛擬環境中運行nltk模塊,但是你的錯誤消息暗示了:/usr/bin/python: No module named nltk。如果這是真正的問題,你首先需要整理出來(和/或更正你的問題)。

假設您可以啓動Python以便import nltk聲明成功,您可以下載一個語料庫(您聲明的目標),例如對於Brown語料庫使用nltk.import("brown")。 (當然這必須在import nltk之後運行。)要下載NLTK手冊中提到的所有資源,請使用nltk.import("book")

+0

我已經成功下載了nltk,並且可以'導入nltk'。這不是我在問題中提到的問題。問題是如何在劇本中自動化這個問題。正如解決方案中的代碼一樣。 –

+0

你有沒有試過在你的Python會話中運行'nltk.download(「brown」)'?重點是,如果你這樣做,你不需要提供對交互式GUI彈出窗口的響應。 – alexis

+0

這在python會話中正常工作,但我的目標是讓這個語句在沒有我的情況下手動打開python會話並在那裏運行。我想要打開一個python會話並運行它,然後退出python會話。 –

相關問題