Как реализовать хороший алгоритм Pronoun Resolver в OpenNLP?

Я использую основной пакет OpenNLP для разрешения анафоры. Так что в основном у меня есть эта строка ввода:

"Гарри пишет письмо своему брату. Он сказал ему, что встретил Мэри в Лондоне. Они вместе пообедали";

Набор упомянутых результатов приведен ниже:

Гарри, его, он, он, он, они

Мне нужно заменить местоимения его собственными существительными. Я написал простой алгоритм для этого, добавив каждое упоминание в список, затем итерируя список, заменяя каждое местоимение первым упоминанием ("Гарри"). Моя проблема в том, что "его" будет "Гарри", а не "Гарри".

Существует не так много примеров / руководств по распознавателю местоимений. Я посмотрел через OpenNLP API. Либо я смотрю не в ту сторону, либо в API есть такая, но я не знаю, как ее использовать. Может ли кто-нибудь, пожалуйста, направить меня в правильном направлении к разрешению местоимения или привести пример, как это сделать? Может быть, есть лучший способ, о котором я не знал.

1 ответ

То, что вы хотите, называется "разрешением совместной ссылки".

Linker _linker = null;

try {
   _linker = new DefaultLinker("lib/opennlp/coref", LinkerMode.TEST);

} catch (final IOException ioe) {
   ioe.printStackTrace();
}

Вот идеальный учебник с примерами кода:

http://blog.dpdearing.com/2012/11/making-coreference-resolution-with-opennlp-1-5-0-your-bitch/

Stanford CoreNLP также предоставляет хорошую модель для этого.

http://nlp.stanford.edu/software/dcoref.shtml

Другие вопросы по тегам