在运行时更改CoreNLP设置

问题描述:

我正在使用Stanford CoreNLP管道,并且我想知道是否有方法在不重新启动整个工具的情况下编辑基本设置(避免重新加载模型)。在运行时更改CoreNLP设置

现在我有:

Properties props = new Properties(); 
props.setProperty("tokenize.whitespace", "true"); 
props.setProperty("annotators", "tokenize, ssplit, pos, ..."); 
StanfordCoreNLP stanfordPipeline = new StanfordCoreNLP(props); 

我想改变tokenize.whitespace设置上的苍蝇,而无需重新启动一切。可能吗?

+0

人们可以使用'StanfordCoreNLP.getExistingAnnotator( “标记化”)'来获得实际的一个注解者。在单元测试环境中,可以使用反射来设置道具,因为它不能直接访问。然而,我所描述的这条道路指出了这样的事情真的不是一个好主意。 – demongolem 2017-03-21 13:35:46

您应该只使用其他属性创建StanfordCoreNLP的新实例;所有常见的注释和他们的模型不会重载,因为StanfordCoreNLP使用静态AnnotatorPool(见src code,线103),其中AnnotatorPool是:

用于跟踪注释者的目的。典型的用法是允许多个管道共享任何注释器。例如,如果存在多个管道,并且它们都需要一个 ParserAnnotator,则将两个此类注释器加载到 内存中会很糟糕。相反,AnnotatorPool将只创建一个Annotator 并允许两个管道共享它。

(从javadoc拍摄)