Anaconda/NLTK 中找不到 Genia Tagger 文件错误
Genia Tagger file not found error in Anaconda/NLTK
我需要使用 NLTK 执行文本预处理任务,例如句子拆分、标记化和标记。我想使用 GENIA 标记器进行标记。我正在使用 Anaconda 3.10 版并通过以下命令安装了 geniatagger。
python setup.py install
在IPython控制台中,下面我输入了下面的代码。
import geniatagger
tagger =geniatagger.GeniaTagger('C:\Users\dell\Anaconda\geniatagger\geniatagger')
print tagger.parse('Welcome to natural language processing!')
按下回车键出现以下错误信息。
---------------------------------------------------------------------------
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
为什么我会收到此错误消息?我怎样才能解决这个问题?
如果我立即使用此标记,它是否也会执行标记化部分?
注意:geniatagger python 文件位于 'geniatagger' 文件夹中。
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 标记器的软件包是否可以从 conda
开箱即用,所以我认为本机 python/pip 修复更简单。
首先,NLTK 中不支持 Genia Tagger(至少现在还没有 =)),因此 NLTK installation/modules 不是问题。
问题可能在于原始 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 存储库进行安装,例如https://github.com/informationsea/geniatagger-python 从 google 搜索中最先出现的
最后,python 中的 GeniaTagger
初始化相当奇怪,因为它并没有真正获取标记器目录的路径,而是标记器本身并假定模型文件位于与标记器相同的目录,请参阅 https://github.com/informationsea/geniatagger-python/blob/master/geniatagger.py#L19 。
可能它希望在第一级目录路径中使用“./”,因此您必须这样初始化标记器 GeniaTagger('./geniatagger/geniatagger')
。
超出安装问题。如果你使用 GeniaTagger 的 python 包装器,GeniaTagger
对象中只有一个函数,即 parse()
,当你使用 parse()
时,它会输出一个元组列表对于每个句子,输入是一个句子字符串。每个元组中的项目是:
- token(面字)
- 引理(参见 Stemmers vs Lemmatizers)
- POS 标签(看起来像 Penn Treebank 标签集,参见 What are all possible pos tags of NLTK?)
- 名词块(参见 Output results in conll format (POS-tagging, stanford pos tagger))
- 命名实体块
我需要使用 NLTK 执行文本预处理任务,例如句子拆分、标记化和标记。我想使用 GENIA 标记器进行标记。我正在使用 Anaconda 3.10 版并通过以下命令安装了 geniatagger。
python setup.py install
在IPython控制台中,下面我输入了下面的代码。
import geniatagger
tagger =geniatagger.GeniaTagger('C:\Users\dell\Anaconda\geniatagger\geniatagger')
print tagger.parse('Welcome to natural language processing!')
按下回车键出现以下错误信息。
---------------------------------------------------------------------------
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
为什么我会收到此错误消息?我怎样才能解决这个问题?
如果我立即使用此标记,它是否也会执行标记化部分?
注意:geniatagger python 文件位于 'geniatagger' 文件夹中。
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 标记器的软件包是否可以从 conda
开箱即用,所以我认为本机 python/pip 修复更简单。
首先,NLTK 中不支持 Genia Tagger(至少现在还没有 =)),因此 NLTK installation/modules 不是问题。
问题可能在于原始 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 存储库进行安装,例如https://github.com/informationsea/geniatagger-python 从 google 搜索中最先出现的
最后,python 中的 GeniaTagger
初始化相当奇怪,因为它并没有真正获取标记器目录的路径,而是标记器本身并假定模型文件位于与标记器相同的目录,请参阅 https://github.com/informationsea/geniatagger-python/blob/master/geniatagger.py#L19 。
可能它希望在第一级目录路径中使用“./”,因此您必须这样初始化标记器 GeniaTagger('./geniatagger/geniatagger')
。
超出安装问题。如果你使用 GeniaTagger 的 python 包装器,GeniaTagger
对象中只有一个函数,即 parse()
,当你使用 parse()
时,它会输出一个元组列表对于每个句子,输入是一个句子字符串。每个元组中的项目是:
- token(面字)
- 引理(参见 Stemmers vs Lemmatizers)
- POS 标签(看起来像 Penn Treebank 标签集,参见 What are all possible pos tags of NLTK?)
- 名词块(参见 Output results in conll format (POS-tagging, stanford pos tagger))
- 命名实体块