首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法将TIMEX3单词转换成它们的实际值?

有没有办法将TIMEX3单词转换成它们的实际值?
EN

Stack Overflow用户
提问于 2016-02-18 21:12:18
回答 1查看 1.3K关注 0票数 4

例如,对于PRESENT_REF,我需要“2015年4月27日(星期一)下午14:22”

我用HeidelTime (下面的代码)对简单的句子进行了实验,比如“从现在起三小时内我将完成这个程序”。

代码语言:javascript
复制
HeidelTimeStandalone heidelTime = new HeidelTimeStandalone(
        Language.ENGLISH,
        DocumentType.NEWS,
        OutputType.TIMEML,
        "C:/heideltime/heideltime-standalone/config.props", 
        POSTagger.TREETAGGER, true);

// Document creation time 
Date dct = new Date();  
String text="In three hours from now I will finish this program.";;
String result = heidelTime.process(text, dct)

对于这个特定的注释,HeidelTime生成注释

代码语言:javascript
复制
<?xml version="1.0"?>
<!DOCTYPE TimeML SYSTEM "TimeML.dtd">
<TimeML>
In <TIMEX3 tid="t2" type="DURATION" value="PT3H">three hours</TIMEX3> from <TIMEX3 tid="t1" type="DATE" value="PRESENT_REF">now</TIMEX3> we will finish this program
</TimeML>

而我需要得到这样的东西

代码语言:javascript
复制
At <TIMEX3 tid="t6" type="DATE" value="2015-04-27">   <TIMEX3 tid="t8" type="TIME" value="2015-04-27T26:22">17:22 PM</TIMEX3> I will finish this program

有办法做到这一点吗?

EN

回答 1

Stack Overflow用户

发布于 2016-02-22 16:44:54

HeidelTime 1试图按照TimeML准则2提取和规范时态表达式,重点是属性"type“和"value”。

关于第一个例子:像"now“这样的表达式将被注释为TimeML后面的”TimeML“,这样HeidelTime的注释就不会不正确--尽管在您的例子中可能没有用。你说:

对于PRESENT_REF,我需要“2015年4月27日(星期一)下午14:22”

如果要将" PRESENT_REF“转换为实际值,可以假定PRESENT_REF总是引用文章的文档创建时间(尽管在某些情况下这可能是不正确的,特别是如果您不处理新闻样式的文档)。无论如何,您可以使用DateFormatter获取所需的信息:

代码语言:javascript
复制
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
...
Calendar c = Calendar.getInstance();
String dct = "2015-04-27T14:22";
SimpleDateFormat formatIn = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm");
c.setTime(formatIn.parse(dct));
SimpleDateFormat formatOut = new SimpleDateFormat("EEEE, MMMM dd, yyyy HH:mm a");
String dctText = formatOut.format(c.Time());
System.out.println(dctText);
// prints: Monday, April 27, 2015 14:22 PM

第二个例子就不那么简单了。考虑到时态表达式的范围以及属性类型和值,HeidelTime为表达式创建的注释是正确的,即,

代码语言:javascript
复制
<TIMEX3 tid="t1" type="DURATION" value="PT3H">three hours</TIMEX3> 
from
<TIMEX3 tid="t2" type="DATE" value="PRESENT_REF">now</TIMEX3>

有时,需要更多的注释。例如,在TimeML之后,可以锚定持续时间,并将"beginPoint“和/或"endPoint”信息分配给持续时间注释。HeidelTime不会毫无保留地做到这一点。

但是,对于某些类型的表达式,HeidelTime可以为非标准TIMEX3s添加注释,特别是当两个表达式指定一个时间间隔时,例如,对于短语“1910年至1950年”,标准的TIMEX3注释是:

代码语言:javascript
复制
from <TIMEX3 tid="t1">1910</TIMEX3> to <TIMEX3 tid="t2">1950</TIMEX3>

如果另外使用HeidelTime的间隔标记,将添加一个TIMEX3INTERVAL,其中包含间隔的最早和最新的起始点和结束点,即,

代码语言:javascript
复制
<TIMEX3INTERVAL earliestBegin="1910-01-01T00:00:00" 
                latestBegin="1910-12-31T23:59:59"
                earliestEnd="1950-01-01T00:00:00" 
                latestEnd="1950-12-31T23:59:59">
<TIMEX3 tid="t1" type="DATE" value="1910">1910</TIMEX3> 
to 
<TIMEX3 tid="t2" type="DATE" value="1950">1950</TIMEX3>
</TIMEX3INTERVAL>

这样就涵盖了时间间隔,但还不支持由多个简单TIMEX3表达式产生的计算值。

如果您想要编写一个扩展,可以从上面的DateFormatter示例开始,解析持续时间值(例如,PT3H),并执行DateCalculation (如c.add(Calendar.HOUR, 3) ),这会给原始c ++增加3个小时。

如果您编写了一个扩展并希望将它添加到HeidelTime中,请告诉我们;-)

1

2

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35492509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档