如何在Java项目中使用HeidelTime时间标记器?

时间:2014-12-06 22:23:45

标签: java maven temporal heideltime

我想自动识别文档流中的日期,从这个意义上讲,我想使用开源项目Heideltime提供的代码,可以在这里找到(https://code.google.com/p/heideltime/)。我已经安装了Heideltime工具包(不是独立版本),现在我想知道如何引用它并在我的Java项目中调用它。我已经在我的pom.xml中添加了对Heideltime的依赖:

    <dependency>
        <groupId>de.unihd.dbs</groupId>
        <artifactId>heideltime</artifactId>
        <version>1.7</version>
    </dependency>

但是我不知道如何将这个源项目中的类调用到我自己的项目中。我正在使用Maven。之前使用过它的人可能会给我一个建议或建议吗?非常感谢!

3 个答案:

答案 0 :(得分:1)

heideltime-kit本身就是一个Maven项目。因此,您可以将heideltime-kit项目添加为依赖项。 (在Netbeans中,右键单击Dependencies, - &gt; Add Dependency - &gt; Open Projects(确保项目首先打开) - &gt; HeidelTime)

然后将config.props文件移动到项目的src / main / resources文件夹中。在config.props中设置treetagger的路径。

就使用这些类而言,您将要使用POSTagger.TREETAGGER作为posTagger参数和硬编码来创建HeidelTimeStandalone实例(请参阅de.unihd.dbs.heideltime.standalone.HeidelTimeStandalone.java)。 src / main / resources / config.props文件的路径,作为configPath参数。 例如,

heidelTime = new HeidelTimeStandalone(Language.ENGLISH,
                                      DocumentType.COLLOQUIAL,
                                      OutputType.TIMEML,
                                      "path/to/config.props",
                                      POSTagger.TREETAGGER, true);

然后使用HeidelTime处理文本,您只需调用过程函数:

String result = heidelTime.process(text, date);

答案 1 :(得分:0)

此库尚未在maven中央存储库中。 (您可以在此search.maven.org网站上查看此内容。)

在项目中使用库。您应该下载JAR文件并在本地安装它。请参阅此问题的答案:How to add local jar files in maven project?

然后您可以使用导入包并使用项目中的功能。

答案 2 :(得分:0)

添加jgloves的回复,您可能有兴趣将Heideltime结果字符串解析为Java对象表示。以下代码将Uima-XML表示转换为Timex3个对象。

    HeidelTimeStandalone time = new HeidelTimeStandalone(Language.GERMAN, DocumentType.SCIENTIFIC, OutputType.XMI, "config.props", POSTagger.STANFORDPOSTAGGER);
    String xmiRepresentation = time.process(document, documentCreationTime); //Apply Heideltime and get the XML-UIMA representation     
    JCas cas = jcasFactory.createJCas();

    for(FSIterator<Annotation> it= cas.getAnnotationIndex(Timex3.type).iterator(); it.hasNext(); ){
            System.out.printkn(it.next);
    }