Как запустить несколько классификаторов с помощью Stanford NER?

Я хочу запустить один из встроенных классификаторов для файла, а затем запустить свой собственный классификатор, объединяя результаты.

Как это сделать в Stanford NER, в частности, через командную строку?

Мне известно о Как мне включить более одного классификатора при использовании Стэнфордского именованного распознавателя сущностей?, но это немного отличается, поскольку в этом вопросе задается несколько классификаторов с NERServer.

Похоже, мне нужно использовать CoreNLP для последовательного запуска нескольких моделей NER ... могу ли я сделать это без CoreNLP?

Скажем, у меня был файл с содержанием: «Быстрая коричневая лисица перепрыгнула через ленивую собаку в Америке». Я запускаю один из встроенных классификаторов, и он находит «Америку» в качестве местоположения, затем я запускаю свой собственный, и он находит «лиса» и «собака», результат должен быть:

the quick brown <animal>fox</animal> jumped over the lazy <animal>dog</animal> in <location>America</location

person Neil McGuigan    schedule 30.01.2014    source источник
comment
Так вы хотите, чтобы Stanford NER осуществил слияние?   -  person Reactormonk    schedule 12.02.2014
comment
Я не вижу, как это будет работать из командной строки, но если бы я сделал это в коде, я бы, вероятно, установил два конвейера, каждый из которых был настроен со своими собственными моделями; создать повторяющийся набор ключей для каждой модели, поскольку по умолчанию они используют одни и те же ключи; запустить оба конвейера на текстовых образцах; прочтите каждый список результатов («CoreMap»); а затем создайте новую CoreMap для каждого результата. Хотя я не вижу преимущества одной структуры данных над двумя отдельными структурами данных.   -  person Jonny    schedule 18.02.2014
comment
Вам нужен инструмент командной строки, чтобы: а) запустить Stanford NER для некоторого текста, б) запустить еще один NER для того же текста и в) как-то объединить два. Это правильно? Возможно, вы сможете сделать это с помощью tee или аналогичного, но я не совсем понимаю бит «слияние результатов». Это может быть ситуация для какого-то связующего кода.   -  person a p    schedule 19.02.2014
comment
@ap проблема в том, что если вы запускаете один классификатор за другим, XML становится шатким, поэтому его нужно слить с умом. Спасибо   -  person Neil McGuigan    schedule 19.02.2014
comment
@NeilMcGuigan Я понимаю - это то, что я имею в виду, когда говорю, что бит «слияния» сбивает меня с толку. Какой результат вы ожидаете?   -  person a p    schedule 19.02.2014
comment
@ap обновил вопрос. Спасибо   -  person Neil McGuigan    schedule 19.02.2014


Ответы (1)


Итак, место для начала, если вы твердо настроены сделать это с помощью одной команды из командной строки:

cat corpus.txt | tee `stanfordNER -options here > out1.xml` | myNERTagger -options here > out2.xml && diff out1.xml out2.xml | awk to do whatever merging you want here...

Но вы, скорее всего, обнаружите, что это не решение. Вам нужно будет писать предложение за предложением в небольшом скрипте, вызывая pyner или аналогичный подключитесь к Stanford tagger, а затем к любому настраиваемому tagger, который вы создали, объединяя различия по мере продвижения. Форматирование вывода ваших тегеров значительно изменит то, как это выглядит.

person a p    schedule 19.02.2014