Пусть безумная идея —
Вы не рубайте сгоряча.
Вызывайте нас скорее
Через гада главврача!
С уваженьем... Дата. Подпись.
Отвечайте нам, а то,
Если вы не отзовётесь,
Мы напишем... в "Спортлото"!
А хорошо бы в придачу к своей программе иметь (пусть даже простейший) контроль орфографии. Ведь так нередки в текстах АшиПки и оЧеПЯтки...
Разумеется, можно подключаться к MS Word средствами OLE Automation. Уж в Ворде-то проверка орфографии реализована, так пусть он и делает всю работу за нас. Правда, возникнут сложности с разными версиями Ворда. Да и странно это - превращать изящную в своей компактности программу в заурядный придаток при некоем монстре. Есть ли другие пути?
Одна идея, словно призрак коммунизма, бродит среди лингвистически настроенных умов, начиная с середины прошлого века.
Суть гениального (не знаю, нужны ли в этом слове кавычки) озарения такова. Количество 2-буквенных сочетаний в русском алфавите: 33 x 33 = 1089. А допустимых из них: раз-два и обчелся. Можете самостоятельно составить квадратную табличку и вписать в нее все "разрешенные" комбинации. Простейший алгоритм, считай, готов.
Безумие этой идеи в том, что минимальный набор проверочных комбинаций охватывает все потенциально возможные слова русского языка! Становится ненужным огромный словарь-тезаурс, где каждое слово надо указывать во всех падежах, наклонениях, спряжениях и т.п. (Ведь даже тезаурус системы Ispell на 850 тыс. словоформ, на практике оказывается не вполне достаточным).
Но... (спускаясь с небес на землю), мы скоро заметим, что из 2-буквенных комбинаций можно понаделать еще больше невозможных, несуществующих слов. Все они, естественно, были бы при проверке признаны "правильными". Глокая куздра штеко будланула бокра и курдячит бокренка - здесь только допустимые пары букв!
Очевидно, необходимо ужесточить схему, проверяя на допустимость не 2-х буквенные, а 3-буквенные сочетания. Тогда для составления проверочного списка придется прошерстить уже 33 x 33 x 33 = 35937 троек в поисках правильных. Еще более надежным решением будет проверка "четырок". Например, в слове "демагог" - четыре четырки: дема/емаг/маго/агог. Все они - допустимые. Из общего числа в 1185921 - таких найдется тысяч 35-40. Проверяя все четырки заданного слова на допустимость, делаем вывод о верном или неверном его написании. Все упомянутые в Интернета изыски по бессловарной проверке орфографии на этом исчерпываются.
Поразмыслив, можно найти примеры, когда и такая схема слишком уж всеобъемлюща. Блинны. Это слово не опознается, как ошибочное, т.к. 4-ка линн - допустимая. (Длинный). Песьмо - из той же оперы - песь - спесь - песьими. Надо что-то делать...
Попробуем перейти к проверке 5-ти буквенных сочетаний. Весело, дружно, хватаем бревнышко и несем... Что нам стоит среди 39135399 (39 миллионов с хвостиком) вариантов отыскать "правильные пятерки"?
Скрипт на языке Python (в арживе), за считанные минуты решает эту задачу.
Набирите командную строку: python orfo.py bigtext.txt ignore.txt и через несколько минут получите требуемый список "пятерок".
Я составлял "большой текст" по частям, "склеивая" из отдельных файлов. В одном из них потребовалось удалить все знаки переноса. В итоговый bigtext.txt, размером 15 Мб, вошло с дюжину романов. Названий не привожу, произведения отбирались не по величию авторов, а по величине текста. Так быстрее получался должный объем "словесного материала". Разумеется, я пытался придерживаться принципа "общехудожественности". Никаких физико-математико-философских работ с заумно-языколомной терминологией! Литературные произведения только вменяемых авторов... Мы же собираемся проверять орфографию русского языка.
Каждая очередная порция текста добавляла все меньше и меньше нового. Вдалеке просматривается некий предел? Пополнять bigtext.txt новыми шедеврами мне надоело, да и обработка его скриптом стала занимать аж целых 3 минуты - что же будет дальше? Решил пойти на хитрость. Нашел в Интернете частотный словарь русского языка на 69307 наиболее употребительных словоформ и скормил скрипту. Вышло, круглым счетом, 60 тыс. пятерок - так сказать, необходимый минимум. Добавил сей чудный словарь в bigtext.txt... На выходе - 103 тыс. - прирост совсем уже невеликий.
......
Я бы больше расписал, но к сожалению посты ограничены по размеру.
Короче говоря, слова с буковкой "Ё" будут считаться с ошибкой? потому что мало таких текстов для обучения - практически нет.
Кому интересно,то в следующих постах распишу остальные тонкости и Вы можете делать n-банки по своему разумению и своим хотелкам.