2016-06-17 1 views
4

Я использую StanfordCoreNLPServer извлечь некоторую информацию из текста (например, поверхностей, названий улиц)Имея теги NER и RegexNER в выводе StanfordCoreNLPServer?

Улицы даются специально обученная моделью РЭК, и поверхность, с помощью простого регулярного выражения через RegexNER.

Каждый из них работает отлично, но при использовании вместе только результат NER присутствует в выводе под тегом ner. Почему нет метки regexner? Есть ли способ получить результат RegexNER?

Для информации:

  • StanfordCoreNLP v3.6.0

  • URL-адрес, используемый:

    'http://127.0.0.1:9000/' 
    '?properties={"annotators":"tokenize,ssplit,pos,ner,regexner", ' 
    '"pos.model":"edu/stanford/nlp/models/pos-tagger/french/french.tagger",' 
    '"tokenize.language":"fr",' 
    '"ner.model":"ner-model.ser.gz", ' # custom NER model with STREET labels 
    '"regexner.mapping":"rules.tsv", ' # SURFACE label 
    '"outputFormat": "json"}' 
    

    как предложено here, то regexner аннотатор является послеner, но все-таки ...

  • токовый выход (выдержка):

    {u'index': 4, u'word': u'dans', u'lemma': u'dans', u'pos': u'P', u'characterOffsetEnd': 12, u'characterOffsetBegin': 8, u'originalText': u'dans', u'ner': u'O'} 
    {u'index': 5, u'word': u'la', u'lemma': u'la', u'pos': u'DET', u'characterOffsetEnd': 15, u'characterOffsetBegin': 13, u'originalText': u'la', u'ner': u'O'} 
    {u'index': 6, u'word': u'rue', u'lemma': u'rue', u'pos': u'NC', u'characterOffsetEnd': 19, u'characterOffsetBegin': 16, u'originalText': u'rue', u'ner': u'STREET'} 
    {u'index': 7, u'word': u'du', u'lemma': u'du', u'pos': u'P', u'characterOffsetEnd': 22, u'characterOffsetBegin': 20, u'originalText': u'du', u'ner': u'STREET'} 
    [...] 
    {u'index': 43, u'word': u'165', u'lemma': u'165', u'normalizedNER': u'165.0', u'pos': u'DET', u'characterOffsetEnd': 196, u'characterOffsetBegin': 193, u'originalText': u'165', u'ner': u'NUMBER'} 
    {u'index': 44, u'word': u'm', u'lemma': u'm', u'pos': u'NC', u'characterOffsetEnd': 198, u'characterOffsetBegin': 197, u'originalText': u'm', u'ner': u'O'} 
    {u'index': 45, u'word': u'2', u'lemma': u'2', u'normalizedNER': u'2.0', u'pos': u'ADJ', u'characterOffsetEnd': 199, u'characterOffsetBegin': 198, u'originalText': u'2', u'ner': u'NUMBER'} 
    
  • Ожидаемый результат: Я хотел бы последние 3 пунктов, которые будут помечены SURFACE, т.е. RegexNER результата.

Дайте мне знать, если вам нужна дополнительная информация.

ответ

3

Хорошо, все, кажется, работает, как я хочу, если я поставил regexner первый:

"annotators":"regexner,tokenize,ssplit,pos,ner", 

кажется есть проблема упорядочения на каком-то этапе процесса?

+0

Вы уверены, что указанная выше строка не работает без ошибок? –

+0

Да, это связано с настройкой, описанной в вопросе. – stellasia

+0

Если я запустил код с порядком аннотаторов, вы упомянули в ответе, который он дает «аннотатор» regexner »требует аннотатора« tokenize »« –

2

Вот что RegexNER documentation говорит об этом:

RegexNER не перезаписывает существующее назначение лица, если не дать ему разрешение на третьей вкладке разделенных колонке, которая содержит разделенный запятыми список типов сущностей которые могут быть перезаписаны. Только метка O не может быть перезаписана, но вы можете указать дополнительные теги сущностей, которые всегда могут быть перезаписаны.

Бакалавр (Arts | Законы | Наука | Инжиниринг | Divinity) СТЕПЕНЬ

Lalor МЕСТО ЛИЦО

труда ОРГАНИЗАЦИЯ

Я не уверен, что ваш файл отображения точно выглядит, но если он просто сопоставляет объекты с метками, тогда оригинальный NER будет обозначать ваши объекты как NUMBER, а RegexNER не сможет их перезаписать. Если вы явно объявляете, что некоторые NUMBER-объекты должны быть перезаписаны как SURFACE в вашем файле сопоставления, тогда он должен работать.