2015-04-02 5 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 ("разметить")', чтобы получить фактический один Annotator. В единичной тестовой среде можно настроить реквизит, используя отражение, потому что оно не доступно напрямую. Тем не менее, этот путь, который я описал, указывает, что что-то вроде этого действительно не очень хорошая идея. – demongolem

ответ

1

Вы должны создать только новый экземпляр StanfordCoreNLP с другими свойствами; все общие комментаторы и их модель не будут перезагружены, поскольку StanfordCoreNLP использует статический AnnotatorPool (см src code, строка 103), где AnnotatorPool является:

Объекта для отслеживания аннотаторов. Типичное использование состоит в том, чтобы позволить нескольким конвейерам совместно использовать любые аннотаторы.

Например, если существует несколько трубопроводов, и они оба нуждаются в ParserAnnotator , было бы плохо загрузить два таких аннотатора в память . Вместо этого AnnotatorPool создаст только один Annotator и позволит обоим конвейерам делиться им.

(взято из javadoc)

Смежные вопросы