3

我正在解决以下问题:我想使用 Stanford CoreNLP 将句子分成子句。例句可能是:

"Richard is working with CoreNLP, but does not really understand what he is doing"

我现在希望将我的句子拆分为单个“S”,如下面的树形图所示:

在此处输入图像描述

我希望输出是一个带有单个“S”的列表,如下所示:

['Richard is working with CoreNLP', ', but', 'does not really understand what', 'he is doing']

我会非常感谢任何帮助:)

4

2 回答 2

2

我怀疑您正在寻找的工具是Tregex ,在此处的 power point或类本身的Javadoc中有更详细的描述。

在你的情况下,我相信你正在寻找的模式是简单的S。所以,像:

tregex.sh “S” <path_to_file>

其中文件是 Penn Treebank 格式的树 - 也就是说,类似于(ROOT (S (NP (NNS dogs)) (VP (VB chase) (NP (NNS cats))))).

顺便说一句:我相信片段 " , but " 实际上不是一个句子,正如您在图中突出显示的那样。相反,您突出显示的节点包含整个句子“ Richard 正在使用 CoreNLP,但并不真正理解他在做什么”。然后,Tregex 会将整个句子作为匹配项之一打印出来。同样,“不真正了解什么”不是一个句子,除非它包含整个 SBAR:“不了解他在做什么”。

如果您只想要“叶子”句子(即一个不被另一个句子包含的句子),您可以尝试一种更像是:

S !>> S

注意:我没有测试过这些模式——使用风险自负!

于 2018-11-06T06:39:00.370 回答
0

好的,我发现这样做如下:

import requests

url = "http://localhost:9000/tregex"
request_params = {"pattern": "S"}
text = "Pusheen and Smitha walked along the beach."
r = requests.post(url, data=text, params=request_params)
print r.json()

有人知道如何使用其他语言(我需要德语)吗?

于 2018-11-06T10:21:29.407 回答