TypeError: __init__() missing 1 required positional argument: ‘parser_dirname‘ (python自然语言处理第十章最后示例)

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 
    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是否安装成功。

TypeError: __init__() missing 1 required positional argument: ‘parser_dirname‘ (python自然语言处理第十章最后示例)_第1张图片

到这里,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 
    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 
    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的支持,有时间再搞吧,倦了。。。

你可能感兴趣的:(NLP,nlp,自然语言处理,python,exception)