Делаем себя развидеть это, или Право на предварительную правку
Мы часто видим ошибки и опечатки в интернете. Как правило, принято или с достоинством пройти мимо, в глубине души презирая неграмотного (или невнимательного) писателя, или, наоборот, с увлечением развернуть просветительскую деятельность (не всегда, к сожалению, уважительную). В лучшем случае, если на сайте установлен Orphus — нажать Ctrl+Enter.
Так поступал и я, пока однажды с ужасом не заметил, что написал «вООбщем» или нечто подобное. Разрушительное влияние чтения форумов, да и, что уж там, самого Хабра, на читательскую грамотность — налицо. А между тем — сейчас есть многое, что могло бы облегчить участь наших бедных глаз!
Приношу извинения за конспективность дальнейшего изложения. Как всегда, цейтнот. Прошу задавать вопросы в комментариях.
Осталось сделать лишь несколько простых идеологических шагов.
Шаг 1. Существует класс ошибок, которые можно исправить автоматически. Например, заменить ВООБЩЕМ и ВОБЩЕМ на В ОБЩЕМ не составит труда, равно как и заметить, что в русском языке нет глаголов, оканчивающихся на -ЮТЬСЯ. Автоматически же искать разницу между ДЕРЖАТСЯ и ДЕРЖАТЬСЯ не рекомендую.
Такой подход применяется для борьбы с нецензурной бранью в чатах и на форумах — и довольно деструктивно. В остальных случаях, как правило, текстовый редактор лишь подчёркивает красным незнакомые слова при наборе их автором текста (писателем). Это рассуждение плавно подводит нас к следующему шагу.
Шаг 2. Читатель имеет право исправить текст перед прочтением. Да-да, не обязательно уповать на грамотность писателя или бдительность редактора/модератора. Можно самому делать свой интернет чище и светлее.
Так и родилась идея chas-correct — расширения для браузера, автоматически исправляющего многие ошибки. Репозиторий на github. Поддерживаются Firefox, Firefox Mobile и Chromium-подобные. (Для Google Chrome — очень близкий форк от ymatuhin в каталоге).
ОБНОВ 04.10.2015 Сделали юзерскрипт для хромоподобных. Инструкция по установке.
Далее привожу подробности в форме вопрос-ответ.
В: Зачем нужен chas-correct? Любой современный браузер умеет подчёркивать ошибки красненьким.
О: Умеет, конечно. Только «свои» ошибки, возникающие при наборе текста, и только робко подчёркивать. Chas-correct же самостоятельно скрывает от глаз читателя чужие ошибки, изначально содержащиеся в тексте на загруженной странице.
В: Неужели до этого раньше не додумались?!
О: Сам удивляюсь. Были схожие идеи: раз и два. Но объединять их почему-то не стали…
В: Все ли ошибки исправляет chas-correct?
О: Конечно, нет! Только то, что, во-первых, часто встречается, во-вторых, может быть легко формализовано и исправлено автоматически.
В: Есть ли chas-correct в официальном каталоге расширений Google Chrome/Opera/…?
О: Нет. Мне некогда возиться с их верификациями и как-то жаль выкладывать подорожавшие доллары за аккаунт, который в любой момент могут забанить или подвести под санкции. Кроме того, я считаю политику навязывания централизованной установки и проверки расширений сомнительной; впрочем, это тема для отдельного холивара, который можно развести в комментариях. Если кто-то запакует в crx и выложит в каталоге — возражать, разумеется, не буду.
В: Обновляется ли chas-correct?
О: К сожалению, пока нет. Значительное количество ошибок уже проанализировано и исправляется им, а дальнейшее увеличение словаря ошибок требует некоторой оптимизации алгоритма. Если же предусмотреть обновление не только словаря, но и самого движка, да ещё и в обход официальных хранилищ расширений — у устанавливающего возникнет вполне обоснованная паранойя (как, впрочем, и в случае установки из магазина Chrome; были случаи). В будущем планируется разработать обновление только словаря в обход всевозможных сторов.
В: Как убедиться, что расширение работает?
О: Если вы не видите здесь ошибок — скорее всего, оно работает. Или вот хороший хабрапример .
В: Возможны ли ложные срабатывания, когда chas-correct исправляет правильное на неправильное?
О: Практически исключены. Теоретически такое возможно при столкновении с неологизмами, именами персонажей, географическими названиями и прочими несловарными словами. Однако иногда расширение исправляет неправильное на неправильное: так, «ЧТО-БЫ» всегда превратится во «ЧТОБЫ», даже если должно быть «ЧТО БЫ».
В: А как оно вообще работает?
О: На регулярках. Вот не надо на этом моменте гневно топорщить бороду и воздевать руки к небу, не надо! Полноценный анализ текста в реальном времени в браузере всё равно едва ли возможен. По крайней мере, при текущей вычислительной мощности ЭВМ. Даже в случае с регулярными выражениями потребовались значительные усилия на оптимизацию.
UPD: Регулярные выражения я считаю более качественной моделью, описывающей ошибки, чем словарь, из-за обилия жаргона, терминологии, имён собственных и т. д.
В: А почему бы не отправлять текст на проверку тому же Яндекс-Спеллеру в режиме реального времени?
О: Во-первых, это приведёт к значительному количеству ложных срабатываний, такие эксперименты до меня проводились, повторюсь. Во-вторых, это бы означало, что вся переписка пользователя отправляется на сторонний сервис… что, мягко говоря, не очень хорошо в наши тревожные времена.
В: Работает ли chas-correct с динамически подгружаемым содержимым, например, с мгновенными сообщениями ВКонтакте?
О: Работает, но не всегда мгновенно, чтобы не насиловать таймер.
В: А откуда взяты базы ошибок и показатели эффективности?
О: У Хабра такая удобная структура страниц… Прямая нумерация. Цикл, wget, на парсер, порезано на слова, посчитано, потом самое частотное — через Яндекс-Спеллер.
В: Исправляет ли chas-correct набираемый мною текст?
О: Работа расширения блокируется примерно на 3 секунды после любого нажатия клавиши на клавиатуре, после чего оно корректирует набранный текст, переводя, кстати, курсор в его начало. Так что если Вы хотите, чтобы chas-correct исправлял не только то, что Вы читаете, но и то, что Вы пишете — возьмите за правило ждать 3 секунды между окончанием набора сообщения и отправкой. Это вообще очень полезно…
В: А зачем автор всё это делает?
О: Честно… Есть одна чудесная кареглазая девушка, которая меня на это вдохновила. Да и самому нужно. Буду очень рад, если кому-нибудь пригодится. Кроме того, это — строчка в портфолио (какая-никакая), инвайт на Хабр, шанс на поощрение от ВГУ (пользуясь случаем, передаю компании «Информсвязь» большое спасибо за именные стипендии). А ещё chas-correct — это неплохой способ сделать приятное интеллигентной девушке (читателю на заметку, кстати: chas-correct + AdBlock — и можно тащить в филармонию).
В: Это никак не решает проблему безграмотности, это просто помогает закрыть глаза на неё!
О: А вот и не угадали. Человек, которые не видит орфографических ошибок, накапливает так называемую «читательскую грамотность» и делает ошибки при письме/наборе с меньшей вероятностью. А вообще прививать любовь к родному языку нужно, кто ж с этим поспорит.
В: Код ужасен! Его надо причесать и оптимизировать!
О: Код под GPL, патчи принимаются, форки тоже никто не отменял. Кстати, закомменченные куски кода — не от моей небрежности, а чтобы десять раз не переизобретать несработавшую оптимизацию.
В: Есть ли какие-то настройки, графический интерфейс,…?
О: Нет. Многого ещё нет… Просто совесть не позволяет мне более держать эту идею неопубликованной. (Здесь должна быть хрестоматийная история про Васю и Петю, писавших стартапы.) Но можно нажать Ctrl+Shift+A — и произойдёт автоматическая расстановка пробелов вокруг знаков препинания. И больших букв. По крайней мере, попытается произойти.
В: Какие перспективы у проекта, что автор планирует делать дальше?
О: Оптимизировать алгоритмы по времени. Пополнять словарь. Приделать графический интерфейс, галочки-флажочки: коррекция е/ё, антимат и т.д.
В: Я программист, знаю регулярные выражения и хочу помочь.
О: В dictionary.js, например, есть пометки TODO. Там реально есть, что делать.
В: Я не программист и регулярных выражений не знаю, но тоже хочу помочь.
О: Собирайте ошибки. Присылайте мне на nickkolok@mail.ru — обязательно с указаниями адреса страницы и ошибочного написания слова.
В: Я вебмастер, заведую сайтом, где школьники часто пишут с ошибками. Можно ли использовать наработки chas-correct напрямую на сайте?
О: Если очень хочется — то можно. Даже кэширование должно работать, можно просто подключить скрипты, как в манифесте. Конечно, гораздо правильнее прогонять отправляемое через такой фильтр, а уже имеющуюся базу обработать однократно. С Node.js оно вроде как совместимо. В общем, пишите на nickkolok@mail.ru, разберёмся.
Конечно, работу над расширением нужно продолжать. Есть и третий идеологический шаг — но его только предстоит сделать, и это уже совсем другая история.
UPD: В комментариях пишут, что в Google Chrome под Windows убрали возможность ставить расширения не из магазина. Прошу всех сведущих высказаться, насколько это давно произошло и можно ли как-то это обойти.