2016-11-26 38 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