在Anaconda / NLTK中找不到Genia Tagger文件错误

时间:2015-08-18 17:26:26

标签: python package nlp nltk anaconda

我需要使用NLTK执行文本预处理任务,例如句子拆分,标记化和标记。我想使用GENIA标记符进行标记。我正在使用Anaconda 3.10版,并通过以下命令安装了geniatagger。

import geniatagger
tagger =geniatagger.GeniaTagger('C:\Users\dell\Anaconda\geniatagger\geniatagger')
print tagger.parse('Welcome to natural language processing!')

在IPython控制台中,我输入以下代码。

---------------------------------------------------------------------------
WindowsError                              Traceback (most recent call last)
<ipython-input-2-52e4d65c2d02> in <module>()
----> 1 tagger = geniatagger.GeniaTagger('C:\Users\dell\Anaconda\geniatagger\geniatagger')
  2 print tagger.parse('Welcome to natural language processing!')
  3 

 C:\Users\dell\Anaconda\lib\site-packages\geniatagger_python-0.1-py2.7.egg\geniatagger.pyc in __init__(self, path_to_tagger)
 19         self._tagger = subprocess.Popen('./'+os.path.basename(path_to_tagger),
 20                                         cwd=self._dir_to_tagger,
 ---> 21                                         stdin=subprocess.PIPE, stdout=subprocess.PIPE)
 22 
 23     def parse(self, text):

 C:\Users\dell\Anaconda\lib\subprocess.pyc in __init__(self, args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags)
708                                 p2cread, p2cwrite,
709                                 c2pread, c2pwrite,
--> 710                                 errread, errwrite)
711         except Exception:
712             # Preserve original exception in case os.close raises.

C:\Users\dell\Anaconda\lib\subprocess.pyc in _execute_child(self, args, executable, preexec_fn, close_fds, cwd, env, universal_newlines, startupinfo, creationflags, shell, to_close, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite)
956                                          env,
957                                          cwd,
--> 958                                          startupinfo)
959             except pywintypes.error, e:
960                 # Translate pywintypes.error to WindowsError, which is

WindowsError: [Error 2] The system cannot find the file specified

按Enter键时出现以下错误消息。

{{1}}

为什么会收到此错误消息?我怎样才能解决这个问题?

如果我立即使用此标记,它是否也会执行标记化部分?

注意:geniatagger python文件位于'geniatagger'文件夹中。

1 个答案:

答案 0 :(得分:2)

<强> TL; DR

# Install Genia Tagger (C code).
$ git clone https://github.com/saffsd/geniatagger && cd geniatagger && make && cd ..
# Install Genia Tagger (python wrapper)
$ git clone https://github.com/informationsea/geniatagger-python.git && cd geniatagger-python && sudo python setup.py install && cd ..
$ python
>>> from geniatagger import GeniaTagger
>>> tagger = GeniaTagger('./geniatagger/geniatagger')
>>> loading morphdic...done.
loading pos_models................done.
loading chunk_models....done.
loading named_entity_models..done.

>>> print tagger.parse('This is a pen.')
[('This', 'This', 'DT', 'B-NP', 'O'), ('is', 'be', 'VBZ', 'B-VP', 'O'), ('a', 'a', 'DT', 'B-NP', 'O'), ('pen', 'pen', 'NN', 'I-NP', 'O'), ('.', '.', '.', 'O', 'O')]

我不确定Genia tagger的软件包是否可以从conda开箱即用,所以我认为原生的python / pip修复更简单。

首先,在NLTK中不支持Genia Tagger(至少尚未=)),因此NLTK安装/模块不存在问题。

问题可能在于原始GeniaTagger C代码使用的一些过时导入(http://www.nactem.ac.uk/tsujii/GENIA/tagger/)。

所以要解决这个问题,你必须在原始代码中添加#include <cstdlib>,但谢天谢地@saffsd已经这样做了,并把它很好地放在他的github仓库中(https://github.com/saffsd/geniatagger/blob/master/morph.cpp

然后安装python包装器,您可以:

  • 从官方pypi安装:pip install https://pypi.python.org/packages/source/g/geniatagger-python/geniatagger-python-0.1.tar.gz

  • 或使用其他一些github repo来安装,例如首先出现在谷歌搜索中的https://github.com/informationsea/geniatagger-python

最后,python中的GeniaTagger初始化是相当奇怪的,因为它并没有真正占用标记器目录的路径,而是标记器本身,并假设模型文件位于同一目录中标记器,请参阅https://github.com/informationsea/geniatagger-python/blob/master/geniatagger.py#L19

并且可能期望使用&#39; ./'在第一级目录路径中,您必须将标记器初始化为GeniaTagger('./geniatagger/geniatagger')

超出安装问题。如果你对GeniaTagger使用python包装器,GeniaTagger对象中只有一个函数,即parse(),当你使用parse()时,它会输出一个元组列表对于每个句子,输入是一个句子字符串。每个元组中的项目是: