java - TokensRegex 中正则表达式的开始/结束

标签 java regex stanford-nlp

假设我有以下代码:

TokenSequencePattern p = TokenSequencePattern.compile("[{tag:/JJ.*/}] [{tag:/NN.*/}]");
TokenSequenceMatcher m = tPattern.getMatcher(coreLabelList);
while (tMatcher.find()){
    List<CoreMap> matches = m.groupNodes();
}

我想在这里捕获的是一个形容词,后面跟着一个名词,即它必须以一个形容词开头,必须以一个名词结尾。例如,如果我有“美丽的围巾”,那么它应该是一个匹配项,但如果我有“带有白点的漂亮围巾”,它就不应该是一个匹配项。目前,上面的标记正则表达式与这两个短语都匹配。如何指定序列的准确开始和准确结束?

最佳答案

您可以使用

TokenSequencePattern p = TokenSequencePattern.compile("[tag:/JJ.*/] [tag:/NN.*/]");

使用A round ball is populate very high in the blue sky.进行测试,得到round ballblue sky子字符串。

要仅获得整个字符串匹配,如果您想使用Matcher#find()(带有 Matcher#matches(), anchor 是隐含的)。

因此,要仅将 round ball 字符串匹配为形容词和名词的组合,您可以使用

TokenSequencePattern p = TokenSequencePattern.compile("^[tag:/JJ.*/] [tag:/NN.*/]$");

TokenSequencePattern p = TokenSequencePattern.compile("\\A[tag:/JJ.*/] [tag:/NN.*/]\\z");

^/\A 代表字符串的开头(此外,\A 始终匹配字符串的开头) 和 $/\z 匹配字符串的末尾(请注意,\z 将始终匹配字符串的最末尾,而 $ - 即使您没有使用多行修饰符 - 允许在其后添加尾随换行符)。

注意: anchor 在 CoreNLP 3.7.0 上进行了测试。它们在某些版本上不起作用(例如,在 CoreNLP 3.5.1 上不起作用,它会抛出错误:第 1 行第 1 列出现词法错误。遇到:“^”(94),之后:“” )

关于java - TokensRegex 中正则表达式的开始/结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40343966/

相关文章:

java - 如何使用 Simmetrics java 计算重叠系数和 Jaro Winkler

c# - 如何使用 Regex 将十进制值中的句点转换为对 URL 更友好的新闻报道

regex - perl 正则表达式 - 捕获用空格分隔的四个数字

java - 在 C# 中使用斯坦福 NLP 库,在尝试获取情绪(正面/负面)时,它总是返回 -1!知道为什么吗?

java - 如何获取树的 Stanford Dependencies "nsubj"主题的值?

java - 斯坦福大学 CoreNLP 正在将两个不同的实体识别为相同的实体,而本不该如此

java - 为什么 lambda 翻译需要生成静态方法?

java - Xades4j 验证 - 无法创建空 :null from a http://www. w3.org/2000/09/xmldsig#

java - NCAA 2011/12 男子篮球队和球员统计数据的 API

regex - awk - 如果下一行与模式不匹配则删除行