スタンフォード CoreNLP パーサーを使用してテキストを実行していますが、「10 月の第 2 月曜日」や「過去 1 年」などの日付フレーズがあります。ライブラリは各トークンを DATE という名前のエンティティとして適切にタグ付けしますが、この日付フレーズ全体をプログラムで取得する方法はありますか? 日付だけではなく、ORGANIZATION という名前のエンティティも同じことを行います (たとえば、「国際オリンピック委員会」は、特定のテキストの例で識別される可能性があります)。
String content = "Thanksgiving, or Thanksgiving Day (Canadian French: Jour de"
+ " l'Action de grâce), occurring on the second Monday in October, is"
+ " an annual Canadian holiday which celebrates the harvest and other"
+ " blessings of the past year.";
Properties p = new Properties();
p.setProperty("annotators", "tokenize, ssplit, pos, lemma, ner, parse");
StanfordCoreNLP pipeline = new StanfordCoreNLP(p);
Annotation document = new Annotation(content);
pipeline.annotate(document);
for (CoreMap sentence : document.get(CoreAnnotations.SentencesAnnotation.class)) {
for (CoreLabel token : sentence.get(CoreAnnotations.TokensAnnotation.class)) {
String word = token.get(CoreAnnotations.TextAnnotation.class);
String ne = token.get(CoreAnnotations.NamedEntityTagAnnotation.class);
if (ne.equals("DATE")) {
System.out.println("DATE: " + word);
}
}
}
スタンフォード アノテーターと分類子の読み込み後、次の出力が生成されます。
DATE: Thanksgiving
DATE: Thanksgiving
DATE: the
DATE: second
DATE: Monday
DATE: in
DATE: October
DATE: the
DATE: past
DATE: year
ライブラリはフレーズを認識し、それらを名前付きエンティティのタグ付けに使用する必要があるように感じます。そのため、問題は、データが保持され、API を介して何らかの方法で利用できるかということですか?
ありがとう、ケビン