zpar统计标记/语法分析器的包装

python-zpar的Python项目详细描述


简介

python zpar是围绕ZPar parser的python包装器。 zpar由Yue Zhang编写 他在牛津大学的时候。根据它的主页:zpar是 一种统计自然语言分析器,它执行语法分析 任务包括分词、词性标注和句法分析。 ZPAR支持多种语言和多种语法形式。ZPAR公司 在汉语和英语方面发展最为迅猛 为其他语言提供通用支持。ZPAR处理速度快 使用标准Penn Teebank(墙)每秒超过50句 (华尔街日报)数据。

我编写python zpar是因为我需要一个快速高效的解析器 NLP的工作主要是在Python中完成的,而不是C++。我想成为 能够直接从python使用这个解析器,而不必创建 一堆文件并在子进程中运行它们。python zpar不 只提供了一个简单的python包装器,还提供了一个xml-rpc zpar 服务器,使大文件的批处理更容易。

python zpar使用 ctypes,非常 与python捆绑在一起的很酷的外部函数库,允许调用 直接在c dll或共享库中使用函数。

安装

目前,python zpar只适用于64位linux和os x系统。 这是我每天使用的两个平台。我很高兴能得到 随着时间的推移,python zpar在其他平台上工作。拉取请求是 欢迎!

为了让python zpar工作,它需要c函数,这些函数可以是 直接打电话来。因为ZPAR中唯一用户公开的入口点是 命令行客户机,我需要编写一个共享库 在zpar功能之上构建的函数,但在 cTypes能够理解的方式。

因此,为了从头开始构建python zpar,我们需要 下载zpar源代码,用新功能修补它并编译 共享库。所有这些都是在安装时自动发生的 使用pip:

pip install python-zpar

重要:在OS X上,安装将仅与^{tt1}一起工作$ 使用macportshomebrew。无法使用编译zpar源 clang。如果在克隆后编译代码时遇到问题 存储库或使用pip安装包,您可以尝试 显式重写C++编译器:

CXX=<path to c++ compiler> make -e

CXX=<path to c++ compiler> pip install python-zpar

如果您对共享库中的c函数感到好奇 模块看起来像,请参见src/zpar.lib.cpp

用法

要使用python zpar,需要zpar的英文模型。他们可以是 从zpar发布页面here下载。 有三种模型:词性标记器、选区分析器和 依赖关系分析器。在下面的例子中,模型是 在当前目录的english-models目录中。

下面是一个如何使用python zpar的小例子:

fromsiximportprint_fromzparimportZPar# use the zpar wrapper as a context managerwithZPar('english-models')asz:# get the parser and the dependency parser modelstagger=z.get_tagger()depparser=z.get_depparser()# tag a sentencetagged_sent=tagger.tag_sentence("I am going to the market.")print_(tagged_sent)# tag an already tokenized sentencetagged_sent=tagger.tag_sentence("Do n't you want to come with me to the market ?",tokenize=False)print_(tagged_sent)# get the dependency parse of an already tagged sentencedep_parsed_sent=depparser.dep_parse_tagged_sentence("I/PRP am/VBP going/VBG to/TO the/DT market/NN ./.")print_(dep_parsed_sent)# get the dependency parse of an already tokenized sentencedep_parsed_sent=depparser.dep_parse_sentence("Do n't you want to come with me to the market ?",tokenize=False)print_(dep_parsed_sent)

上面的代码示例生成以下输出:

I/PRP am/VBP going/VBG to/TO the/DT market/NN ./.

Do/VBP n't/RB you/PRP want/VBP to/TO come/VB with/IN me/PRP to/TO the/DT market/NN ?/.

I       PRP   1    SUB
am      VBP   -1   ROOT
going   VBG   1    VC
to      TO    2    VMOD
the     DT    5    NMOD
market  NN    3    PMOD
.       .     1    P

Do      VBP  -1  ROOT
n't     RB   0   VMOD
you     PRP  0   SUB
want    VBP  0   VMOD
to      TO   5   VMOD
come    VB   3   VMOD
with    IN   5   VMOD
me      PRP  6   PMOD
to      TO   5   VMOD
the     DT   10  NMOD
market  NN   8   PMOD
?       .    0   P

