Что значит разделить текст на предложения
Урок по обучению грамоте (письмо) по теме: «Работа с текстом. Деление текста на предложения» (программа Л.В. Занкова)
1. Организационный момент.
– Урок письма. Сегодня продолжим учиться красиво и грамотно писать, делить слова для переноса, работать с текстом и отгадывать ребусы.
2. Актуализация знаний.
– Начнём работу с игры “Дополни предложение”.
– Звуки бывают (гласные и согласные).
– Согласные бывают (твёрдые и мягкие, звонкие и глухие).
– После мягкого согласного пишутся буквы (Я, Ё, Ю, Е, И и буква Ь знак).
– Слова переносятся по (слогам).
– Имена людей пишутся с (заглавной буквы).
– Первое слово в предложении пишется с (заглавной буквы).
– В конце предложения ставим (точку).
– Молодцы. Переходим к работе по прописи с. 16.
– Но сначала скажите, о чём будем помнить во время письма.
(Тетрадь с наклоном положу,
Ручку правильно держу,
Сяду прямо, не согнусь,
За работу я возьмусь).
3. Постановка проблемы.
Всему название дано
И зверю, и предмету
Вещей вокруг полным, полно –
А безымянных нету!
И все, что может видеть глаз, –
Над нами, и под нами, –
И всё что в памяти у нас,
Означено словами.
– Прочитайте жужжащим чтением слова вверху страницы и представьте предметы, которые они обозначают.
(Дети читают слова: ПАЛЬТО, ИНЕЙ, Игорь, КОНЬКИ, ДОЖДЬ, СНЕГ).
– Какие слова можно объединить в группы?
(Дети объединяют в группы по значению, по наличию ь знака и т.д.).
– Выполним 1 задание. Разделим слова на слоги и выпишем те из них, которые можем перенести с одной строки на другую. (Учащиеся упражняются в делении слов на слоги и называют слова, которые можно перенести).
Запись на доске и в тетрадях – ПАЛЬ-ТО КОНЬ-КИ.
– Можно ли объединить эти слова по в одну группу?
– По какому признаку? (По переносу).
Вывод. Как можно переносить слова?
– Выполним следующее задание. Подчеркнём слова, в которых звуков меньше, чем букв. (Ребята называют слова с мягким знаком).
– Что показывает мягкий знак?(Мягкий знак указывает на мягкость согласного звука).
Мягкий знак, хитрый знак
Не назвать его никак.
Он не произносится,
А в слово так и просится.
– Какие из слов верхней строки спрятались на картине?
4. Работа по картине.
Открывается картина “Зимние игры детей”).
Дети называют слова снег, иней, коньки, пальто, подбирают признаки к этим предметам.
– Какое время года изображено? (Зима).
– Какие забавы зимой радуют детей? (Дети составляют предложения).
– А в каких зимних играх приняли участие вы?
– Кто любит кататься на санках? На лыжах? На коньках?
А кто лепил снеговика? Играл в снежки?
– Да, весело зимой! Особенно когда хорошая погода, ярко светит солнышко.
– Встали дети по порядку, выполним зимнюю зарядку.
5. Физкультминутка.
(Запись на магнитофоне).
Мы на лыжах в лес идём – дети показывают движение Мы взбираемся на холм – лыжника Мы немного отдохнём – руки вверх, вниз Слепим мы комочки снега – “делают” снежок Поиграем до обеда – кидаем и увёртываемся от снежков Не боимся мы мороза – хлопок по плечам Ловим снег, хлопок в ладоши – хлопки в ладоши Слепим ком большой – наклон вперёд Его покатили всей гурьбой – катим ком Руки в стороны, по швам – руки в стороны, вниз Снега хватит вам и нам. – руки в стороны, вверх, вперёд и вниз
6. Работа над предложениями и текстом.
– В следующем задании мы узнаем чем увлекался Игорь зимой.
– Прочитаем жужжащим чтением.
– Что вы узнали про Игоря?
– Что заметили в задании? (В задании все слова записаны с прописной буквы и нет знаков препинания).
– Наведём порядок с помощью простого карандаша – разобьём на предложения.
– Читаем 1 предложение. Отметим опасные места. (Первое слово в предложении пишем с заглавной буквы, в конце предложения ставим точку).
Дети читают следующее предложение и т.д.
– Сколько получилось предложений?
– Можно эти предложения назвать текстом?
(Это текст. В нём 3 предложения. Предложения связаны по смыслу, поясняют предыдущее).
7. Физкультминутка для глаз.
– Выполним задание. Спишите текст, деля его на предложения. (Дети записывают текст под управлением. Повторяем правила списывания.
– Читаем как написано, диктую себе по слогам.
– Перед письмом что проверяем?
Тетрадь правильно кладу,
Ручку правильно держу,
За посадкою слежу,
Аккуратненько пишу.
8. Проверка. Работа со словами из словаря.
В тексте встретились слова с трудным написанием.
(Открываются слова с иллюстрациями – ПАЛЬТО, КОНЬКИ).
– Кто знает значение этих слов? (Дети рассказывают о коньках и пальто. Учитель дополняет).
– Назови опасное место в слове.
– Сколько раз встретилось в тексте?
– При делении для переноса мы тоже писали их.
– Подчеркните опасную букву в словах.
Вывод. Правописание этих слов нельзя проверить, поэтому надо запомнить.
9. Отгадывание ребусов.
– А какое задание осталось на странице? (Будем отгадывать ребусы).
– Отгадав их, мы узнаем, кто ещё вместе с Игорем был на катке.
– Кто отгадал? Кто согласен? Что можно сказать о словах? (Это имена мальчиков.
Пишем с заглавной буквы).
На доске идёт запись слов с комментированием.
– Выполним задание. Подчеркнем буквы мягких согласных и буквы, которые указывают на их мягкость.
Вывод. Какие гласные указывают на мягкость согласных звуков? (Я, Ё, Е, Ю, И и буква Ь знак).
10. Итог урока.
– Чему учились? Что было интересно? Кому было трудно? Выбери портрет своего настроения на уроке. – Молодцы! Урок окончен.
Словарная работа на уроке. Коньки – узкие полозья, прикрепляемые к обуви для катания на льду.
Изгиб конька обычно украшали изображением лошадиной головы.
Коньки – вид спорта, катание, бег на таких полозьях.
Металлические коньки впервые появились почти ЗОО лет назад. Молодой царь Пётр 1 сам выковал для себя железные коньки. Их называли скороходами.
Пальто – верхняя одежда, надеваемая поверх платья, костюма.
Разделение текста на предложения с помощью Томита-парсера
Чтобы подготовить русскоязычные тексты для дальнейшего анализа, мне однажды понадобилось разбить их на предложения. Разумеется, автоматически. Что приходит на ум в первую очередь, если нужно разделить текст на предложения? Разбить по точкам — угадал?
Если вы начнете это делать, то довольно быстро столкнетесь с тем, что точка — это не всегда разделитель предложений (“т.к.”, “т.д.”, “т.п.”, “пр.”, “S.T.A.L.K.E.R.”). Причем эти токены не всегда будут исключениями при разбивке текста на предложения. Например, “т.п.” может быть в середине предложения, а может и в конце.
Вопросительный и восклицательный знак тоже не всегда разделяют текст на предложения. Например, “Yahoo!”. Предложения могут разделять и другие знаки, например, двоеточие (когда следует список из отдельных утверждений).
Поэтому я долго не думая поискал готовый инструмент и остановился на Томита-парсере от Яндекса. О нем и расскажу.
Вообще, Томита-парсер — это мощный инструмент для извлечения фактов из текста. Сегментатор (разбивка текста на предложения) в нем — лишь часть проекта. Томита-парсер можно скачать сразу в виде бинарника и запускать из командной строки. Мне эта система понравилась тем, что она работает на основе правил, не прихотлива к ресурсам и дает возможность настраивать процесс сегментации. А также по моим наблюдениям в большинстве случаев отлично справляется с задачей.
Еще мне понравилось, что при возникновении вопросов можно задать их на github и иногда даже получить ответ.
Запуск
Запускается Томита-парсер таким образом
То есть чтение происходит из stdin, вывод — в stdout.
Результат получаем примерно такой:
Одна строка — одно предложение. На этом примере видно, что разбивка прошла корректно.
Особенности
Настройки
Я столкнулся с тем, что при анализе предложений, содержащих адреса, система разбивает их некорректно. Пример:
Как видим, разбивка прошла некорректно. К счастью, такие вещи можно настраивать. Для этого в gzt файле прописываем
То есть просим считать, что после “ул.” предложение всегда продолжается. Пробуем:
Теперь все хорошо. Пример настроек я выложил на github.
Какие минусы
О некоторых особенностях я упомянул выше. Пару слов о минусах инструмента на данный момент.
Первое — это документация. Она есть, но в ней описано не все. Попробовал сейчас поискать настройку, которую описал выше — не нашел.
Второе — это отсутствие легкой возможности работы с парсером в режиме демона. Обработка одного текста за 0.3-0.4 секунды с учетом загрузки всей системы в память для меня не критична, так как вся обработка идет в фоновых процессах и среди них есть гораздо более жирные задачи. Для кого-то это может стать узким местом.
Пример вызова из PHP
Как и говорил выше, подаем входные данные в stdin, читаем из stdout. Пример ниже сделан на основе github.com/makhov/php-tomita:
В завершение
Мне в процессе работы над текстом регулярно попадаются проекты, в которых авторы делают сегментатор самостоятельно. Возможно потому, что с первого взгляда задача кажется чуть проще, чем на самом деле. Надеюсь статья будет полезна тем, кто собирается сделать очередной сегментатор в рамках своего проекта и сэкономит время, выбрав готовый вариант.
Буду рад узнать из комментариев, каким инструментом для разбивки текста на предложения пользуетесь вы?
Деление речи на предложения, их составление и письменное оформление. 2-й класс
Класс: 2
Оборудование: тетрадь, конверты с заданиями, компьютер, мультимедийный проектор.
Ход урока
I. Мотивация деятельности (1 минута).
Личностные умения: проявлять интерес к изучению темы.
Познавательные умения: воспроизводить по памяти информацию, необходимую для установления учебной проблемы.
— Аня и Ваня получили странное приглашение:
«Ктототам. Начало концерта в 10 часов утро. Приглашаю вас и все ребята. Концерт состоится 25 май. В наша школа состоится веселый концерт «Здравствуй, лето?» Жду?»
— Вам понятно, от кого пришло приглашение? (Нет.)
— Что в нем перепутано? (Предложения поменялись местами. Ошибки в знаках препинания. Ошибки в словах.)
— Какие знания необходимо иметь, чтобы грамотно написать приглашение? (Необходимо дополнить уже имеющиеся знания новыми.)
II. Актуализация знаний (1 минута).
Цель: активизировать знания о предложении, об интонации, таким образом подвести детей к постановке учебной проблемы.
Регулятивные умения: обеспечение организации проверки имеющихся знаний.
— Как мы выражаем свои мысли и чувства? (С помощью предложений.)
— Предложения мы всегда произносим с какой-то интонацией. Что такое интонация? Что означает это научное слово? (Работа голоса, его усиление, повышение и понижение.)
-Что мы показываем с помощью интонации? (Что мысль закончена.)
III. Постановка учебной проблемы (3 минуты).
Цель: стимулировать осознанное желание самостоятельно поставить учебную задачу.
— Посмотрите на доску. Прочитайте. (Дети читают про себя.)
— Можно ли эту группу слов назвать текстом? (Нет.)
— Почему? (Нет предложений.)
— Как вы думаете, чему мы будем учиться сегодня на уроке? (Делить речь (текст) на предложения.)
— Может, кто-то догадался, какая тема нашего урока? (Деление речи на предложения.)
— Да. Мы будем учиться распознавать предложения по их признакам и оформлять их в письменной речи.
IV. Учебно-познавательная деятельность (35 минут).
1. Устная работа с текстом (6 минут).
— Послушайте текст, сосчитайте, сколько в нем предложений. Как вы узнаете границы предложения? (Понижение голоса в конце предложения.)
— Сколько предложений в этом тексте? (Четыре.)
— Куда птицы улетают осенью? (На юг.)
— Зачем птицы улетают осенью на юг? (Здесь становится холодно и голодно.)
— Как называются такие птицы? (Перелетные.)
— Все ли птицы улетают в теплые края? (Нет.)
— Что должны делать люди, чтобы зимующие птицы смогли выжить во время холодов? (Подкармливать их.)
— Послушайте текст еще раз и скажите, сколько слов в 1 предложении. (Одно.)
— А как доказать, что здесь одно слово – предложение? (Произносим предложение с интонацией и понимаем мысль, которая им выражена.)
— Можно было бы сказать и двумя словами, например: Стоит осень. Наступила осень. Но первое слово ничего к мысли не добавляет, поэтому его говорить не обязательно. Предложения из одного слова довольно часто используются в речи.
— Любое слово может быть предложением? (Нет, только то, которое выражает законченную мысль.)
2. Работа в парах (10 минут).
— У вас на партах лежат две карточки №1. Одну берет одна пара, другую – вторая пара. Вам нужно выполнить задание, пользуясь карточкой-помогайкой.
(Дети выполняют задания, пользуясь памяткой-алгоритмом.)
1 пара: Расцвела сирень. Солнечный. Дети гуляют в парке. Полезный. Аккуратный. Красивое. Вы ходили в поход? Пахнет. Интересный. Как тихо кругом!
2 пара: Птицы летят быстро. Погода была жаркая. Красивый. Лисий хвост пушистый. Зимний. Теплый. Кто не спрятался? Красное.
— Поменяйтесь тетрадями и проверьте написанные предложения друг у друга. Докажите, что вы написали предложения. (Предложения выражают законченную мысль.)
— Какие слова вы зачеркнули? Почему они не являются предложением? (Не выражают законченную мысль.)
3. Игра «Угадай знак» (10 минут).
— Как вы думаете, зачем мы говорим друг другу предложения? (Чтобы понимать друг друга.)
— Каждое предложение мы говорим с какой-то целью. Поэтому и интонация предложения бывает разная. А это значит и разные ставятся знаки в конце предложения. Сейчас мы поиграем в игру «Угадай знак».
Достаньте из конверта №2 карточку и карточку-помогайку. Выполните задания.
(Дети выполняют задание, пользуясь памяткой-алгоритмом.)
1 группа. Ты любишь раннее весеннее утро легкий ветерок шелестит в молодой листве.
2 группа. Проснулись и защебетали птицы ты чувствуешь радость наступающего дня.
3 группа. Как прекрасно все вокруг рано утром кричит петух.
4 группа. Почему идет дождь какой сильный дождь.
5 группа. Кот ловит мышей прячьтесь, мышки.
6 группа. Любишь ли ты лето как красиво в лесу летом.
7 группа. Где спит белка у нее есть дупло.
Физкультурная минутка (1 минута).
4. Работа в группах (5 минут).
— Проверяем. Сколько предложений поучилось в тексте? (Три.)
— Каким предложением вы закончили текст? Почему выбрали это предложение? (Дети объясняют свой выбор.)
— Что же выражает предложение? (Вывод: предложение заключает законченную мысль.)
5. Самостоятельная работа (3 минуты).
— Откройте тетради. Упражнение 196. Найдите границу предложения и поставьте нужный знак препинания. Покажите начало предложения правильной буквой.
— Сколько предложений у вас получилось? (Три.)
— Прочитайте каждое предложение с интонацией конца мысли.
— Кто не сделал ни одной ошибки?
V. Итог урока (4 минуты).
Цель: научить соотносить результат с поставленной целью.
— Чему вы научились сегодня на уроке? (Делить речь на предложения.)
VI. Рефлексия (1 минута).
Цель: оценить результат своей деятельности с поставленной учебной задачей.
— Оцените свою работу на уроке. Подарите свой лучик солнышку.
(Солнце на доске без лучей. Дети прикрепляют к макету солнца лучи.)
— Если было на уроке все понятно, вы справились со всеми заданиями самостоятельно, прикрепите длинный лучик. Если затруднялись при выполнении заданий, чувствовали себя неуверенно – короткий лучик.
Разбитие текста на предложения лингво-независимым методом на примере библиотеки AIF
В прошлой статье мы уже рассказывали о новой NLP библиотеке. Однако тогда мы рассказали «обовсем» и не о чем конкретном. Сегодня мы поговорим о теоретических аспектах разбития предложения на токены лингво-независимыми алгоритмами. Теоретические выкладки будут подкреплены практической реализацией в библиотеке AIF. Поехали…
Термины
Мы решили указать термины, которыми мы пользуемся, чтобы строить нашу статью на их базе.
Теперь перейдем к более запутанному дефиницию — предложению. Берем определение из википедии:
Предложе́ние (в языке) — это единица языка, которая представляет собой грамматически организованное соединение слов (или слово), обладающее смысловой и интонационной законченностью.[1] С точки зрения пунктуации, предложение как законченная единица речи оформляется в конце точкой, восклицательным или вопросительным знаками — или многоточием.
Данное определение можно использовать почти как есть, немного переделав вторую его часть (пунктуационную):
предложение — часть токенов, разделенных между собой техническими символами, которые используются для разбития текста на предложения;
Так мы оставляем за кадром какие именно символы используются для разбития текста на предложения.
Процесс разбития текста на предложения лингво-независимым методом
Для начала давайте определимся с условием задачи:
Каждая из этих задач довольно независима и может быть рассмотрена в отрыве от остальных. Давайте понемногу разбираться. Для каждого шага будет дана ссылка на вики с английской версией описания алгоритма.
1 Поиск технических символов в тексте
Как можно найти технические символы в тексте?
Просмотрев бегло текст на большинстве языков, можно обнаружить, что данные символы (технические символы) всегда стоят в конце токенов. Эта гипотеза сразу же вносит ограничения на язык входящего сообщения (в языке должны использоваться пробелы). Давайте теперь подумаем как можно определить технические символы, если наша гипотеза верна.
Первое, что может прийти на ум — посчитать для каждого символа вероятность того, что этот символ в данном тексте стоит в конце токенов. А после отобрать символы, которые имеют самую высокую вероятность.
Данное предположение разбивается о первый же эксперимент с разными языками, показывая, что во многих языках существуют буквы стоящие с завидной регулярностью в самом начале токенов или в конце. Использовать этот подход так наивно нельзя.
В результате формула вероятности того, что символ является техническим выглядит так:
P1(ch) — это вероятность того, что символ ch в данном тексте стоит в конце токенов
P2(ch) — это вероятность того, что символ стоящий перед символом ch в данном тексте — тоже стоит в конце токенов
давайте рассмотрим пример расчета вероятности P2. Допустим, у нас есть такие символы:
и вероятность того, что они стоят в конце токенов:
P1(.) = 0.8
P1(y) = 0.9
P1(a) = 0.01
P1(b) = 0.02
символ точка в конце токенов встретился 4 раза, а перед точкой стояли такие символы:
y — 3 раза
a — 1 раз
в этом случае P2(‘.’) будет рассчитываться следующим образом:
3/4 * P1(y) + 1/4 * P1(a) = 0.75 * 0.9 + 0.25 * 0.01 = 0.6775
Это уже более интересно. И вроде даже работает. Однако, если покопаться в коде AIF, то можно увидеть, что анализ проводится немного более сложный, чем просто подсчет вероятностей по этой формуле.
Дело в том, что даже эта формула не дает 100% желаемого результата. Ибо есть языки, в которых слова часто оканчиваются на одни и те же два символа. Ну, например, текст в котором существенно преобладает окончание “ec”. И при этом сам по себе символ “е” часто стоит в конце токенов. В результате символ “с” будет выделен в качестве технического, так как он стоит часто в конце токенов и перед ним символ, который также встречается в конце токенов.
Но и это довольно просто лечиться — необходимо отфильтровать технические символы, которые были получены первой формулой. Фильтровать можно по двум простым критериям. Во-первых, по вероятности того, что символ всегда стоит в конце токена. Да-да, мы говорили, что это плохой критерий, но он же является прекрасным фильтром символов, найденных нашей эвристикой. Во-вторых, нужно убрать символы, которые встречались в тексте очень мало. Нам не очень хочется получить на выходе символ, который в тексте встретился аж один раз и в это раз он был в конце токена. Вероятно, этот символ разделитель, но мы это узнать никак не можем.
В результате AIF делает нечто следующее:
Отбирает N-символов с самой высокой вероятностью, рассчитанной по формуле 1, а из них отбирает N2-символов, которые имеют наибольшую вероятность P1. Как правильно подобрать N/N2 числа — это еще та задача, но углубляться в ее подробности мы сейчас не будем, так как AIF пока берет эти числа в некотором роде «с потолка». Нам еще предстоит проверить на практике несколько гипотез на этот счет.
В первой статье на Хабре был показан график первого прохода формулой по тексту. Я хочу лишь сказать, что с того момента формула была изменена и теперь работает точнее (намного точнее).
А теперь давайте немного поговорим о качественном анализе.
Качественный анализ подхода показывает такие результаты (на 186 книг):
12 книг, в которых не удается найти точку на 186 книг;
2 книги, в которых не удается найти запятую;
3 книги, в которых в качестве технического символа была выделена буква;
2 Деление технических символов на группы
На предыдущем этапе мы смогли определить список технических символов. Список может выглядеть, например, так:
Теперь необходимо поделить этот список на группы. В этом примере символы могут быть поделены на группы следующим образом:
Задача деления на группы была решена простой гипотезой — в каждом языке есть символы, которые чаще употребляются в начале предложений. Соответственно для каждого технического символа можно составить граф связей с символами, которые следуют после технического символа.
В результате мы получим для каждого разделительного символа приблизительно следующий граф связей:
связи точки:
.
P=32, S=16, T=63, F=15, W=44, <=67, N=14
связи запятой:
,
p=47, a=59, b=84, c=52, s=102, d=76, t=295, e=49, w=318, m=59
связи латинской буквы ‘y’:
y
s=3, t=2, w=6
Данные связи взяты из реального текста и они отфильтрованы. Дело в том, что AIF для анализа оставляет только наиболее весомые связи. Без фильтрации граф будет выглядеть несколько иначе.
Само собой, абсолютные весы нам неинтересны и данные связи будут переконвертированные в вероятностные.
Имея для каждого символа такой граф связей, мы можем поделить символы на два кластера, для этого лишь необходимо определить алгоритм сравнений двух графов.
Реализацию сравнения графов в AIF лучше всего рассмотреть на примере. Допустим у нас есть два графа связей:
.
А 0.2
П 0.6
а 0.05
п 0.15
А теперь алгоритм сравнения:
вот как-то так. Да, тут есть свои нюансы, например, P(ch1, ch1) может не быть равным P(ch2, ch1). Но никто и не говорит, что Alpha2 — это финальная версия;)
Особенно хорошо этот подход работает на языках, в которых используется регистр (т.е. большая или маленькая буквы). Чуть хуже, но все равно эффективно, работает на арабском и подобных языках.
Качество работы данного модуля:
0.5 книги на 100 книг, где точка и запятая попадают в одну и ту же группу.
Само собой, в этом пункте ОЧЕНЬ много осталось за кадром. Например, после какого порога вероятности P(ch1, ch2) считаем, что два графа будут равными, и что два символа, которые образуют эти графы из одного кластера?
3 Определить, какая из групп технических символов отвечает за разбитие текста на предложения
А вот тут все совсем просто. Отображаем массив токенов в новый массив, где каждому токену ставится в соответствие номер группы технического символа, которым заканчивается токен. Если в токенах нету технического символа, то ставим ему нулевую группу. Например, у нас есть такие токены:
Привет! Как твои дела? Я, думаю, что все в порядке. Нет?
И на прошлом этапе у нас были выделены такие группы разделителей:
1 — [. ]
2 — [,]
Соответственно после отображения мы получим такой массив:
1 0 0 1 2 2 0 0 0 1 1
Имея такой массив, мы можем построить связь между группой (например, между 1ой группой) и символами, с которых начинается следующий токен.
Ну и пример: вот связи первой группы с символами — взято из реальной книги(связи нормализованы по отношению к максимуму):
А вот связи для второй группы:
Как и в прошлый раз, AIF фильтрует связи, оставляя только самые весомые. Так что до фильтрации связи будут немного другими.
А вот связи нулевой группы:
Имея эти данные, нам лишь необходимо посчитать какой из графов ближе к графу нулевой группы. Технические символы образующие эту группу (самую близкую к нулевой группе) — это символы, которые используются для разделения токенов внутри предложения. В то же время граф, который максимально удален от графа нулевой группы, образован группой технических символов, которые отвечают за разделение текста на предложения.
В данном примере первая группа — это та группа технических символов, которая разделяет токены на предложения, а вторая группа содержит символы, которые делят токены внутри предложения.
Качественный анализ результатов показывает:
4 книги из 180, где точка была отнесена к неверной группе;
2 книги из 180, где запятая была отнесена к неверной группе;
4 Разбить текст на предложения при помощи выделенных групп символов
Ну хорошо. Есть у нас группы символов и мы знаем какая группа за что отвечает. Но как же теперь понять, в каких случаях символы первой группы используются для разбития текста на предложения, а в каких — нет?
Например, как понять, что точка в конце “С.С.С.Р.” не для конца предложения, а просто окончание аббревиатуры. Ну или сокращения типа “тыщ.” и т.д.
И опять же, все просто.
Зная символы, которые относятся к первой группе, мы можем пробежаться по всем токенам и посчитать среднюю длину предложений. После этого для каждого случая использования символов из первой группы мы можем:
посмотреть первый символ следующего токена и сказать для какой группы технических символов характерна эта связь;
посмотреть расстояние до предыдущего символа первой группы и до следующего;
Если символ следующего токена характерен для второй группы символов и размер предыдущего и следующего предложения меньше или равно среднему размеру предложения в тексте, то в этом конкретном случае символ первой группы НЕ используется для разбития текста на предложения.
Примеры из книги с местами найденными AIF, где разделитель первой группы был отмечен как разделитель второй группы:
«Последнее восстание» в Сеуле Международная биеннале
«Этот убийца… он такой мягкий и
Эльдара Рязанова. «Ирония судьбы», «Служебный роман»
5–7 мин. также может стать простым
1 мин. горячая вода(+37–38°), 1
5–10 сек. – холодная вода(
5 тыс. лет назад и выполняли
Когда смотришь на этот результат очень забавно осознавать, что он работает абсолютно языково независимо, без какой-либо входной информации, кроме самого текста. Вот пример из другой книги на английском языке:
by U.S. federal laws and
the U.S. unless a copyright
К сожалению, для текущего шага у нас нету никаких результатов качества =(
Все увиденное — это лишь Alpha2, мы еще даже не начинали заботиться о качестве и скорости работы.
Согласно с планами Alpha3 мы в следующем релизе уделим внимание качеству и скорости, а также рефакторинг. Единственной новой функцией библиотеки будет построение словаря языка входного текста.
Сам алгоритм и API библиотеки детально расписаны на вики проекта: github.com/b0noI/AIF2/wiki
В месте с библиотекой мы так же обновили простенький консольный клиент — AIF-CLI, который теперь умеет показывать найденные технические символы и группы этих символов.
Kovalevskyi Viacheslav – algorithm developer, architecture design, team lead (viacheslav@b0noi.com / b0noi)
Ifthikhan Nazeem – algorithm designer, architecture design, developer
Sviatoslav Glushchenko — REST design and implementation, developer
Oleg Kozlovskyi QA (integration and qaulity testing), developer.
Balenko Aleksey (podorozhnick@gmail.com) – added stammer support to CLI, junior developer
Evgeniy Dolgikh — QA assistance, junior developer
PS: Если у вас есть интересный проект NLP, свяжитесь с нами 😉
Ссылки на проект и подробности
project language: Java 8
license: MIT license
issue tracker: github.com/b0noI/AIF2/issues
wiki: github.com/b0noI/AIF2/wiki
source code: github.com/b0noI/AIF2
developers mail list: aif2-dev@yahoogroups.com (subscribe: aif2-dev-subscribe@yahoogroups.com)
Все тесты проводились на 186 книгах следующих языков: