我正在使用C#,这是我尝试根据Stanford Corenlp文档获取结果的代码片段。
我不知道要使用哪个注释:
Annotation document = new Annotation(input);
pipeline.annotate(document);
var sentences = document.get(new CoreAnnotations.SentencesAnnotation().getClass()) as ArrayList;
foreach (CoreMap sentence in sentences)
{
var tokens = sentence.get(new CoreAnnotations.TokensAnnotation().getClass()) as ArrayList;
TokenSequencePattern pattern = TokenSequencePattern.compile("([ner: PERSON]+) /was|is/ /an?/ []{0,3} /painter|artist/");
TokenSequenceMatcher matcher = pattern.getMatcher(tokens);
while (matcher.find())
{
String matchedString = matcher.group();
var matchedTokens = matcher.groupNodes() as ArrayList;
foreach (CoreLabel matchedToken in matchedTokens)
{
//matchedToken.get(new CoreAnnotations.TokensAnnotation().getClass()));
//Which Annotation class to use in order to get result data from matched token?
}
}
}
答案 0 :(得分:1)
我不确定你想要得到什么。 matchedTokens
中的每个标记与句子中的其他标记具有相同的注释。
如果您想获得第一个捕获组(([ner: PERSON]+)
部分),则应使用matcher.group(1)
或matcher.groupNodes(1)
。有关匹配结果的其他功能,请参阅http://nlp.stanford.edu/nlp/javadoc/javanlp/edu/stanford/nlp/ling/tokensregex/BasicSequenceMatchResult.html。