2015-04-02 90 views
1

我正在使用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

回答

1

您應該只使用其他屬性創建StanfordCoreNLP的新實例;所有常見的註釋和他們的模型不會重載,因爲StanfordCoreNLP使用靜態AnnotatorPool(見src code,線103),其中AnnotatorPool是:

用於跟蹤註釋者的目的。典型的用法是允許多個管道共享任何註釋器。例如,如果存在多個管道,並且它們都需要一個 ParserAnnotator,則將兩個此類註釋器加載到 內存中會很糟糕。相反,AnnotatorPool將只創建一個Annotator 並允許兩個管道共享它。

(從javadoc拍攝)