2016-11-26 3 views
1

Я новичок в GATE NLP. Я работаю над приложением, которое работает на GATE NLP. Итак, я создал конвейер, и я загружаю его только один раз в приложение, создавая объект singleton. Таким образом, из-за этого производительность приложения увеличилась, но когда я делаю какие-либо изменения в онтологии или справочнике и повторно запускаю приложение, тогда он не рассматривает вновь добавленные слова, потому что я сделал свой объект singleton через я загружаю свой конвейер так, чтобы он рассматривает ранее загруженный справочник географических названий и онтологию. Так, Я использовал следующий код, используя его, который принимает обновленный справочник, но не онтологию.re-init метод onRootGazetteer не работает

application = CorpusControllerSingleton.getInstance(gapFilePath).getApplicationObject(); 
      Iterator<ProcessingResource> it = application.getPRs().iterator(); 
if(isReload){ 
       System.out.println("processing resources------>"+it.next()); 
       while(it.hasNext()){ 
        ProcessingResource pr = it.next(); 
        if(pr.getName().equals("RzCIS") || pr.getName().equals("RzCs")) { 
         System.out.println("PR initialization--->" +pr.getFeatures()); 
         pr.reInit(); 
        } 
       } 

      } 

Может ли кто-нибудь объяснить мне, как перезапустить онтологию?

+0

Хороший вопрос. После некоторых поисков мне кажется, что на самом деле невозможно перезагрузить онтологию :-( – dedek

+0

Вы можете попытаться вызвать 'cleanup()' и 'init()' в онтологии, но я не гарантирую, что это будет работа ... – dedek

+0

Эй, @dedek Эта проблема может быть решена путем выполнения -Iterator it = application.getPRs(). iterator(); while (it.hasNext()) { ProcessingResource pr = it.next(); если ( pr.getName() равно (FLEXIBLE_GAZETTEER).) { onto_Root_gazetteer = (ProcessingResource) pr.getParameterValue (ONTOROOT_PROPERTY); onto_Root_gazetteer.setParameterValue (. ONTOROOT_PARAMETER, OntoLoader.getInstance() getOntology()); on_Root_gazetteer.init(); } – ganesh

ответ

1

Я использовал Flexible_Gazetteer, поэтому он имеет параметр gazetteerInst, который является не чем иным, как обрабатывающим ресурсом OntoRootGazetteer. Итак, сначала вам нужно получить все ресурсы обработки, которые вы используете в своем конвейере. Итерируйте его и извлеките из него OntoRootGazetteer. После этого OntoRootGazetteer имеет свойство gazetterInst, значение которого действительно ontology. Итак, вам просто нужно обновить эту онтологию или указать путь к онтологии. Затем используйте метод reinit для ontoRootGazettter, который вы извлекли из flexibleGazettteer.

Через кодирование -

application = CorpusControllerSingleton.getInstance(gapFilePath).getApplicationObject(); 
      Iterator<ProcessingResource> it = application.getPRs().iterator(); 
      while (it.hasNext()) { 
       ProcessingResource pr = it.next(); 
       if(pr.getName().equals(FLEXIBLE_GAZETTEER)){ 
        onto_Root_gazetteer = (ProcessingResource) pr.getParameterValue(ONTOROOT_PROPERTY); 
        onto_Root_gazetteer.setParameterValue(ONTOROOT_PARAMETER, OntoLoader.getInstance().getOntology()); 
        onto_Root_gazetteer.init(); 
       } 
       if(pr.getName().equals(ANNIE_GAZETTEER_CASEINSENSITIVE)) { 
        pr.reInit(); 
       } 
       if(pr.getName().equals(ANNIE_GAZETTEER_CASESENSITIVE)) { 
        pr.reInit(); 
       } 
      } 

Здесь

private static final String ONTOROOT_PROPERTY = "gazetteerInst"; 
private static final String ONTOROOT_PARAMETER = "ontology"; 

использования этого будет решить вашу проблему.

+0

Мне любопытно о 'OntoLoader.getInstance(). getOntology()', что он делает? Откуда появился класс OntoLoader? – dedek

+1

Hey Создано мной. Вам просто нужно дать онтологии их. Этот метод просто возвращает онтологию. – ganesh

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