我想在python中使用syntaxnet的解析器标记(例如:VBD ROOT,NN nsubj等)来帮助创建一个chatterbot。输入在控制台中完成。
问题:如何才能在变量中获得仅VBP ROOT的结果而不是其他内容?我能够使用这个调用来打印解析树的ASCII版本:subprocess.call(["echo 'Bob brought the pizza to Alice.' | syntaxnet/demo.sh"], shell =True)
但我对如何获取特定变量并将其存储在python变量中有点困惑。
p.s:我一周前开始学习python。
答案 0 :(得分:3)
我也是python和SyntaxNet的初学者。我所做的是通过删除
将SyntaxNet的输出从树更改为制表符分隔的文本文件 bazel-bin/syntaxnet/conll2tree \
--task_context=$MODEL_DIR/context.pbtxt \
--alsologtostderr
来自SyntaxNet文件夹中的demo.sh。运行此命令echo 'open Book, which I have written with laboratory writer, with libreoffice writer.' | syntaxnet/demo.sh > output.txt
文本文件是这样的:
然后,您可以使用csv.reader
读取数据,将其转为list
,然后搜索sublists
的第4列(列号从'0'开始)和第7列,以查找{{ 1}}
我把上面的解释代码:
ROOT
请注意,此代码由bignner编写,但它至少对我有效。
答案 1 :(得分:2)
如果您是Python初学者,并且您想要使用的只是词性(POS)标签,那么SyntaxNet可能有点过分。 SpaCy易于使用且非常准确。
答案 2 :(得分:2)
我在我的博客上写了一篇简单的文章,展示了如何将语法网输出加载到NLTK的结构中,以便将基于PoS和依赖关系的名词短语转换为DependencyGraph: