我有一些文字;我想提取不以标点符号分隔的单词对。这是代码:
//n-grams
Pattern p = Pattern.compile("[a-z]+");
if (n == 2) {
p = Pattern.compile("[a-z]+ [a-z]+");
}
if (n == 3) {
p = Pattern.compile("[a-z]+ [a-z]+ [a-z]+");
}
Matcher m = p.matcher(text.toLowerCase());
ArrayList<String> result = new ArrayList<String>();
while (m.find()) {
String temporary = m.group();
System.out.println(temporary);
result.add(temporary);
}
问题是它会跳过一些匹配项。例如
“我的名字是詹姆斯”
,对于 n = 3,必须匹配
“我的名字是”和“名字是詹姆斯”
,但它只匹配第一个。有办法解决这个问题吗?
您可以使用前瞻中的组来捕获它
(?=(\b[a-z]+\b \b[a-z]+\b \b[a-z]+\b))
这会导致它分为两组。所以在你的情况下它会是
组1->my name is
组2->name is james
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)