我有这种模式来获得句子中名词短语之间的因果关系:
<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 的合适算法是什么?
谢谢
正则表达式 (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