4

たとえば、PRESENT_REFの場合、 「2015 年 4 月 27 日月曜日の午後 14 時 22 分」を取得する必要があります。</p>

「今から 3 時間以内にこのプログラムを終了します」のような単純な文で HeidelTime (以下のコード) を試してみました。

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 が注釈を生成します

<?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>

私は次のようなものを取得する必要がありますが

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

これを達成する方法はありますか?

4

1 に答える 1

4

HeidelTime [1] は、属性「type」と「value」に焦点を当てて、TimeML ガイドライン [2] に従って時間式の抽出と正規化を試みます。

最初の例について:「今」などの式は、TimeML に続いて「PRESENT_REF」として注釈が付けられるため、HeidelTime の注釈が正しくありませんが、おそらくあなたの場合には役に立ちません。あなたは言う:

PRESENT_REF の場合、「2015 年 4 月 27 日月曜日の午後 14 時 22 分」を取得する必要があります</p>

「PRESENT_REF」を実際の値に「変換」したい場合は、PRESENT_REF が常に記事のドキュメント作成時刻を参照していると想定できます (ただし、特にニュース スタイルを処理していない場合は、これが正しくない場合もあります)。ドキュメント)。とにかく、 DateFormatter を使用して必要な情報を取得できます。

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

2番目の例はそれほど単純ではありません。時間式の範囲と属性の型と値を考慮すると、HeidelTime によって作成される式の注釈は正しいです。つまり、

<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 は非標準の TIMEX3 の注釈を追加できます。特に、「1910 年から 1950 年まで」という句など、2 つの式が時間間隔を記述する場合、標準の TIMEX3 注釈は次のようになります。

from <TIMEX3 tid="t1">1910</TIMEX3> to <TIMEX3 tid="t2">1950</TIMEX3>

さらに HeidelTime のインターバル タガーを使用すると、TIMEX3INTERVAL が追加されます。これには、インターバルの最初と最後の開始点と終了点が含まれます。つまり、

<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 など) を解析c.add(Calendar.HOUR, 3)し、元の c に 3 時間を追加する などの DateCalculation を実行できます。

拡張機能を作成し、それを HeidelTime に追加したい場合は、お知らせください ;-)

[1] https://github.com/HeidelTime/heideltime

[2] http://timeml.org/publications/timeMLdocs/annguide_1.2.1.pdf

于 2016-02-22T16:44:54.123 に答える