Разрешение базовой ссылки с использованием OpenNLP

Я хочу выполнить "разрешение базовой ссылки" с помощью OpenNLP. Документация Apache (Разрешение базовой ссылки) не распространяется как сделать "разрешение кореференции". У кого-нибудь есть документы/учебник, как это сделать?


person Khairul    schedule 25.12.2011    source источник


Ответы (2)


На данный момент существует мало документации по разрешению кореференсов для OpenNLP, за исключением очень короткого упоминания о том, как запустить его в файле readme.

Если вы не заинтересованы в использовании OpenNLP, рассмотрите пакет Stanford CoreNLP, который включает пример запуска на Java, включая выполнение разрешения кореференции с помощью пакета. Он также включает страницу с кратким описанием его работы и документы, опубликованные в пакете coreference.

person Chris    schedule 27.02.2012

Недавно я столкнулся с той же проблемой и написал несколько заметок в блоге об использовании инструментов OpenNLP 1.5.x. Копировать целиком немного сложновато, поэтому " rel="nofollow noreferrer">вот ссылка с более подробной информацией.


На высоком уровне вам необходимо загрузить соответствующие библиотеки базовых моделей OpenNLP. а также словарь WordNet 3.0. Учитывая эти зависимости, инициализация объекта компоновщика довольно проста:

// LinkerMode should be TEST
//Note: I tried LinkerMode.EVAL before realizing that this was the problem
Linker _linker = new DefaultLinker("lib/opennlp/coref", LinkerMode.TEST);

Однако использование Linker немного менее очевидно. Тебе следует:

  1. Разбейте содержимое на предложения и соответствующие токены
  2. Создайте объект Parse для каждого предложения
  3. Оберните каждое предложение Parse так, чтобы указать порядок предложений:

    final DefaultParse parseWrapper = new DefaultParse(parse, idx);
  4. Итерация по разбору каждого предложения и использование компоновщика для получения объектов Mention из каждого разбора:

    final Mention[] extents =
       _linker.getMentionFinder().getMentions(parseWrapper);
  5. Наконец, используйте Linker, чтобы идентифицировать отдельные объекты во всех объектах Mention:

    DiscourseEntity[] entities = _linker.getEntities(arrayOfAllMentions);
person dpdearing    schedule 06.12.2012
comment
Не могли бы вы указать мне, как это будет сделано из командной строки? Спасибо. - person Haritz; 30.07.2014
comment
В блоге вы сказали, что загружаете модели, используя getResourceAsStream, но в конце не описали, как вы сказали Linker загрузить модели, используя getResourceAsStream. Как вы загружали модели? - person justhalf; 11.09.2014
comment
@justhalf На самом деле это просто ошибка копирования + вставки из предыдущего шага в блоге. Linker напрямую указывает путь к кореференц-моделям, поэтому нет необходимости использовать getResourceAsStream. Спасибо, что поймали это! - person dpdearing; 13.09.2014
comment
Ну наконец то! Теперь, когда я могу связаться с вами, в вашем блоге есть несколько улучшений. Во-первых, об использовании ParseTool.parseLine. он ожидает маркированный текст, поэтому вам нужно сначала маркировать его, прежде чем передавать функции. Кроме того, я думаю, что компоновщик говорит, что хочет, чтобы NameFinder запускался первым в объекте Parse, чтобы получить лучший результат. Я все еще борюсь с получением хороших результатов, тем не менее, каким-то образом я получаю местоимение, прикрепленное к NP, содержащему прилагательные, в то время как я предпочитаю только головное NP. - person justhalf; 13.09.2014
comment
@justhalf - я думаю, что ParseTool.parseLine ожидает предложение String, а не массив токенов, поэтому я не уверен в первую очередь в токенизации. Точно так же NameFinder принимает массив токенов, а не объект Parse, поэтому я не уверен, как это работает. В будущем вы всегда можете оставить комментарий в блоге, чтобы связаться со мной напрямую. - person dpdearing; 15.09.2014
comment
ParseTool.parseLine ожидает токенизированное предложение в виде строки. Так что ввод должен быть что-то вроде я, король, работаю там (вы знаете). - person justhalf; 15.09.2014
comment
@user, я не знаю напрямую. Это необходимо компоновщику разрешения кореференции. - person dpdearing; 23.05.2016