Как реализовать хороший алгоритм 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 также предоставляет хорошую модель для этого.