在python中使用Syntaxnet POS标签?

时间:2016-06-26 00:47:17

标签: python nlp text-parsing pos-tagger syntaxnet

我想在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。

3 个答案:

答案 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

文本文件是这样的:

enter image description here

然后,您可以使用csv.reader读取数据,将其转为list,然后搜索sublists的第4列(列号从'0'开始)和第7列,以查找{{ 1}}

我把上面的解释代码:

ROOT

请注意,此代码由bignner编写,但它至少对我有效。

答案 1 :(得分:2)

如果您是Python初学者,并且您想要使用的只是词性(POS)标签,那么SyntaxNet可能有点过分。 SpaCy易于使用且非常准确。

答案 2 :(得分:2)

我在我的博客上写了一篇简单的文章,展示了如何将语法网输出加载到NLTK的结构中,以便将基于PoS和依赖关系的名词短语转换为DependencyGraph:

http://www.davidsbatista.net/blog/2017/03/25/syntaxnet/