如果我想使用一个依赖于UIMA的库,我是否需要重写整个java项目?

我想在java项目中使用https://code.google.com/p/heideltime/ 。 该代码“适合UIMA管道”,这是我根本无法理解的。 UIMA看起来像是为了解决我没有的大量问题而设计的,所以我只想获得运行该代码所需的最小量的UIMA。

有一个简单的例子,我可以运行一个简单的UIMA程序吗?

我已经添加

 org.uimafit uimafit 1.4.0   org.apache.uima uimaj-core 2.4.0   org.apache.uima uimaj-tools 2.4.0  

到我的pom.xml但由于某种原因,maven仍然不会编译这个:

 import org.apache.uima.jcas.JCas; import org.apache.uima.util.Level; import org.uimafit.component.JCasAnnotator_ImplBase; import org.uimafit.descriptor.ConfigurationParameter; import org.uimafit.descriptor.TypeCapability; import org.uimafit.examples.tutorial.type.RoomNumber; public class RoomNumberAnnotatorPipeline { public static void main(String[] args) throws Exception { String text = "The meeting was moved from Yorktown 01-144 to Hawthorne 1S-W33."; TypeSystemDescription tsd = createTypeSystemDescription( "org.uimafit.examples.tutorial.type.RoomNumber"); JCas jCas = createJCas(tsd); // jCas.setDocumentText(text); // AnalysisEngine analysisEngine = createPrimitive(RoomNumberAnnotator.class, tsd); // analysisEngine.process(jCas); // // for (RoomNumber roomNumber : select(jCas, RoomNumber.class)) { // System.out.println(roomNumber.getCoveredText() + "\tbuilding = " // + roomNumber.getBuilding()); // } } } [ERROR] symbol : class TypeSystemDescription [ERROR] location: class com.stackoverflow.RoomNumberAnnotatorPipeline 

在此处输入图像描述

UIMA依赖项是否比典型的Java库更具实质性? 仅仅从Maven Central中提取UIMA并开始在现有代码中使用它们的类是不够的?

好吧,我以某种方式让这个例子工作(我不知道它是什么,我仍然感到困惑,为什么它以前没有工作)我仍然无法使用heideltime:

 package org.ryan; import static org.uimafit.factory.AnalysisEngineFactory.createPrimitive; import static org.uimafit.factory.JCasFactory.createJCas; import static org.uimafit.factory.TypeSystemDescriptionFactory.createTypeSystemDescription; import static org.uimafit.util.JCasUtil.select; import org.apache.uima.UIMAException; import org.apache.uima.analysis_engine.AnalysisEngine; import org.apache.uima.jcas.JCas; import org.apache.uima.resource.metadata.TypeSystemDescription; import org.uimafit.examples.tutorial.ex1.RoomNumberAnnotator; import org.uimafit.examples.tutorial.type.RoomNumber; /** * Hello world! * */ public class UIMAWTF { public static void main( String[] args ) throws UIMAException { String text = "The meeting was moved from Yorktown 01-144 to Hawthorne 1S-W33. Today is May 5, 2013."; TypeSystemDescription tsd = createTypeSystemDescription("org.uimafit.examples.tutorial.type.RoomNumber"); JCas jCas = createJCas(tsd); jCas.setDocumentText(text); AnalysisEngine analysisEngine = createPrimitive(RoomNumberAnnotator.class, tsd); analysisEngine.process(jCas); for (RoomNumber roomNumber : select(jCas, RoomNumber.class)) { System.out.println(roomNumber.getCoveredText() + "\tbuilding = " + roomNumber.getBuilding()); } } } 

编辑现在尝试:

 HeidelTimeStandalone hts_sci = new HeidelTimeStandalone(Language.ENGLISH, DocumentType.NEWS, OutputType.TIMEML);//, configPath); dates = hts_sci.process("19-Nov-2013", new Date(2012,01,05), new TimeMLResultFormatter()); System.out.println(dates); 

获得:

 Jul 3, 2013 2:02:41 PM de.unihd.dbs.heideltime.standalone.HeidelTimeStandalone initialize INFO: HeidelTimeStandalone initialized with language english Jul 3, 2013 2:02:41 PM de.unihd.dbs.heideltime.standalone.HeidelTimeStandalone readConfigFile INFO: trying to read in file config.props java.lang.NullPointerException at java.io.Reader.(Reader.java:61) at java.io.InputStreamReader.(InputStreamReader.java:55) at de.unihd.dbs.uima.annotator.heideltime.resources.GenericResourceManager.readResourcesFromDirectory(GenericResourceManager.java:45) at de.unihd.dbs.uima.annotator.heideltime.resources.NormalizationManager.(NormalizationManager.java:58) at de.unihd.dbs.uima.annotator.heideltime.resources.NormalizationManager.getInstance(NormalizationManager.java:73) at de.unihd.dbs.uima.annotator.heideltime.HeidelTime.initialize(HeidelTime.java:143) at de.unihd.dbs.heideltime.standalone.HeidelTimeStandalone.initialize(HeidelTimeStandalone.java:153) at de.unihd.dbs.heideltime.standalone.HeidelTimeStandalone.(HeidelTimeStandalone.java:128) at de.unihd.dbs.heideltime.standalone.HeidelTimeStandalone.(HeidelTimeStandalone.java:112) at com.hrl.issl.osi.date.LocalHeidelTime.main(LocalHeidelTime.java:29) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:297) at java.lang.Thread.run(Thread.java:662) Jul 3, 2013 2:02:41 PM de.unihd.dbs.heideltime.standalone.HeidelTimeStandalone initialize WARNING: HeidelTime could not be initialized java.lang.NullPointerException at org.apache.uima.util.XMLInputSource.(XMLInputSource.java:118) at de.unihd.dbs.heideltime.standalone.HeidelTimeStandalone.initialize(HeidelTimeStandalone.java:163) at de.unihd.dbs.heideltime.standalone.HeidelTimeStandalone.(HeidelTimeStandalone.java:128) at de.unihd.dbs.heideltime.standalone.HeidelTimeStandalone.(HeidelTimeStandalone.java:112) at com.hrl.issl.osi.date.LocalHeidelTime.main(LocalHeidelTime.java:29) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:297) at java.lang.Thread.run(Thread.java:662) Jul 3, 2013 2:02:41 PM de.unihd.dbs.heideltime.standalone.HeidelTimeStandalone initialize WARNING: JCas factory could not be initialized 

它在HeidelTime的主页上说

HeidelTime可作为UIMA注释器和独立版本使用。

有一个独立版本,我在这里 mavenized。 您应该能够破解de.unihd.dbs.heideltime.standalone.HeidelTimeStandalone.java的主要内容以满足您的需求。