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处理这个问题?