使用 CoreNLP 将句子分割成子句

Segmenting sentence into subsentences with CoreNLP

我正在解决以下问题:我想使用 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']

如果有任何帮助,我将不胜感激:)

我怀疑您正在寻找的工具是 class 本身的 Tregex, described in more detail in the power point here or the Javadoc

对于您的情况,我相信您正在寻找的模式只是 S。所以,像这样:

tregex.sh “S” <path_to_file>

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

顺便说一句:我相信片段“,但”实际上并不是一个句子,正如您在图中突出显示的那样。相反,您突出显示的节点包含整个句子“Richard is working with CoreNLP, but does not really understand what he is doing”。然后 Tregex 会将整个句子作为匹配项之一打印出来。同样,“does not really understand what”不是一个句子,除非它包含整个 SBAR:“does not understand what he is doing”。

如果您只想要 "leaf" 个句子(即一个句子不包含在另一个句子中),您可以尝试更像这样的模式:

S !>> S

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

好的,我发现可以按如下方式执行此操作:

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()

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