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

Java TokensRegex中正则表达式的开始/结束,java,regex,stanford-nlp,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(); } TokenSequence

假设我有以下代码:

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.*/}]”);
TokenSequenceMatcher m=tPattern.getMatcher(coreLabelList);
while(tMatcher.find()){
列表匹配项=m.groupNodes();
}
这里我想捕捉的是一个形容词后跟一个名词,即它必须以一个形容词开头,并且必须以一个名词结尾。例如,如果我有“漂亮的围巾”,它应该是匹配的,但如果我有“带白点的漂亮围巾”,它不应该是匹配的。现在,上面的标记regex与这两个短语都匹配。如何指定序列的确切开始和确切结束?

您可以使用

TokenSequencePattern p = TokenSequencePattern.compile("[tag:/JJ.*/] [tag:/NN.*/]");
TokenSequencePattern p = TokenSequencePattern.compile("^[tag:/JJ.*/] [tag:/NN.*/]$");
一个圆球进行测试时,它会弹到很高的蓝天。
产生
圆球
蓝天
子串

要仅获得整个字符串匹配,如果要使用
Matcher#find()
(使用
Matcher#matches()
,则需要使用锚定

因此,要将
圆球
字符串作为形容词和名词的组合进行匹配,可以使用

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

^
/
\A
代表字符串的开头(而且,
\A
始终匹配字符串的开头),而
$
/
\z
匹配字符串的结尾(请注意,
\z
将始终匹配字符串的最末端,而
$
-即使您未使用多行修饰符-也允许在其后面添加尾随的换行符)


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

这会产生相同的结果这不是我需要的。我需要一个以形容词开头,以名词结尾的模式。在您的例子中,输入以限定词开头,以名词结尾,因此不应该给出匹配。
JJ
代表形容词,而不是限定词。限定词指定为
DT
。请参见ode>“[tag:/JJ.*/][tag:/NN.*/]”产生所有出现的
ADJ
+
空格
+
名词
(正如你写的我想在这里捕捉的是一个形容词后跟一个名词)。我知道JJ代表什么,你的例子
一个圆球…
以一个限定词开头(“a”是限定词,不是形容词).我只想匹配以形容词开头,以名词结尾的短语,你的案例-以限定词开头,我不想捕捉“圆球”或“蓝天”,而是要捕捉整个测试短语,如果匹配开始和结束的词性标记。这不是这个正则表达式的问题,而是你如何使用它。我使用了
.find()
。如果需要整个字符串匹配,请将其与
matches()
一起使用。否则,需要在模式周围使用锚定、
^
$
,即
“^[tag:/JJ./][tag tag:/NN./][tag NN./]$”
正是!锚定是我所需要的。但是,当我在表达式中放置锚定时,
“^[tag JJ./][tag JJ./][tag NN
它在第1行第1列抛出一个错误-
词法错误。遇到:“^”(94),在:“
有没有办法用TokenRegex处理这个问题?