2017-04-14 134 views
0

我在管道中使用斯坦福正则表达式。我想识别[0-9] [0-9] - [0-9] [0-9] - [0-9] [0-9](例如27-02-16)形式的字符串为日期,其中ner识别为NUMBER。所以,我在一个映射文件中定义了一个正则表达式并将其提供给regexner。但是regexNer无法识别日期等字符串。这些令牌的ner仍然是NUMBER。 以下是映射文件:使用正则表达式识别窗体 d d d d d d的日期

[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],但他们都没有工作。任何指向我可能会出错的地方?我正在使用斯坦福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")); 

我进一步调查,发现正则表达式不匹配,只有当它由全整数任何字符串。我试着用字母作为它的前缀,它起作用了(即a \ d \ d- \ d \ d- \ d \ d与a14-07-12匹配)。

+0

@stanfordnlphelp,任何指针请。 – user7568303

回答

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 
+0

我正在通过java api运行它。我在编辑中添加了代码。 – user7568303

+0

在构建管道之前,需要删除“addAnnotator”行并添加一行为PROPS.setProperty(“regexner.mapping”,“/path/to/rules-file.txt”)的行... regexner是使用规则的注释器和regexner.mapping是设置要使用的规则文件的属性 – StanfordNLPHelp

相关问题