Я хочу выполнить "разрешение базовой ссылки" с помощью OpenNLP. Документация Apache (Разрешение базовой ссылки) не распространяется как сделать "разрешение кореференции". У кого-нибудь есть документы/учебник, как это сделать?
Разрешение базовой ссылки с использованием OpenNLP
Ответы (2)
На данный момент существует мало документации по разрешению кореференсов для OpenNLP, за исключением очень короткого упоминания о том, как запустить его в файле readme.
Если вы не заинтересованы в использовании OpenNLP, рассмотрите пакет Stanford CoreNLP, который включает пример запуска на Java, включая выполнение разрешения кореференции с помощью пакета. Он также включает страницу с кратким описанием его работы и документы, опубликованные в пакете coreference.
Недавно я столкнулся с той же проблемой и написал несколько заметок в блоге об использовании инструментов 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 немного менее очевидно. Тебе следует:
- Разбейте содержимое на предложения и соответствующие токены
- Создайте объект Parse для каждого предложения
Оберните каждое предложение Parse так, чтобы указать порядок предложений:
final DefaultParse parseWrapper = new DefaultParse(parse, idx);
Итерация по разбору каждого предложения и использование компоновщика для получения объектов Mention из каждого разбора:
final Mention[] extents = _linker.getMentionFinder().getMentions(parseWrapper);
Наконец, используйте Linker, чтобы идентифицировать отдельные объекты во всех объектах Mention:
DiscourseEntity[] entities = _linker.getEntities(arrayOfAllMentions);
getResourceAsStream
, но в конце не описали, как вы сказали Linker загрузить модели, используя getResourceAsStream
. Как вы загружали модели?
- person justhalf; 11.09.2014
Linker
напрямую указывает путь к кореференц-моделям, поэтому нет необходимости использовать getResourceAsStream
. Спасибо, что поймали это!
- person dpdearing; 13.09.2014
ParseTool.parseLine
ожидает предложение String
, а не массив токенов, поэтому я не уверен в первую очередь в токенизации. Точно так же NameFinder
принимает массив токенов, а не объект Parse
, поэтому я не уверен, как это работает. В будущем вы всегда можете оставить комментарий в блоге, чтобы связаться со мной напрямую.
- person dpdearing; 15.09.2014
ParseTool.parseLine
ожидает токенизированное предложение в виде строки. Так что ввод должен быть что-то вроде я, король, работаю там (вы знаете).
- person justhalf; 15.09.2014