包含注释的详细用法显示在包含的文件中 examples/zpar_example.py。运行python zpar_example.py -h以查看 所有可用选项的列表。

ZPAR服务器

该包还提供了zpar的python xml-rpc实现 使处理多个句子和文件更容易的服务器 只加载一次模型(通过cTypes接口)并允许 客户端连接并请求分析。实现在 可执行文件zpar_server,在安装 包裹。服务器非常灵活,只允许加载 你需要的模型。下面是一个如何启动服务器的示例 只加载标记器和依赖关系分析器模型:

$> zpar_server --modeldir english-models --models tagger parser depparser
INFO:Initializing server ...
Loading tagger from english-models/tagger
Loading model... done.
Loading constituency parser from english-models/conparser
Loading scores... done. (65.9334s)
Loading dependency parser from english-models/depparser
Loading scores... done. (14.9623s)
INFO:Registering introspection ...
INFO:Starting server on port 8859...

运行zpar_server -h查看所有选项的列表。

服务器运行后,可以使用客户端连接到它。一个 示例客户机包含在文件examples/zpar_client.py中,该文件 可以如下运行(请注意,如果指定自定义主机和端口 运行服务器时,需要在此处指定相同的值:

$> cd examples
$> python zpar_client.py

INFO:Attempting connection to http://localhost:8859
INFO:Tagging "Don't you want to come with me to the market?"
INFO:Output: Do/VBP n't/RB you/PRP want/VBP to/TO come/VB with/IN me/PRP to/TO the/DT market/NN ?/.
INFO:Tagging "Do n't you want to come to the market with me ?"
INFO:Output: Do/VBP n't/RB you/PRP want/VBP to/TO come/VB to/TO the/DT market/NN with/IN me/PRP ?/.
INFO:Parsing "Don't you want to come with me to the market?"
INFO:Output: (SQ (VBP Do) (RB n't) (NP (PRP you)) (VP (VBP want) (S (VP (TO to) (VP (VB come) (PP (IN with) (NP (PRP me))) (PP (TO to) (NP (DT the) (NN market))))))) (. ?))
INFO:Dep Parsing "Do n't you want to come to the market with me ?"
INFO:Output: Do VBP -1  ROOT
n't RB  0   VMOD
you PRP 0   SUB
want    VBP 0   VMOD
to  TO  5   VMOD
come    VB  3   VMOD
to  TO  5   VMOD
the DT  8   NMOD
market  NN  6   PMOD
with    IN  5   VMOD
me  PRP 9   PMOD
?   .   0   P

INFO:Tagging file /Users/nmadnani/work/python-zpar/examples/test.txt into test.tag
INFO:Parsing file /Users/nmadnani/work/python-zpar/examples/test_tokenized.txt into test.parse

注意,python zpar和所有示例脚本都应该使用 Python2.7和Python3.4。我已经在两个linux上测试了python zpar 和Mac,但不在Windows上。

node.js版本

如果你想在node.js应用程序中使用zpar,请查看我的其他项目 node-zpar

许可证

尽管python zpar是根据mit许可证授权的,这意味着 你可以用包装器代码做任何你想做的事情-zpar本身就是 根据GPLv3授权。

待办事项

  1. 改进python和c端的错误处理。
  2. 提供更多功能,例如中文分词、解析 等
  3. 可能会考虑使用CFFI 而不是cTypes。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
junit cucumber为什么会找到“runTest.java”来运行测试?   在Eclipse中找不到java KeyPairGenerator   java NotSerializableException即使在实现Serializable之后   noclassdeffounderror(java字符串连接)为什么会出现这种异常?   java Guice:将接口绑定到由动态代理创建的实例   使用Spring数据neo4j创建空间索引时发生java错误   java对于需要在50多个excel文件上运行并且每个文件平均包含25k行的项目,最佳的方法是什么   javaNIO中的java缓冲区写入/发送消息问题   如何在Java/eclipse中添加不调用super()的警告   JavaSpring:mvcUrl映射错误的id   java应该在getInstance或构造函数中使用Init方法吗?   安卓中的java空指针异常错误   java Jsoup不能完全获取原始html代码