Stanford NLP / NER — как использовать экстракторы и классификаторы?

#java #stanford-nlp #named-entity-recognition #named-entity-extraction

#java #stanford-nlp #распознавание именованных объектов #извлечение именованных объектов

Вопрос:

Демонстрационный файл, который поставляется с пакетом распознавания именованных сущностей Stanford, показывает примеры классификации предложений. Параметры вывода представляют собой строки, такие как:

 "I eat apples with Michael and Jordan on mondays" 
 

=>

  "I eat apples with <PERSON>Michael</PERSON> and 
<PERSON>Jordan</PERSON> on <DATE>mondays</DATE>"
 

или карта классификаций для каждого слова.

Существует ли метод, который возвращает отображение классификации в список объектов?

НАПРИМЕР:

 {
  PERSON : ["Michael", "Peter"]
  DATE : ["mondays"]
}
 

Комментарии:

1. просто разбирайте строки самостоятельно, добавляя теги 🙂

2. было интересно, есть ли более элегантный способ сделать это

3. Короткий ответ: нет. Длинный ответ: существует несколько программных интерфейсов для разных языков, используйте их, если вам не нравится формат вывода

Ответ №1:

Вот минимальный скрипт bash, который будет выполнять это как постобработку :

 echo "I eat apples with <PERSON>Michael</PERSON> and <PERSON>Jordan</PERSON> on <DATE>mondays</DATE>"
| grep -Eo '<([^>/]*)>[^<]*'
| awk -F '>' '{nes[$1]=nes[$1]","$2;} END {for(t in nes) print tolower(t)":{"nes[t]"}";}'
| sed 's/:{,/:{/' | tr -d '<'
 

используя это, вы получите списки, как в вашем примере :

 date:{mondays}
person:{Michael,Jordan}
 

Вероятно, вы захотите обработать несколько записей («uniq» или посчитать их?).