我正在寻找一种将复杂句子分割成子句的好工具。由于我使用CoreNLP工具进行解析,我知道OpenIE在从句子中提取关系三元组的过程中处理子句分段。目前,我使用github repository中的OpenIEDemo类中提供的示例代码,但它没有正确地将句子分段为子句。 这是代码:
// Create the Stanford CoreNLP pipeline
Properties props = PropertiesUtils.asProperties(
"annotators", "tokenize,ssplit,pos,lemma,parse,natlog,openie");
StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
//Annotate sample sentence
text = "I don't think he will be able to handle this.";
Annotation doc = new Annotation(text);
pipeline.annotate(doc);
// Loop over sentences in the document
int sentNo = 0;
for (CoreMap sentence : doc.get(CoreAnnotations.SentencesAnnotation.class)) {
List<SentenceFragment> clauses = new OpenIE(props).clausesInSentence(sentence);
for (SentenceFragment clause : clauses) {
System.out.println("Clause: "+clause.toString());
}
}
我希望get as output三个子句:
相反,代码返回完全相同的输入:
然而,句子
奥巴马出生在夏威夷,他不再是我们的总统。
有两个条款:
(似乎协调连接是一个很好的分割指标)
OpenIE是否通常用于子句分段,如果是,如何正确执行?
欢迎任何其他关于子句分割的实用方法/工具。提前谢谢。
答案 0 :(得分:1)
因此,子句segmenter与OpenIE的关系比名称所暗示的要紧密集成。该模块的目标是产生逻辑上包含的条款,然后可以将其缩短为逻辑上包含的句子片段。看看你的两个例子:
我认为他无法解决这个问题。
我认为这三个条款都不是原始句子中的一个:
奥巴马出生在夏威夷,他不再是我们的总统。
当然,这两个条款应该是“奥巴马出生在夏威夷”和“他不再是我们的总统”。尽管如此,子句拆分器输出原始句子代替第一个子句,期望OpenIE提取器的下一步将剥离“conj:和”边缘。
答案 1 :(得分:0)
您是否看过这款Stanford CoreNLP解析树可视化工具? http://nlpviz.bpodgursky.com/
我没有编程,但我一直在寻找可能表示独立条款的CoreNLP标签组(独立站立)。
你的例子:
我不认为他能够处理这个问题 -
我不认为
S-NP-VP
他将能够
S-NP-VP
处理此
VP-VB-NP
另一个例如研究人员正在开发算法,以利用从(MRI)到转向毫米大小的机器人的力量
研究人员正在开发
S-NP-VP
利用武力
VP-NN-NP
转向毫米尺寸的机器人
VP-VB-NP
红线表示第一层,蓝线表示第二层
红线是第一层
S-NP-VP
蓝线是第二层
S-NP-VP
某些金属离子可能对细胞有害,而其他金属离子则是生化反应所必需的
某些金属离子可能有害
S-NP-DT
其他人是必要的
S-NP-NNS
但是如何确定通常是基于可能受到解释的提问,而其他许多国家都有法律规定玩家可以保留不同的天数。
如何确定通常基于提问
S-SBAR-VP
许多其他州已经
S-NP-VB
保留不同的数字
VP-VPN-NP
例如,过去有关老年人和非人类灵长类动物的数据表明饮食类胡萝卜素可以减缓认知能力的下降。
过去的数据已经建议
S-NP-VP
膳食类胡萝卜素可能会减慢S-NP-VP
我注意到的组合:
S-NP-VP
S-NP-DT
S-NP-NNS
S-SBAR-VP
S-VP-VB
VP-VPN-NP
VP-NN-NP
VP-VB-NP