0

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

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

NP是名词短语。

如果我有一句话:

Technology can have negative impact on social interactions

然后基于上述模式,NP I匹配技术NP II匹配社交交互

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

谢谢

4

1 回答 1

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
于 2012-05-15T08:22:11.903 回答