Stanford nlp 是否可以使用包含正则表达式的数据集来训练斯坦福NER模型?

Stanford nlp 是否可以使用包含正则表达式的数据集来训练斯坦福NER模型?,stanford-nlp,Stanford Nlp,我有一个TSV文件,其中包含作为正则表达式的实体,以适应拼写变体和屈折变化。是否有可能使用这样的文件来训练一个NER模型,或者是否有必要手动将正则表达式扩展到所有可能的拼写变体 在Java文档中,我发现,对于3.5.2版的分类器,指示的路径edu.stanford.nlp.ie.regexp(jar文件内)不包含此分类器 这可以做到吗?如果可以,可以使用命令行调用(如使用edu.stanford.nlp.ie.NERClassifierCombiner)或仅通过编程实现吗?您可以查看。您可以定义

我有一个TSV文件,其中包含作为正则表达式的实体,以适应拼写变体和屈折变化。是否有可能使用这样的文件来训练一个NER模型,或者是否有必要手动将正则表达式扩展到所有可能的拼写变体

在Java文档中,我发现,对于3.5.2版的分类器,指示的路径
edu.stanford.nlp.ie.regexp
(jar文件内)不包含此分类器

这可以做到吗?如果可以,可以使用命令行调用(如使用
edu.stanford.nlp.ie.NERClassifierCombiner
)或仅通过编程实现吗?

您可以查看。您可以定义从TokensRegex表达式到NER标记的映射,然后将注释器作为自定义注释器调用。例如,将以下内容放入传递到
StanfordCoreNLP
管道的属性文件中:

customAnnotatorClass.regexner = edu.stanford.nlp.pipeline.TokensRegexNERAnnotator                                                          
regexner.mapping = path_to_your_mapping.tab                                                     
regexner.validpospattern = ^(NN|JJ).*   // optional                                                                                                              
regexner.ignorecase = true    // optional
annotators = tokenize,ssplit,pos,regexner

您可以在管道中使用
regexner
注释器。它是一个标准的注释器,可用于普通正则表达式以及特殊的CoreNLP TokenRegex(取决于映射文件中使用的语法) 下面是一个示例代码片段:

Properties pipelineProps = new Properties();

pipelineProps.setProperty("annotators", "tokenize, ssplit, pos, lemma, ner, regexner");

pipelineProps.setProperty("regexner.mapping", "<comma separated list of files mapping regex's or TokenRegex's to NER tags>");
pipelineProps.setProperty("regexner.backgroundSymbol", "O,I-MISC,I-LOC,I-PER,I-ORG"); // NER tags that should be overwritten by the regexner annotator, if need be
pipelineProps.setProperty("regexner.ignorecase", "true");

pipeline = new StanfordCoreNLP(pipelineProps);
Properties pipelineProps=新属性();
setProperty(“注释器”、“标记化、ssplit、pos、引理、ner、regexner”);
pipelineProps.setProperty(“regexner.mapping”和“”);
pipelineProps.setProperty(“regexner.backgroundSymbol”,“O,I-MISC,I-LOC,I-PER,I-ORG”);//如果需要,regexner注释器应覆盖的NER标记
pipelineProps.setProperty(“regexner.ignorecase”、“true”);
管道=新的StanfordCoreNLP(管道支柱);

编辑:我看不出有任何理由不能通过命令行实现这一点(如使用部分中所述)。不过,我自己还没有尝试过命令行,所以根据经验不能这么说。

您也可以使用StanfordCoreNLP在命令行中执行此操作

java -cp "*" -Xmx2g  edu.stanford.nlp.pipeline.StanfordCoreNLP -annotators tokenize,ssplit,pos,lemma,ner,regexner -file input.txt -regexner.mapping regexner.txt edu.stanford.nlp.ie.NERClassifierCombiner -ner.model classifiers/english.all.3class.distsim.crf.ser.gz,classifiers/english.conll.4class.distsim.crf.ser.gz,classifiers/english.muc.7class.distsim.crf.ser.gz,classifiers/custom-model.ser.gz