如何在一个句子中获得名词短语之间的关系?

时间:2012-05-15 08:06:27

标签: java nlp

我有这种模式来获得句子中名词短语之间的因果关系:

<NP I> * have * effect/impact on/in <NP II>

NP是Noun Phrase。

如果我有一句话:

Technology can have negative impact on social interactions

然后基于上述模式, NP I 技术匹配, NP II 社交互动 <匹配< / p>

问题:获得NP I和NP II的适当算法是什么?

由于

1 个答案:

答案 0 :(得分:1)

正则表达式(RegEx)在这种情况下非常有用。以下正则表达式匹配您的字符串格式,并允许您分析输入的不同变量。

([\\w\\s]*?) (\\w*?) have (\\w*?) (effect|impact) (on|in) ([\\w\\s]*?)(\\.)

通过运行以下程序,您可以看到正则表达式匹配器组如何工作,组1是NP 1,组6是NP 2。

public class Regex {

    public static void main(String[] args) {
        Pattern p = Pattern.compile("([\\w\\s]*?) (\\w*?) have (\\w*?) (effect|impact) (on|in) ([\\w\\s]*?)(\\.)");
        String s = "Greenhouse gases can have negative impact on global warming.";
        Matcher m = p.matcher(s);
        if (m.find()) {
            for (int i = 0; i < m.groupCount(); i++) {
                System.out.println("Group " + i + ": " + m.group(i));
            }
        }
    }
}

在上面的示例中,分析了字符串"Greenhouse gases can have negative impact on global warming."。以下是该程序的输出。

Group 0: Greenhouse gases can have negative impact on global warming.
Group 1: Greenhouse gases
Group 2: can
Group 3: negative
Group 4: impact
Group 5: on
Group 6: global warming