我已经安装了syntaxnet,并且能够使用提供的演示脚本运行解析器。理想情况下,我希望直接从python运行它。我发现的唯一代码是:
import subprocess
import os
os.chdir(r"../models/syntaxnet")
subprocess.call([
"echo 'Bob brought the pizza to Alice.' | syntaxnet/demo.sh"
], shell = True)这是一个完全的灾难--效率低下且过于复杂(从python调用python应该用python来完成)。
我如何直接调用python,而不需要查看shell脚本、标准I/O等等?
编辑-为什么不像打开syntaxnet/demo.sh并读取它那样容易呢?
这个shell脚本调用两个python脚本(parser_eval和conll2tree),它们作为python脚本编写,不能导入python模块而不会导致多个错误。仔细观察会产生额外的类似脚本的层和本机代码。这些上层需要重构,以便在python上下文中运行整个过程。难道没有人用这样的修改来分叉syntaxnet或打算这样做吗?
发布于 2016-10-02 09:08:53
总之,将demo.sh运行的两个脚本(eval.py和https://github.com/tensorflow/models/blob/master/syntaxnet/syntaxnet/conll2tree.py)重构为一个暴露您可以调用的Python的Python模块似乎并不是一个问题。
这两个脚本都使用Tensorflow的tf.app.flags API (在这里这里有这样的问题:tf.app.flags in TensorFlow的目的是什么?),因此这些脚本必须重构成常规参数,因为tf.app.flags是一个进程级的单例。
所以是的,您只需做一些工作就可以将这些调用作为Python :)
发布于 2017-07-04 10:07:37
我已经在我的云服务器上成功地运行了它们。我想分享以下几点:
从我用中文模型进行的测试来看,syntaxnet很慢,它花了3秒来处理一个查询,用了9秒来处理50个查询。加载模型有固定的成本。
对于dragnn模型,它是快速的,但我对解析结果不满意(仅用中文进行测试)。
PS:我不喜欢synataxnet的工作方式,比如使用bazel和读取stdin中的数据,如果您想定制它,您可以找到一些信息这里。
帮助api.md的其他资源
发布于 2017-09-05 09:55:38
将SyntaxNet与您自己的代码集成的最佳方法是将其作为web服务。我这么做是为了分析葡萄牙语文本。
我首先调整了一个现有的带有SyntaxNet和Tensorflow服务的Docker,只为葡萄牙语运行,以保持低内存。它运行得非常快,而且很容易与您的代码集成。
我写了一篇关于它的博文,你可以很容易地将它改编成任何其他语言:
http://davidsbatista.net/blog/2017/07/22/SyntaxNet-API-Portuguese/
https://stackoverflow.com/questions/39075339
复制相似问题