首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将命令行输出从Freeling转换为可消费数组

如何将命令行输出从Freeling转换为可消费数组
EN

Stack Overflow用户
提问于 2016-11-08 12:40:26
回答 2查看 124关注 0票数 1

我用Ruby来做这件事。Freeling (一个NLP工具)有一个浅解析器,当我运行一个浅解析命令时,它会为文本“我刚读过书,蚱蜢躺得很重”返回这样的字符串。

代码语言:javascript
复制
a = <<EOT
S_[
  sn-chunk_[
    +(I i PRP -)
  ]
  adv_[
    +(just just RB -)
  ]
  vb-chunk_[
    +(read read VB -)
  ]
  sn-chunk_[
    (the the DT -)
    +n-chunk_[
      (book book NN -)
      +n-chunk_[
        +(The_Grasshopper_Lies_Heavy the_grasshopper_lies_heavy NP -)
      ]
    ]
  ]
  st-brk_[
    +(. . Fp -)
  ]
]

EOT

我想从这里得到以下数组:

代码语言:javascript
复制
["I", "just", "read", "the book The Grasshopper Lies Heavy","."]

(我希望合并树下的单词,并将其作为一个数组元素。)

到目前为止,我已经写了这么多:

代码语言:javascript
复制
b = a.gsub(/.*\[/,'[').gsub(/.*\+?\((\w+|.) .*/,'\1').gsub(/\n| /,"").gsub("_","")

回传

代码语言:javascript
复制
[[I][just][read][the[book[The Grasshopper Lies Heavy]]][.]]

那么,如何获得所需的数组呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-08 12:50:45

从你的解决方案到目前为止:

代码语言:javascript
复制
result = a.gsub(/.*\[/,'[').gsub(/.*\+?\((\w+|.) .*/,'\1').gsub(/\n| /,"").gsub("_"," ")
result.split('][').map { |s| s.gsub(/\[|\]/, ' ').strip }     # ["I", "just", "read", "the book The Grasshopper Lies Heavy", "."]
票数 2
EN

Stack Overflow用户

发布于 2016-11-30 07:56:32

如果您通过API从Ruby调用FreeLing,您可以得到树并随意遍历它。

如果您使用命令行程序的输出并将其作为字符串加载到Ruby中,则使用选项“- output conll”调用它可能会更容易,这将产生一种更容易处理的表格格式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40487236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档