tomita-parser
tomita-parser copied to clipboard
Своебразно работает сегментатор
Простой текст с адресом
г. Москва ул. Порываева, дом 22, корп.1, кв. 23
Сегментатор разбивает на 4 предложения
г . EOS Москва ул . EOS Порываева , дом 22 , корп.1 , кв . EOS 31 EOS
Правильно ли я понимаю, что нет возможности создавать грамматические правила, которые бы извлекались из нескольких приложений. И соответственно нет возможности собрать один факт.
Если такое поведение ожидаемое, то соответственно вопрос: есть ли возможность повлиять на сегментатор? Например, установить собственный знак разделения приложений?
Я использую Windows версию Yandex Tomita-parser(build date Jan 24 2013) со страницы https://tech.yandex.ru/tomita/
Томите нужен словарь аббревиатур, после которых она не должна ставить границу предложения. Для каждой аббревиатуры нужно создать отдельную статью в газеттире следующего формата:
TAbbreviation "г." { key = { "abbreviation_г." type = CUSTOM } text = "г." type = NewerEOS }
Значения type описаны тут: https://github.com/yandex/tomita-parser/blob/master/src/FactExtract/Parser/afdocparser/builtins/articles_base.gztproto#L62
В ключе важен только "type = CUSTOM". Сегментатор опознаёт эти статьи по типу TAbbreviation.
У меня похожая проблема. Попробовал добавить аббревиатуры:
TAbbreviation "г." {
key = { "abbreviation_г." type = CUSTOM }
text = "г."
type = NewerEOS
}
TAbbreviation "ул." {
key = { "abbreviation_г." type = CUSTOM }
text = "ул."
type = NewerEOS
}
TAbbreviation "кв." {
key = { "abbreviation_г." type = CUSTOM }
text = "кв."
type = NewerEOS
}
Текст для примера:
Встреча будет по адресу г. Москва, ул. Смольная, 1. Купите печенек, два к.г. И приходите на Смольную ул. Печенье не забудьте.
Результат выделения предложений:
Встреча будет по адресу г. Москва , ул. Смольная , 1 . EOS Купите печенек , два к.г . EOS И приходите на Смольную ул. Печенье не забудьте . EOS
Тут "к.г." определилось верно, несмотря на то, что есть аббревиатура "г.". Но там, где предложение закончилось на "ул.", разбор прошел с ошибкой. Есть ли вариант задать более точные настройки и что тут можно сделать?
Так как все аббревиатуры заранее знать нельзя, то мы обшли это дело собственной сегментацией и удалением всех точек не после конца предложения. Все "точные" точки мы заменили на троеточия.
Там надо было ключи поправить: `TAbbreviation "г." { key = { "abbreviation_г." type = CUSTOM } text = "г." type = NewerEOS }
TAbbreviation "ул." { key = { "abbreviation_ул." type = CUSTOM } text = "ул." type = NewerEOS }
TAbbreviation "кв." { key = { "abbreviation_кв." type = CUSTOM } text = "кв." type = NewerEOS }`