python自然语言处理第10章最后的示例如下:
from nltk.tag import RegexpTagger
tagger = RegexpTagger(
[('^(chases|runs)$', 'VB'),
('^(a)$', 'ex_quant'),
('^(every)$', 'univ_quant'),
('^(dog|boy)$', 'NN'),
('^(He)$', 'PRP')
]
)
rc = nltk.DrtGlueReadingCommand(depparser=nltk.MaltParser(tagger=tagger))
dt = nltk.DiscourseTester(['Every dog chases a boy', 'He runs'], rc)
dt.readings()
运行后,产生如下错误:
Traceback (most recent call last):
File "E:/Python Practice/NLP/Chapter10.py", line 344, in <module>
rc = nltk.DrtGlueReadingCommand(depparser=nltk.MaltParser(tagger=tagger))
TypeError: __init__() missing 1 required positional argument: 'parser_dirname'
在同一个示例不同的的问题中,隐约发现了解决这个问题报错的原因和的办法。原因就是:MaltParser在调用时缺少一个名叫parser_dirname的参数。也就是说,找不到MaltParser的文位置(那当然了,我们都没有安装,怎么会找到呢~)
下面是详细步骤:
Step1. 去官网MaltParser - Installation安装,这里给出最新版本maltparser-1.9.2.tar.gz,下载完成后解压缩,记住存储路径,我这里是D:\Program Files (x86)
Step2. 接下来是测试阶段。如果没有JRE的话,要安装,然后配置环境变量。这里不详细展开,大家自行搜索,比较简单~ JRE搞定后,打开命令行界面,使用命令 cd 切换到MaltParser的安装目录,这里是 D:\Program Files (x86)\maltparser-1.9.2,然后使用命令 java -jar maltparser-1.9.2.jar 测试MaltParser是否安装成功。
到这里,MaltParser就安装成功啦,我们将程序做以下修改:
rc = nltk.DrtGlueReadingCommand(depparser=nltk.MaltParser(tagger=tagger.tag, parser_dirname=r'D:\Program Files (x86)\maltparser-1.9.2'))
运行后,出现另一种错误:
D:\Anaconda3\python.exe "E:/Python Practice/NLP/Chapter10.py"
Traceback (most recent call last):
File "E:/Python Practice/NLP/Chapter10.py", line 346, in <module>
dt.readings()
File "D:\Anaconda3\lib\site-packages\nltk\inference\discourse.py", line 384, in readings
self._construct_readings()
File "D:\Anaconda3\lib\site-packages\nltk\inference\discourse.py", line 302, in _construct_readings
readings = self._get_readings(sentence)
File "D:\Anaconda3\lib\site-packages\nltk\inference\discourse.py", line 292, in _get_readings
return self._reading_command.parse_to_readings(sentence)
File "D:\Anaconda3\lib\site-packages\nltk\inference\discourse.py", line 152, in parse_to_readings
return self._glue.parse_to_meaning(sentence)
File "D:\Anaconda3\lib\site-packages\nltk\sem\glue.py", line 568, in parse_to_meaning
for agenda in self.parse_to_compiled(sentence):
File "D:\Anaconda3\lib\site-packages\nltk\sem\glue.py", line 658, in parse_to_compiled
gfls = [self.depgraph_to_glue(dg) for dg in self.dep_parse(sentence)]
File "D:\Anaconda3\lib\site-packages\nltk\sem\glue.py", line 676, in dep_parse
self.train_depparser()
File "D:\Anaconda3\lib\site-packages\nltk\sem\glue.py", line 562, in train_depparser
os.path.join("grammars", "sample_grammars", "glue_train.conll")
File "D:\Anaconda3\lib\site-packages\nltk\data.py", line 585, in find
raise LookupError(resource_not_found)
LookupError:
**********************************************************************
Resource sample_grammars not found.
Please use the NLTK Downloader to obtain the resource:
>>> import nltk
>>> nltk.download('sample_grammars')
For more information see: https://www.nltk.org/data.html
Attempted to load grammars/sample_grammars/glue_train.conll
Searched in:
- 'C:\\Users\\Admin/nltk_data'
- 'D:\\Anaconda3\\nltk_data'
- 'D:\\Anaconda3\\share\\nltk_data'
- 'D:\\Anaconda3\\lib\\nltk_data'
- 'C:\\Users\\Admin\\AppData\\Roaming\\nltk_data'
- 'C:\\nltk_data'
- 'D:\\nltk_data'
- 'E:\\nltk_data'
**********************************************************************
Process finished with exit code 1
这个比较容易理解,就是没有找到sample_grammars,而且提示中也给出了错误样例,运行以下代码,下载sample_grammars:
nltk.download('sample_grammars')
D:\Anaconda3\python.exe "E:/Python Practice/NLP/Chapter10.py"
[nltk_data] Downloading package sample_grammars to E:\nltk_data...
[nltk_data] Unzipping grammars\sample_grammars.zip.
Process finished with exit code 0
下载完成,再次运行程序,报错:
D:\Anaconda3\python.exe "E:/Python Practice/NLP/Chapter10.py"
Traceback (most recent call last):
File "E:/Python Practice/NLP/Chapter10.py", line 346, in <module>
dt.readings()
File "D:\Anaconda3\lib\site-packages\nltk\inference\discourse.py", line 384, in readings
self._construct_readings()
File "D:\Anaconda3\lib\site-packages\nltk\inference\discourse.py", line 302, in _construct_readings
readings = self._get_readings(sentence)
File "D:\Anaconda3\lib\site-packages\nltk\inference\discourse.py", line 292, in _get_readings
return self._reading_command.parse_to_readings(sentence)
File "D:\Anaconda3\lib\site-packages\nltk\inference\discourse.py", line 152, in parse_to_readings
return self._glue.parse_to_meaning(sentence)
File "D:\Anaconda3\lib\site-packages\nltk\sem\glue.py", line 568, in parse_to_meaning
for agenda in self.parse_to_compiled(sentence):
File "D:\Anaconda3\lib\site-packages\nltk\sem\glue.py", line 658, in parse_to_compiled
gfls = [self.depgraph_to_glue(dg) for dg in self.dep_parse(sentence)]
File "D:\Anaconda3\lib\site-packages\nltk\sem\glue.py", line 676, in dep_parse
self.train_depparser()
File "D:\Anaconda3\lib\site-packages\nltk\sem\glue.py", line 562, in train_depparser
os.path.join("grammars", "sample_grammars", "glue_train.conll")
File "D:\Anaconda3\lib\site-packages\nltk\parse\malt.py", line 317, in train_from_file
ret = self._execute(cmd, verbose)
File "D:\Anaconda3\lib\site-packages\nltk\parse\malt.py", line 275, in _execute
p = subprocess.Popen(cmd, stdout=output, stderr=output)
File "D:\Anaconda3\lib\subprocess.py", line 800, in __init__
restore_signals, start_new_session)
File "D:\Anaconda3\lib\subprocess.py", line 1207, in _execute_child
startupinfo)
FileNotFoundError: [WinError 2] The system cannot find the file specified
Process finished with exit code 1
下一步尝试安装完整的MaltParser,官网里说需要JDK和ANT的支持,有时间再搞吧,倦了。。。