使用regexner

时间:2017-04-14 11:20:55

标签: stanford-nlp

我在管道中使用Stanford regexNer和ner。我想识别形式为[0-9] [0-9] - [0-9] [0-9] - [0-9] [0-9](例如,27-02-16)的字符串为日期,哪个标识为NUMBER。所以,我在映射文件中定义了一个正则表达式并将其赋予regexner。但regexNer无法识别日期等字符串。这些令牌的数量仍为NUMBER。 以下是映射文件:

[0-9]{2}-[0-9]{2}-[0-9]{2}  date    NUMBER

我确保列是制表符分隔的。我尝试了这个正则表达式的几个版本,如\ d \ d- \ d \ d- \ d \ d和[0-9] [0-9] - [0-9] [0-9] - [0-9] [0-9],但都没有奏效。关于我可能出错的地方的任何指示?我使用的是Stanford CoreNLP 3.7。这是我正在运行的java代码。

Properties PROPS = new Properties();

PROPS.put("annotators", "tokenize, ssplit, pos, lemma, ner, regexner");
        StanfordCoreNLP PIPELINE = new StanfordCoreNLP(PROPS);
        PIPELINE.addAnnotator(
                new RegexNERAnnotator("/home/jyoti/workspace-jee/QA_Rest/src/main/resources/Gazetter.txt"));

我进一步调查并发现正则表达式只有在完全由整数组成时才匹配任何字符串。我尝试用字母表作为前缀并且它有效(例如,\ d \ d- \ d \ d- \ d \ d匹配a14-07-12)。

1 个答案:

答案 0 :(得分:0)

你是如何运行它的,因为你的原始规则对我来说很好。

我发出了这个命令:

java -Xmx8g edu.stanford.nlp.pipeline.StanfordCoreNLP -annotators tokenize,ssplit,pos,lemma,ner,regexner -regexner.mapping date-rules.txt -file date-example.txt -outputFormat text