TokensregexNER应使用哪些设置

时间:2017-02-26 16:09:13

标签: named-entity-recognition stanford-nlp

当我尝试使用regexner时,它会按预期的方式使用以下设置和数据;

props.setProperty("annotators", "tokenize, cleanxml, ssplit, pos, lemma, regexner");
  

法学学士学位   (艺术|法律|科学|工程|神学)学士学位

我想要做的是使用TokenRegex。例如

  

法学学士学位   学士([{tag:NNS}] [{tag:NNP}])DEGREE

我读到这样做,我应该使用TokensregexNERAnnotator。

我尝试按如下方式使用它,但它没有用。

Pipeline.addAnnotator(new TokensRegexNERAnnotator("expressions.txt", true));

或者我尝试以另一种方式设置注释器,

props.setProperty("annotators", "tokenize, cleanxml, ssplit, pos, lemma, tokenregexner");    
props.setProperty("customAnnotatorClass.tokenregexner", "edu.stanford.nlp.pipeline.TokensRegexNERAnnotator");

我尝试了不同的TokenRegex格式,但是注释器找不到表达式,或者我得到了SyntaxException。

在NER数据文件中使用TokenRegex(带标签的令牌查询)的正确方法是什么?

BTW我刚看到TokensRegexNERAnnotator.java文件中的注释。不确定它是否相关pos标签不能与RegexNerAnnotator一起使用。

if (entry.tokensRegex != null) {
    // TODO: posTagPatterns...
    pattern = TokenSequencePattern.compile(env, entry.tokensRegex);
  }

1 个答案:

答案 0 :(得分:2)

首先,您需要制作TokensRegex规则文件(sample_degree.rules)。这是一个例子:

ner = { type: "CLASS", value: "edu.stanford.nlp.ling.CoreAnnotations$NamedEntityTagAnnotation" }

{ pattern: (/Bachelor/ /of/ [{tag:NNP}]), action: Annotate($0, ner, "DEGREE") }

为了解释一下规则,pattern字段指定要匹配的模式类型。 action字段用于注释整个匹配中的每个标记(即$0表示的标记),注释ner字段(请注意我们在规则中指定了ner = ...文件也是如此,第三个参数是将字段设置为String" DEGREE")。

然后为命令创建此.props文件(degree_example.props):

customAnnotatorClass.tokensregex = edu.stanford.nlp.pipeline.TokensRegexAnnotator

tokensregex.rules = sample_degree.rules

annotators = tokenize,ssplit,pos,lemma,ner,tokensregex

然后运行此命令:

java -Xmx8g edu.stanford.nlp.pipeline.StanfordCoreNLP -props degree_example.props -file sample-degree-sentence.txt -outputFormat text

你应该看到你想要标记的三个标记为" DEGREE"将被标记。

我想我会对代码进行更改以使tokensregex链接到TokensRegexAnnotator,这样您就不必将其指定为自定义注释器。 但是现在你需要在.props文件中添加该行。

此示例应有助于实现此功能。如果您想了解更多信息,请参阅以下资源:

http://nlp.stanford.edu/software/tokensregex.shtml#TokensRegexRules

http://nlp.stanford.edu/nlp/javadoc/javanlp/edu/stanford/nlp/ling/tokensregex/SequenceMatchRules.html

http://nlp.stanford.edu/nlp/javadoc/javanlp/edu/stanford/nlp/ling/tokensregex/types/Expressions.html