Нужно ли переписывать весь мой Java-проект, если я хочу использовать одну UIMA-зависимую библиотеку?
Я хочу использовать https://code.google.com/p/heideltime/ в проекте Java. Этот код "вписывается в конвейер UIMA", чего я совсем не понимаю. Похоже, UIMA предназначена для решения множества проблем, которых у меня нет, поэтому я просто хотел бы получить минимальное количество UIMA, необходимое для запуска этого кода.
Есть ли простой пример того, как я могу запустить простую программу UIMA?
я добавил
<dependency>
<groupId>org.uimafit</groupId>
<artifactId>uimafit</artifactId>
<version>1.4.0</version>
</dependency>
<dependency>
<groupId>org.apache.uima</groupId>
<artifactId>uimaj-core</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>org.apache.uima</groupId>
<artifactId>uimaj-tools</artifactId>
<version>2.4.0</version>
</dependency>
на мой 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.stackru.RoomNumberAnnotatorPipeline
Являются ли зависимости UIMA более существенными, чем типичная библиотека Java? Разве не достаточно просто извлечь UIMA из Maven Central и начать использовать их классы в моем существующем коде?
хорошо, я как-то получил этот пример работающим (я понятия не имею, что это такое, и я все еще не понимаю, почему он не работал раньше) Я все еще не могу использовать 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.<init>(Reader.java:61)
at java.io.InputStreamReader.<init>(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.<init>(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.<init>(HeidelTimeStandalone.java:128)
at de.unihd.dbs.heideltime.standalone.HeidelTimeStandalone.<init>(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.<init>(XMLInputSource.java:118)
at de.unihd.dbs.heideltime.standalone.HeidelTimeStandalone.initialize(HeidelTimeStandalone.java:163)
at de.unihd.dbs.heideltime.standalone.HeidelTimeStandalone.<init>(HeidelTimeStandalone.java:128)
at de.unihd.dbs.heideltime.standalone.HeidelTimeStandalone.<init>(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
1 ответ
На домашней странице HeidelTime говорится
HeidelTime доступен как аннотатор UIMA и как отдельная версия.
Здесь есть отдельная версия, которую я придумал. Вы должны быть в состоянии взломать de.unihd.dbs.heideltime.standalone.HeidelTimeStandalone.java
Это главное, чтобы удовлетворить ваши потребности.