Разбиение текста на предложения

Тема в разделе "WASM.HEAP", создана пользователем trsoft, 6 дек 2018.

  1. trsoft

    trsoft Member

    Публикаций:
    0
    Регистрация:
    18 июл 2018
    Сообщения:
    115
    Задача не тривиальная, хотя на первый взгляд кажется простой.
    Приведу несколько ссылок:
    https://zennolab.com/discussion/threads/razbivatel-teksta-na-predlozhenija.13413/
    http://www.dialog-21.ru/digests/dialog2008/materials/html/83.htm

    "
    Большинство систем автоматической обработки языка ставят своей задачей анализ текстов, заранее разбитых на предложения. Например, парсеры определяют синтаксическую структуру предложения, системы автоматического реферирования выделяют из документа наиболее значимые предложения и так далее. В то же время, языковые данные доступны нам чаще всего в виде текстов, размеченных на абзацы, главы и другие более крупные единицы. Поэтому для их эффективного автоматического анализа необходимы соответствующие алгоритмы сегментации. К сожалению, большинство систем используют упрощенные эвристические методы разбиения на предложения. Нам не удалось найти подробных теоретических исследований данной задачи или описаний работающих алгоритмов для русского языка, за исключением очень кратких (см., например, [6]). Задача разбиения текста на предложения для английского языка описывается, в частности, в [7] и [8].
    Рассмотрим простой пример, показывающий, как неправильное разбиение на предложения может породить целый ряд проблем на разных уровнях анализа документа:
    (1) Но ведь Маша знает А. Б. Иванова много лет и никогда про него ничего плохого не слышала!!
    Если мы ошибочно выделим здесь четыре предложения («Но ведь Маша знает А.», «Б.», «Иванова много лет и никогда про него ничего плохого не слышала!» и «!»), то дальнейшая автоматическая обработка окажется бессмысленной. Так, парсеры либо не смогут разобрать предпоследнее предложение, либо сделают это неверно. Интерпретация местоимения «него» окажется затруднительной – скорее всего, будет принято решение, что «него» кореферентно с «Б». Попытки использовать этот фрагмент в экспертной системе приведут к тому, что на вопрос «Что знает Маша?» будет выдан ответ «А». Наконец, модуль автоматического реферирования может включить одно из четырех ошибочно выделенных предложений в аннотацию документа, что приведет к потере качества.
    В данной работе обсуждается алгоритм разбиения текста на предложения. Рассматриваются две связанные задачи:
    1) определение, является ли терминальный знак препинания (здесь и далее под терминальными знаками мы будем понимать точку, восклицательный и вопросительный знаки) границей предложения в данном контексте,
    2) определение всех границ предложений в документе.
    "

    Общее правило опр. конца предложения (разбиения текста).
    если найден признак конца предложения (. ! ?) , то если след. буква заглавная, то это конец предложения.
    Дальше в цикле поиска признак идет код проверки признака на истинность. Если не прошли проверку, то возвращаемся в цикл поиска конца предложения, иначе бреак.

    В функции проверки признака конца на истинность.
    Если дина слова перед точкой = 1, то это не конец предложения.
    Если слово перед точкой найдено в списке сокращений, то это не конец предложения.

    * если в слове или сокр 2 буквы, то не проходит.
    На ул. Петрова (прокатит)
    Это первое, что пришло на ум. (не прокатит) Ерш спрятался в ил. (не прокатит)

    Если след знак . или ! или ?, то это не конец предложения.

    Знаки !? могут стоять внутри предложения. Те нужно отслеживать кавычки и скобки (открылась идем до закрылась)
    Необходима защита от ошибки, иначе в случае опечатки парсер выдаст весь доступный текст. Необходимо отслеживать появление очередного конца предложения и выдать сообщение об ошибке или опечатке или просто предложение.


    Нередко точка в середине предложения просто опечатка:
    (6) Режиссёр Михаил. Бычков поставил в Таллине притчу о любви к невозможному и о презрении к реальности .

    Это вычислить не реально. нужно подключать эвристик или ИИ.
    Допустим идет Имя точка Фамилия, то это опечатка.

    Есть исключения
    -A! Понятно! (1 буква, но прописная и терминальный знак, прямая речь впереди дефис -)
    -И?!


    --- Сообщение объединено, 6 дек 2018 ---
    Режиссёр Михаил... поставил... выпустил....
    Если найдено многоточие 3 точки и след слово не имя собственное и начинается с прописной буквы, то это конец предложения.
    Если точек больше 3-х, следующее слово начинается и заканчивается цифрой, переводом строки, то это не конец предложения.
     
    Последнее редактирование: 6 дек 2018
  2. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.955
    А вопрос-то в чем?) Про 2 буквы и терминальный знак слабоватое по-моему правило. Можно составить словарик распространенных сокращений и у него выхлоп должен быть лучше. Можно даже прям взять огромное количество текстов разной стилистики, регуляркой '/w{2,4}[/.]{1,1}' всё это добро собрать и вручную выбрать. Про одну букву и восклицательный/вопросительный не понял почему 'А! Понял' - одно предложение. С инициалами наверное сложней всего, но можно например типичные суффикс-окончание проверять у слова перед и после таких конструкций: 'А. Б. Иван[ова]'. С латышскими фамилиями наверное слабо прокатит, но не велика беда :don-t_mention:
     
  3. trsoft

    trsoft Member

    Публикаций:
    0
    Регистрация:
    18 июл 2018
    Сообщения:
    115
    f13nd, см выше Если длина слова перед точкой = 1, то это не конец предложения.
    Нужны функции взять слово из текста перед текущей позицией, после текущей позиции.
    Я считаю, что в будущем будут только анализаторы и парсеры, ориентированные на конкретный язык.
    Список сокращений и имен собственных, фамилий свой. Как разработчики обойдут эту проблему?
    Если я выучил русский язык, это не значит, что я знаю английский или французский.
    Разработчики и авторы статей лукавят или не могут выделить подзадачи: проверка орфографии и испр-е опечаток и парсер текста на предложения. Первое требует знание языка на уровне носителя языка, те наличие ИИ
     
  4. q2e74

    q2e74 Active Member

    Публикаций:
    0
    Регистрация:
    18 окт 2018
    Сообщения:
    988
    trsoft, с помощью разбора текстов разве делают хирургические операции? Где надо, сигнал передают точно, долго и без ошибок. Люди легко мирятся с неизбежностью какого-то процента ошибок. Ну не будет международного автоматического создания юридических бумаг, будут перепроверять юристы. Где задача, где была бы такая требуемая точность, требующая ИИ владеющего языком на уровне носителя, проглатывающего опечатки и творческие искажения. Например, Маяковский:
    "
    Жандарм
    вопросительно
    смотрит на сыщика,
    сыщик
    на жандарма.
    С каким наслажденьем
    жандармской кастой
    я был бы
    исхлестан и распят
    за то,
    что в руках у меня
    молоткастый,
    серпастый
    советский паспорт.
    "
    Да мало ли всяких: "Гло́кая ку́здра ште́ко будлану́ла бо́кра и курдя́чит бокрёнка"(с)Л.В.Щерба

    "анализаторы и парсеры", а краулеры?
     
  5. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.955
    Я думаю, если будет материальный интерес, нужные гранты филологам разных стран будут выданы и все будет решено. Такая проблема есть например у синтезаторов речи и там "народное" решение до ужаса простое - balabolka.exe и словари для балаболки. То, что изначально только для русского языка и делалось.

    ЗЫ: а насчет ИИ парадоксальная ситуация - ИИ никем еще не создан, а этим термином называют что попало.
     
    Последнее редактирование: 6 дек 2018
  6. trsoft

    trsoft Member

    Публикаций:
    0
    Регистрация:
    18 июл 2018
    Сообщения:
    115
    балаболка почему-то пропускает предложения и синтезирует через одно. демо-версия или баг?
    в посл. предложении отсутствует точка. Простой парсер склеит его со следующим предложением, хотя правильно определит инициалы. Заголовки как правило не имеют точек, но заканчиваются переводом строки, а следующий символ - прописная буква. Это еще один признак.
    --- Сообщение объединено, 7 дек 2018 ---
    f13nd, ИИ 1-го уровня понимания, те на уровне ребенка 3-6 лет достаточно просто написать.
    Режиссёр ставит притчу.
    Режиссёр поиск подлежащего по словарю, те существит. в именительном падеже - режиссер
    Словарь самый простой ед ч. ИП, поиск слова 1 к 1, без приведения форм и числа, падежа.
    Отвечает на вопос
    Кто ~(что) ? Кто поставил?
    Поиск сказуемого. Отвечает на вопрос: " что делает <подлежащее>?"
    В. Что делает режиссер?
    О. Режиссер ставит. Режисер ставит притчу. ставит притчу.

    ИИ еще умнее определяет, что слово после глагола, сказуемого - дополнение, существительное в винительном падеже

    Относится к глаголу. Глагол ставит соединяется с дополнением только вопросом ставит что(кого)?
    В. Что ставит режисер?
    О. Притчу.
    На др вопросы ИИ не ответит.
    Куда идет режисер?
    Кого ставит режисер?
    Как зовут режисера?

    или, например , если в словаре есть глаголы в прошедшем времени или предусмотрена функция приведения времени, то в следующем предложении: "Режиссёр Михаил Бычков поставил в Таллине притчу."
    найдет больше слов, но поймет только Режисер поставил притчу

    Поэтому не сможет ответить на вопросы:
    Как зовут режисера?
    Где режисер поставил притчу?


    или
    В каком государстве режиссер поставил притчу?
    Нужен второй уровень понимания с логическими выводами.
     
    Последнее редактирование: 7 дек 2018
  7. Minzdrav

    Minzdrav Well-Known Member

    Публикаций:
    0
    Регистрация:
    21 мар 2017
    Сообщения:
    1.082
    Есть специальные инстурумнеты, специальные для определения слов
    в прогрмироаниии .
    Редактор Ви, Емакс. Они для этого и сделаны. Подсчитывать строки,
    по шаблону менять всякое.
    Трсофт.
    Может тебе уже пора просто, переходить на них.
    --- Сообщение объединено, 7 дек 2018 ---
    Редактор EX!!!
     
  8. trsoft

    trsoft Member

    Публикаций:
    0
    Регистрация:
    18 июл 2018
    Сообщения:
    115
    Minzdrav, давай напишем что-нибудь. Есть интересная работа Мозгового Максима Владимировича, диссертация "Машинный семантический анализ русского языка и его применения". Для общего развития. Я зависаю на бирже, но есть идеи. В случае отсутствия информации ИИ или экспертная система или вопросно-ответная система может отвечать: нет информации, не знаю, задайте другой вопрос.
    также может отвечать как Виталик Бутерин <ответ> , но это не точно.
     
    Последнее редактирование: 7 дек 2018
  9. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.955
    Видимо у тебя что-то пошло не так. Словари там все подряд включать не надо. Обычно работает нормально, но самый страшный ее бич - ударения.
     
  10. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    trsoft, так много слов. А толку мало. Достаточно проверить, что точка стоит после лексемы из 1 буквы то это будет означать сокращение.

    Многоточие объединяется в один общий пунктуатор, ещё на стадии лематизации.
    И вообще если говорить о предложениях, то интереснее бить не по точкам, и даже не по запятым, а по сериям слов.

    Кто вам такое сказал? Это преждевременная оптимизация. Ваша задача как программиста выбрать те ошибки, которые встречаются чаще всего. И их за программировать. А вот такие вот баги отлавите в ходе тестирования.

    Как часто вы видите стихи или ФИО? Уверен что оно встречается реже чем 1 раз на 100 точек. Так что на это можно забить, до поры до времени.
    А вообще по хорошему надо завести wiki где обмениваться опытом, что-бы каждый не изобретал свои эвристики с изново.

    Исключения есть всегда. Поэтому ИИ не усекает информация, а напротив расщепляет данные. Он хранит все формы и варианты.
    А при вычислении пользуется иерархическим представлением. Смыслы, слова, лексемы, символы.
    Так вот когда идёт вычисление ИИ производит сопоставления графов.
     
  11. trsoft

    trsoft Member

    Публикаций:
    0
    Регистрация:
    18 июл 2018
    Сообщения:
    115
    Парсер текста, токенизатор и преобразователь токен в слово можно найти в flite и salb.