Задача не тривиальная, хотя на первый взгляд кажется простой. Приведу несколько ссылок: 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-х, следующее слово начинается и заканчивается цифрой, переводом строки, то это не конец предложения.
А вопрос-то в чем?) Про 2 буквы и терминальный знак слабоватое по-моему правило. Можно составить словарик распространенных сокращений и у него выхлоп должен быть лучше. Можно даже прям взять огромное количество текстов разной стилистики, регуляркой '/w{2,4}[/.]{1,1}' всё это добро собрать и вручную выбрать. Про одну букву и восклицательный/вопросительный не понял почему 'А! Понял' - одно предложение. С инициалами наверное сложней всего, но можно например типичные суффикс-окончание проверять у слова перед и после таких конструкций: 'А. Б. Иван[ова]'. С латышскими фамилиями наверное слабо прокатит, но не велика беда
f13nd, см выше Если длина слова перед точкой = 1, то это не конец предложения. Нужны функции взять слово из текста перед текущей позицией, после текущей позиции. Я считаю, что в будущем будут только анализаторы и парсеры, ориентированные на конкретный язык. Список сокращений и имен собственных, фамилий свой. Как разработчики обойдут эту проблему? Если я выучил русский язык, это не значит, что я знаю английский или французский. Разработчики и авторы статей лукавят или не могут выделить подзадачи: проверка орфографии и испр-е опечаток и парсер текста на предложения. Первое требует знание языка на уровне носителя языка, те наличие ИИ
trsoft, с помощью разбора текстов разве делают хирургические операции? Где надо, сигнал передают точно, долго и без ошибок. Люди легко мирятся с неизбежностью какого-то процента ошибок. Ну не будет международного автоматического создания юридических бумаг, будут перепроверять юристы. Где задача, где была бы такая требуемая точность, требующая ИИ владеющего языком на уровне носителя, проглатывающего опечатки и творческие искажения. Например, Маяковский: " Жандарм вопросительно смотрит на сыщика, сыщик на жандарма. С каким наслажденьем жандармской кастой я был бы исхлестан и распят за то, что в руках у меня молоткастый, серпастый советский паспорт. " Да мало ли всяких: "Гло́кая ку́здра ште́ко будлану́ла бо́кра и курдя́чит бокрёнка"(с)Л.В.Щерба "анализаторы и парсеры", а краулеры?
Я думаю, если будет материальный интерес, нужные гранты филологам разных стран будут выданы и все будет решено. Такая проблема есть например у синтезаторов речи и там "народное" решение до ужаса простое - balabolka.exe и словари для балаболки. То, что изначально только для русского языка и делалось. ЗЫ: а насчет ИИ парадоксальная ситуация - ИИ никем еще не создан, а этим термином называют что попало.
балаболка почему-то пропускает предложения и синтезирует через одно. демо-версия или баг? в посл. предложении отсутствует точка. Простой парсер склеит его со следующим предложением, хотя правильно определит инициалы. Заголовки как правило не имеют точек, но заканчиваются переводом строки, а следующий символ - прописная буква. Это еще один признак. --- Сообщение объединено, 7 дек 2018 --- f13nd, ИИ 1-го уровня понимания, те на уровне ребенка 3-6 лет достаточно просто написать. Режиссёр ставит притчу. Режиссёр поиск подлежащего по словарю, те существит. в именительном падеже - режиссер Словарь самый простой ед ч. ИП, поиск слова 1 к 1, без приведения форм и числа, падежа. Отвечает на вопос Кто ~(что) ? Кто поставил? Поиск сказуемого. Отвечает на вопрос: " что делает <подлежащее>?" В. Что делает режиссер? О. Режиссер ставит. Режисер ставит притчу. ставит притчу. ИИ еще умнее определяет, что слово после глагола, сказуемого - дополнение, существительное в винительном падеже Относится к глаголу. Глагол ставит соединяется с дополнением только вопросом ставит что(кого)? В. Что ставит режисер? О. Притчу. На др вопросы ИИ не ответит. Куда идет режисер? Кого ставит режисер? Как зовут режисера? или, например , если в словаре есть глаголы в прошедшем времени или предусмотрена функция приведения времени, то в следующем предложении: "Режиссёр Михаил Бычков поставил в Таллине притчу." найдет больше слов, но поймет только Режисер поставил притчу Поэтому не сможет ответить на вопросы: Как зовут режисера? Где режисер поставил притчу? или В каком государстве режиссер поставил притчу? Нужен второй уровень понимания с логическими выводами.
Есть специальные инстурумнеты, специальные для определения слов в прогрмироаниии . Редактор Ви, Емакс. Они для этого и сделаны. Подсчитывать строки, по шаблону менять всякое. Трсофт. Может тебе уже пора просто, переходить на них. --- Сообщение объединено, 7 дек 2018 --- Редактор EX!!!
Minzdrav, давай напишем что-нибудь. Есть интересная работа Мозгового Максима Владимировича, диссертация "Машинный семантический анализ русского языка и его применения". Для общего развития. Я зависаю на бирже, но есть идеи. В случае отсутствия информации ИИ или экспертная система или вопросно-ответная система может отвечать: нет информации, не знаю, задайте другой вопрос. также может отвечать как Виталик Бутерин <ответ> , но это не точно.
Видимо у тебя что-то пошло не так. Словари там все подряд включать не надо. Обычно работает нормально, но самый страшный ее бич - ударения.
trsoft, так много слов. А толку мало. Достаточно проверить, что точка стоит после лексемы из 1 буквы то это будет означать сокращение. Многоточие объединяется в один общий пунктуатор, ещё на стадии лематизации. И вообще если говорить о предложениях, то интереснее бить не по точкам, и даже не по запятым, а по сериям слов. Кто вам такое сказал? Это преждевременная оптимизация. Ваша задача как программиста выбрать те ошибки, которые встречаются чаще всего. И их за программировать. А вот такие вот баги отлавите в ходе тестирования. Как часто вы видите стихи или ФИО? Уверен что оно встречается реже чем 1 раз на 100 точек. Так что на это можно забить, до поры до времени. А вообще по хорошему надо завести wiki где обмениваться опытом, что-бы каждый не изобретал свои эвристики с изново. Исключения есть всегда. Поэтому ИИ не усекает информация, а напротив расщепляет данные. Он хранит все формы и варианты. А при вычислении пользуется иерархическим представлением. Смыслы, слова, лексемы, символы. Так вот когда идёт вычисление ИИ производит сопоставления графов.