2016-11-26 41 views
1

我是GATE NLP的新手。我正在研究一個適用於GATE NLP的應用程序。 因此,我創建了一個管道,並且通過創建單例對象在應用程序中只加載一次。所以,由於應用程序的性能有所提高,但是當我在本體或地名索引中進行任何更改並重新運行應用程序時,它並沒有考慮新添加的單詞,因爲我通過加載我的管道來製作單個對象,所以它考慮以前加載的地名詞典和本體論。所以, 我用下面的代碼使用它正在更新地名詞典,但不是本體論。toRootGazetteer的重新初始化方法不起作用

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()); to_Root_gazetteer.init(); } – ganesh

回答

1

我已經使用Flexible_Gazetteer所以它有參數gazetteerInst這只是一個處理資源OntoRootGazetteer。所以首先你需要獲得你在管道中使用的所有處理資源。遍歷它並從中提取OntoRootGazetteer。之後OntoRootGazetteer有一個屬性gazetterInst其實際值爲ontology。所以,你只需要更新本體,或者給本體的路徑。然後使用reinit方法,您從flexibleGazettteer中提取的ontoRootGazettter

通過編碼 -

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

嘿它是由我創建的。你只需要給它們本體就可以了。這種方法只是返回本體。 – ganesh