在 python 中使用 Syntaxnet POS 标签?

Using Syntaxnet POS tags in python?

我想使用 python 中 syntaxnet 的解析器标签(例如:VBD ROOT、NN nsubj 等)来帮助创建聊天机器人。输入在控制台中完成。

问题:我怎样才能在变量中得到只有 VBP ROOT 的结果而不是其他的?我能够通过此调用打印解析树的 ASCII 版本:subprocess.call(["echo 'Bob brought the pizza to Alice.' | syntaxnet/demo.sh"], shell =True) 但我对如何获取特定变量并将其存储在 python 变量中有点困惑。

p.s: 一周前开始学习python

如果您是 Python 初学者,并且只想使用词性 (POS) 标签,那么 SyntaxNet 可能有点矫枉过正。 SpaCy 易于使用且相当准确。

我也是 python 和 SyntaxNet 的初学者。我所做的是通过删除

将 SyntaxNet 的输出从树更改为制表符分隔的文本文件
  bazel-bin/syntaxnet/conll2tree \
  --task_context=$MODEL_DIR/context.pbtxt \
  --alsologtostderr

来自 SyntaxNet 文件夹中的 demo.sh。 运行 这个命令回显 'open Book, which I have written with laboratory writer, with libreoffice writer.' | syntaxnet/demo.sh > output.txt

文本文件是这样的:

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

我把上面解释的代码放上去:

#read from Syntaxnet output tab delimited textfile
def readata(filename):
      file=open(filename,'r')
      lines=file.readlines()
      lines=lines[:-1]
      data=csv.reader(lines,delimiter='\t')
#make a list of lists
      lol=list(data)
      return  lol
#find the verb which is ROOT of the sentence
      lists=readata(filename)
      for sublist in lists:
            if sublist[7]=='ROOT' and sublist[4]=='VBP': 
                  word=sublist[1]

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

我在我的博客上写了一个简单的 post 展示了如何将 syntaxnet 输出加载到 NLTK 的结构中,以根据 PoS 和依赖关系将名词短语加载到 DependencyGraph 中:

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