Python Anaconda/NLTK中未找到Genia标记器文件错误

Python Anaconda/NLTK中未找到Genia标记器文件错误,python,package,nlp,nltk,anaconda,Python,Package,Nlp,Nltk,Anaconda,我需要使用NLTK执行文本预处理任务,例如句子分割、标记和标记。我想使用tagger进行标记。我使用的是Anaconda 3.10版,并通过以下命令安装了Geniatager python setup.py install 在IPython控制台中,我输入了以下代码 import geniatagger tagger =geniatagger.GeniaTagger('C:\Users\dell\Anaconda\geniatagger\geniatagger') print tagger.p

我需要使用NLTK执行文本预处理任务,例如句子分割、标记和标记。我想使用tagger进行标记。我使用的是Anaconda 3.10版,并通过以下命令安装了Geniatager

python setup.py install
在IPython控制台中,我输入了以下代码

import geniatagger
tagger =geniatagger.GeniaTagger('C:\Users\dell\Anaconda\geniatagger\geniatagger')
print tagger.parse('Welcome to natural language processing!')
按Enter键时出现以下错误消息

---------------------------------------------------------------------------
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
---------------------------------------------------------------------------
WindowsError回溯(最近一次调用上次)
在()
---->1 tagger=geniatagger.geniatagger('C:\Users\dell\Anaconda\geniatagger\geniatagger')
2 print tagger.parse('欢迎使用自然语言处理!')
3.
C:\Users\dell\Anaconda\lib\site packages\geniatagger\u python-0.1-py2.7.egg\geniatagger.pyc in uuuu init_uuuu(self,路径到标记器)
19 self._标记器=subprocess.Popen('./'+os.path.basename(路径_到_标记器),
20 cwd=自指向标记器,
--->21标准偏差=子流程管道,标准偏差=子流程管道)
22
23 def解析(self,text):
C:\Users\dell\Anaconda\lib\subprocess.pyc in_uuuuinit_uuuuu(self、args、bufsize、executable、stdin、stdout、stderr、preexec_fn、close_fds、shell、cwd、env、universal_新行、startupinfo、creationflags)
708 p2cread,p2cwrite,
709 c2pread,c2pwrite,
-->710错误读取,错误写入)
711例外情况除外:
712#保留原始异常以防os.close引发。
C:\Users\dell\Anaconda\lib\subprocess.pyc in_execute_child(self、args、execute、preexec_fn、close_fds、cwd、env、universal_新行、startupinfo、creationflags、shell、to_close、p2cread、p2cwrite、c2pwrite、errread、errwrite)
956环境,
957化学武器,
-->958(创业资讯)
959除pywintypes.error外,e:
960#将pywintypes.error转换为WindowsError,即
WindowsError:[错误2]系统找不到指定的文件
为什么我会收到此错误消息?我怎样才能解决这个问题

如果我直接使用这个标记,它还会执行标记化部分吗


注意:Geniatager python文件位于“Geniatager”文件夹中

TL;博士

# 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标记器(至少还不支持=),所以NLTK安装/模块没有问题

问题可能在于原始Geniatager C代码使用的一些过时的导入()

因此,要解决这个问题,您必须将
#include
添加到原始代码中,但谢天谢地@saffsd已经这样做了,并将其很好地放在了他的github repo()中

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

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

  • 或者使用其他github repo进行安装,例如,在google搜索中首先出现的

最后,python中的
geniatager
初始化非常奇怪,因为它实际上并不是指向标记器目录的路径,而是标记器本身,并且假设模型文件与标记器位于同一目录中,请参见

它可能希望在第一级目录路径中使用“/”,因此您必须初始化标记器,例如
GeniaTagger(“./GeniaTagger/GeniaTagger”)


除了安装问题。如果您对Geniatager使用python包装,则
Geniatager
对象中只有一个函数,即
parse()
,当您使用
parse()
时,它将输出每个句子的元组列表,输入为一个句子字符串。每个元组中的项目包括:

  • 标记(表面字)
  • 引理(见)
  • POS标记(看起来像Penn Treebank标记集,请参阅)
  • 名词组块(见)
  • 命名实体块

我在cmd中尝试过,输出为3.0.3Hi alvas,@saffsd提到了genia tagger的3.0.2版本(上传于2016年2月9日)。然而,根据版本3.0.1中的提交注释,您知道更新了什么吗?在执行此x=tagger.parse('这是笔')时,我得到一个错误:TypeError:需要一个类似字节的对象,而不是'str'