Мы часто видим ошибки и опечатки в интернете. Как правило, принято или с достоинством пройти мимо, в глубине души презирая неграмотного (или невнимательного) писателя, или, наоборот, с увлечением развернуть просветительскую деятельность (не всегда, к сожалению, уважительную). В лучшем случае, если на сайте установлен Orphus — нажать Ctrl+Enter.

Так поступал и я, пока однажды с ужасом не заметил, что написал «вООбщем» или нечто подобное. Разрушительное влияние чтения форумов, да и, что уж там, самого Хабра, на читательскую грамотность — налицо. А между тем — сейчас есть многое, что могло бы облегчить участь наших бедных глаз!

Приношу извинения за конспективность дальнейшего изложения. Как всегда, цейтнот. Прошу задавать вопросы в комментариях.
Осталось сделать лишь несколько простых идеологических шагов.

Шаг 1. Существует класс ошибок, которые можно исправить автоматически. Например, заменить ВООБЩЕМ и ВОБЩЕМ на В ОБЩЕМ не составит труда, равно как и заметить, что в русском языке нет глаголов, оканчивающихся на -ЮТЬСЯ. Автоматически же искать разницу между ДЕРЖАТСЯ и ДЕРЖАТЬСЯ не рекомендую.
Такой подход применяется для борьбы с нецензурной бранью в чатах и на форумах — и довольно деструктивно. В остальных случаях, как правило, текстовый редактор лишь подчёркивает красным незнакомые слова при наборе их автором текста (писателем). Это рассуждение плавно подводит нас к следующему шагу.

Шаг 2. Читатель имеет право исправить текст перед прочтением. Да-да, не обязательно уповать на грамотность писателя или бдительность редактора/модератора. Можно самому делать свой интернет чище и светлее.

Так и родилась идея chas-correct — расширения для браузера, автоматически исправляющего многие ошибки. Репозиторий на github. Поддерживаются Firefox, Firefox Mobile и Chromium-подобные. (Для Google Chrome — очень близкий форк от ymatuhin в каталоге).

Далее привожу подробности в форме вопрос-ответ.

В: Зачем нужен chas-correct? Любой современный браузер умеет подчёркивать ошибки красненьким.
О: Умеет, конечно. Только «свои» ошибки, возникающие при наборе текста, и только робко подчёркивать. Chas-correct же самостоятельно скрывает от глаз читателя чужие ошибки, изначально содержащиеся в тексте на загруженной странице.

В: Неужели до этого раньше не додумались?!
О: Сам удивляюсь. Были схожие идеи: раз и два. Но объединять их почему-то не стали…

В: Все ли ошибки исправляет chas-correct?
О: Конечно, нет! Только то, что, во-первых, часто встречается, во-вторых, может быть легко формализовано и исправлено автоматически.

В: Есть ли chas-correct в официальном каталоге расширений Google Chrome/Opera/…?
О: Нет. Мне некогда возиться с их верификациями и как-то жаль выкладывать подорожавшие доллары за аккаунт, который в любой момент могут забанить или подвести под санкции. Кроме того, я считаю политику навязывания централизованной установки и проверки расширений сомнительной; впрочем, это тема для отдельного холивара, который можно развести в комментариях. Если кто-то запакует в crx и выложит в каталоге — возражать, разумеется, не буду.

В: Обновляется ли chas-correct?
О: К сожалению, пока нет. Значительное количество ошибок уже проанализировано и исправляется им, а дальнейшее увеличение словаря ошибок требует некоторой оптимизации алгоритма. Если же предусмотреть обновление не только словаря, но и самого движка, да ещё и в обход официальных хранилищ расширений — у устанавливающего возникнет вполне обоснованная паранойя (как, впрочем, и в случае установки из магазина Chrome; были случаи). В будущем планируется разработать обновление только словаря в обход всевозможных сторов.

В: Как убедиться, что расширение работает?
О: Если вы не видите здесь ошибок — скорее всего, оно работает. Или вот хороший хабрапример .

В: Возможны ли ложные срабатывания, когда chas-correct исправляет правильное на неправильное?
О: Практически исключены. Теоретически такое возможно при столкновении с неологизмами, именами персонажей, географическими названиями и прочими несловарными словами. Однако иногда расширение исправляет неправильное на неправильное: так, «ЧТО-БЫ» всегда превратится во «ЧТОБЫ», даже если должно быть «ЧТО БЫ».

В: А как оно вообще работает?
О: На регулярках. Вот не надо на этом моменте гневно топорщить бороду и воздевать руки к небу, не надо! Полноценный анализ текста в реальном времени в браузере всё равно едва ли возможен. По крайней мере, при текущей вычислительной мощности ЭВМ. Даже в случае с регулярными выражениями потребовались значительные усилия на оптимизацию.

В: А почему бы не отправлять текст на проверку тому же Яндекс-Спеллеру в режиме реального времени?
О: Во-первых, это приведёт к значительному количеству ложных срабатываний, такие эксперименты до меня проводились, повторюсь. Во-вторых, это бы означало, что вся переписка пользователя отправляется на сторонний сервис… что, мягко говоря, не очень хорошо в наши тревожные времена.

В: Работает ли 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 убрали возможность ставить расширения не из магазина. Прошу всех сведущих высказаться, насколько это давно произошло и можно ли как-то это обойти.

Комментарии (66)


  1. Aiki
    06.05.2015 03:31
    +4

    А что делать, если орфография была намеренно искажена?


    1. NickKolok Автор
      06.05.2015 04:09
      +2

      Как правило, расширение в таком случае не сможет полностью откорректировать текст. Уцелеет, скорее всего, искажение окончаний падежей и сафсемм ачывидьные ашыппке, так что литературный эффект остается.
      А вот отдельные крики «Развидеть!», действительно, могут стать непонятны.


      1. AllexIn
        06.05.2015 06:30
        +1

        Надо подсветку измененного текста отдельным цветом и показ оригинала при наведении мыши.


        1. NickKolok Автор
          06.05.2015 16:36
          +1

          Такой вариант рассматривался, но был отклонён по нескольким причинам.
          Во-первых, сейчас DOM не меняется, идёт изменение лишь «листьев», то есть textNodes. Любое выделение цветом или шрифтов — это дополнительные тэги, можно случайно искорёжить вёрстку. Отчаянный вариант — юникодное выделение текста, например, символами подчёркивания.


          1. Keyten
            06.05.2015 21:41

            Можно поставить обработчик mousemove на body, объединить с getBoundingClientRect, и без всякого вмешательства в DOM ловить наведение мышкой (и добавлять, скажем, всплывающую подсказку, которая будет где-нибудь в конце body, станет ломать вёрстку с очень маленьким шансом, и, если и будет, то временно).
            Правда, извращение, зато работает.
            И лишние тормоза, да.

            Можно сделать опциональным.

            Над replace-ом, который отчитывается о заменах, я задумывался, могу скинуть свою реализацию, если интерено.


            1. NickKolok Автор
              06.05.2015 22:06

              Интересно, конечно!
              Заодно посмотрим, что с производительностью.


        1. NickKolok Автор
          06.05.2015 16:38

          Прошу прощения за фрагментарность ответов.
          Во-вторых, изменение дом приведёт к значительным тормозам. И так уже пришлось оптимизировать много. Если кто-то, кстати, может с этим помочь — будет здорово.


        1. NickKolok Автор
          06.05.2015 16:54

          В-третьих, замена — это простой .replace()
          Он не отчитывается (насколько я знаю), где произведена замена и произведена ли вообще. А холостой вызов тоже может быть, например, replace(/сп[ао]сиб[ао]/g,«спасибо») — это очень упрощённо, на деле там, конечно, ещё границы слов и обработка заглавных букв.
          Значит, придётся дополнительно выяснять, где там что-то изменилось и изменилось ли вообще. Ещё тормоза.


    1. nickolaym
      06.05.2015 11:42

      Или это вообще (sic! не «в общем») белорусский язык.


      1. NickKolok Автор
        06.05.2015 16:58
        +1

        Если Вы часто читаете сайты на белорусском, Вам, наверное, не стоит ставить агрессивный корректор русского языка. Возможно, существует возможность ослабить словарь так, чтобы подходил для двух языков. Код на гитхабе под GPL, патчи принимаются.


        1. MaxxxZ
          07.05.2015 14:44

          В сайтах славянской группы такое лучше не использовать. На одном ресурсе может быть текст на двух языках, причём неразличим автоматически. Что в русском ошибка — в белорусском и украинском может быть нормой. Трыкотаж например.


          1. NickKolok Автор
            08.05.2015 00:27

            И снова приходим к необходимости списков сайтов-исключений, причём, по-видимому, индивидуальных.

            Покажем, что список сайтов-исключений нужно делать именно индивидуальным. Рассмотрим сайт, публикующий статьи на двух языках — русском и украинском. Тогда человеку, знающему украинский, но не знающему русский, ставить расширение вовсе смысла нет, человеку, знающему русский, но не знающему украинский — есть смысл ставить расширение и использовать его на рассматриваемом сайте, поскольку ложных исправлений в украинском он всё равно не заметит, а вот человеку, знающему оба языка, придётся выключать расширение на этом сайте, поскольку даже в пределах одной страницы будут русские куски текста, которые можно исправить, и украинские, которые не нужно.
            Таким образом, двум разным людям потребуются разные списки сайтов-исключений.


  1. barkalov
    06.05.2015 08:28
    +6

    Простите, оффтопик: Мне очень нравится идея Orphus. Частенько пользуюсь и отсылаю ошибки, например, на lenta.ru, сидя за стационарным компьютером. Легко, удобно — выделил, ctrl-enter, enter, всё. Но что меня дичайше удивляет — отсутствие реализации Orphus в мобильных браузерах. В 2015 году! На официальном форуме висит тикет-вопрос аж с 2013 года. Никакой реакции.


    1. zenden2k
      06.05.2015 10:32
      +2

      А что вы хотели от сайта с дизайном 98 года?


      1. Jodes
        06.05.2015 11:52
        +4

        А зачем им дизайн 2015-го года?


        1. ingumsky
          06.05.2015 23:09

          Это философский вопрос.


        1. NickKolok Автор
          06.05.2015 23:14
          -1

          Вот Вы так говорите, а где-то плачет ребёнок топ-менеджера Intel, которому не хватает на очередную поезду в Диснейленд…


    1. NickKolok Автор
      06.05.2015 17:01

      Не думаю, что протокол у них закрыт. Наверняка можно написать расширение для Firefox Mobile, который добавит такую возможность, и скрипт непосредственно для сайтов.
      Главное, чтобы сами орфусовцы не возражали.


    1. romeOz
      06.05.2015 18:46

      Если не ошибаюсь, автором Orphus является небезызвестный DmitryKoterov (dklab). Возможно, он может разъяснить эту ситуацию.


  1. jim1406
    06.05.2015 10:03
    -10

    Не в тему… А чем плох «вообщем»? :) Меня так в школе учили, и в книгах так писали…


    1. jim1406
      06.05.2015 10:18
      +1

      Ммм, спасибо, теперь все понятно!

      P.S. Видимо, имелось ввиду, что большими буквами, а не то, что два «о». Но вы мне объяснили, я понял. Тыкать в стрелочку же проще, правда?


      1. AllexIn
        06.05.2015 10:19
        +9

        Слова «вообщем» не существует. Нет такого слова. Есть наречие «вообще» и фразеологизм «в общем».


        1. jim1406
          06.05.2015 10:20
          +3

          Спасибо!



  1. serafims
    06.05.2015 10:10
    +14

    Все-таки, до сих пор не понимаю, почему на Хабре нет «Орфуса» с отправкой замечаний автору статьи в реальном времени. Это снизило бы количество бесполезных комментариев об ошибках в разы…


    1. musuk
      06.05.2015 11:39

      Тогда чем займутся граммар-наци?


      1. serafims
        06.05.2015 11:56
        +6

        пусть себе рейтинг накручивают специальный, мол, «Вася, предложил 1067 правок»


      1. NickKolok Автор
        06.05.2015 17:03

        Сейчас они могут слать мне патчи, в основном, в словарь chrome/dictionary.js


    1. serafims
      06.05.2015 11:57

      главное, чтобы в интерфейсе автора статьи сразу можно было кликнуть и быстро перейти на место в тексте, требующее исправления…


      1. NickKolok Автор
        08.05.2015 00:32

        Ещё одна идея — скрестить Хабр с git. Этакий githabr.
        Статьи кладём в репозиторий, пишем утилитку, которая по какому-нибудь githabr push заливает изменения на Хабр/Гиктаймс, дублируем в обычный репозиторий на гитхабе… Там, по идее, и комментарии к отдельным строчкам есть.
        Потом главное — не забыть указать в статье ссылку на гитхабовский реп.


        1. bogolt
          10.05.2015 23:10
          +1

          Офигенная идея! И не будет дурацкого удаления статей авторами, и будут форки у всех желающих… Сообщество модеров и бэкенд по сути существуют, нужно только морду написать.


  1. Houston
    06.05.2015 11:24
    +1

    Классная штука! А можно убрать вывод в консоль под какой-нибудь девелоперский флаг? Мешает работать (:


    1. NickKolok Автор
      06.05.2015 17:04

      Оно как бы бэта.
      Можно закомментировать correct.logToConsole, в качестве временной меры.


  1. macik_spb
    06.05.2015 11:34

    Не хватает сюда функционала Orphus. Т.е. не просто «повышать культуру» читателей, но и повышать качество исходного материала.
    Понятно, что работает на стороне клиента и мы не имеем связи с автором.

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

    …правда при такой схеме открытым остается вопрос, как избежать дублирования (читай спама) на редакторский адрес, когда страницу будут просматривать тысячи читателей. Хотя и тут есть идеи…


    1. NickKolok Автор
      06.05.2015 17:15
      +1

      Проще на сайт воткнуть скрипт, и пусть каждый раз на клиенте правит. Правильнее — периоически прогонять базу с новыми словарями и обрабатывать поступающие статьи и комментарии.
      Идея интеграции с орфусом, спору нет, соблазнительна, но слишком уж разные принципы действия.
      Другое дело, что может быть и иное расширение.
      Читатели предлагают правки, правки слетаются на центральный сервер. Если один и тот же вариант правки предложен достаточным количеством человек, он начинает автоматически показываться. Как защититься от спама и прочего затапливания — не знаю, вариации на тему proof-of-work или авторизация.
      А вообще, если сделать это децентрализованным и анонимным, получается оригинальный ответ цензуре и пропаганде… причём любой.


      1. degs
        06.05.2015 18:03
        +1

        Если один и тот же вариант правки предложен достаточным количеством человек, он начинает автоматически показываться.

        боюсь что в таком варианте язык начнет быстро эволюционировать в неожиданном направлении.
        Вопросы правописания голосованием не решаются ©


        1. NickKolok Автор
          06.05.2015 20:31

          Луркояз примерно так эволюционировал, разве нет?
          Что до тематики «среднего» сайта, то Википедия вроде как особого влияния на русский язык не оказала.


          1. degs
            06.05.2015 21:02

            Так Вы за правильный язык или за луркояз?
            Но вообще-то это шутка была.


            1. NickKolok Автор
              06.05.2015 21:47
              +2

              Луркояз — это вполне обоснованный и «правильный» язык — «правильный» в том смысле, что там существуют некоторые правила. Да, там есть написание «труъ», да, там есть слова «поцреот» и «поцанчик» — последняя пара иллюстрирует принцип «объявления слов однокоренными постфактум». Думаете, в русском такого не было? Свидетель когда-то был свЕдетелем, однокоренным слову «ведать», а не «видеть» (и вообще писался через ять). Мир и мiр когда-то были разными словами. В луркоязе есть своя фразеология («чуть более, чем полностью», «луркояз такой луркояз») и обобщение фразеологизма — мемы. Луркояз активно производит заимствования из других языков, в частности, английского и японского. Нет в этом ничего плохого.

              Я за то, чтобы не уродовалось правильное написание слов русского языка.


  1. Meklon
    06.05.2015 17:45
    +1

    О. Наконец опубликовал) поздравляю ещё раз с прибытием на хабр)


    1. NickKolok Автор
      06.05.2015 20:26

      Спасибо. Статья была за это время серьёзно дополнена. Более того, если сообществу эта тема интересна — честно говоря, я боялся криков: «На Гиктаймс!», но, судя по всему, напрасно — будет ещё как минимум одна статья — про то, как это работает технически, какие алгоритмы применяются, какая там оптимизация и, что небезынтересно, какие методы оптимизации внезапно не сработали.


  1. dollar
    06.05.2015 20:16
    +1

    Словарь лучше сделать на основе форумов без модерации к популярным играм, где много школьников. Это steam-форумы, wikia-форумы и комментарии к статьям и т.д. На хабре грамотность всё же довольно высокая.


    1. NickKolok Автор
      06.05.2015 20:30
      +1

      Спасибо. Ждал комментария, в котором предложат направление развития. Прошу ссылки на подобные форумы в студию.
      Про грамотность на Хабре можно было бы поспорить, но пока я этого делать не буду. Это повод для отдельной статьи с аккуратной аналитикой. Вкратце — в среднем примерно 3-4 ошибки на хабрастатью расширение ловит, это без учёта капитализации.


      1. NickKolok Автор
        06.05.2015 20:34

        Прошу прощения, уточняю: на статью с комментариями, т. е. на страницу. Что, впрочем, не сильно меняет дело, ибо, как известно, «комментарии к статье на Хабре зачастую ценнее самой статьи».


        1. Beltoev
          06.05.2015 23:46
          +1

          По-моему, с комментариями всё-таки в корне меняет дело: когда читаешь статью, безграмотность автора «режет» глаза. Если же переходишь к комментариям, то морально настраиваешься, что грамотность некоторых комментаторов оставляет желать лучшего. Поэтому предлагаю не судить Хабр по комментариям =)

          А в остальном, идея интересная, но, как говорили выше, не хватает подсветки, либо какого-нибудь оповещения при наведении на текст. Да и черный список сайтов не повредит (ведь есть же ресурсы, где используется «свой» жаргон, который лучше не исправлять).

          P. s: но идея всё-таки впечатлила, спасибо за реализацию, будем пробовать


          1. NickKolok Автор
            07.05.2015 00:46

            Если под «своим жаргоном» подразумевается олбанске, то его сильно задеть не должно. Всё-таки регулярки — это не Дамерау-Левенштейн, ашыпке в славаг ищутся распространённые и предсказуемые. ШТО на ЧТО, конечно, заменит, а вот Бабруйзг не тронет.
            Впрочем, чёрный список делается элементарно, пара строк в манифесте, предлагайте варианты или сразу патч.

            По поводу подсветки и оповещения — в перспективе планируется оповещение а-ля адблок. Когда юзерскрипт станет полноценным расширением, когда у него появится иконка…


            1. Beltoev
              08.05.2015 00:50
              +1

              Кстати, хром блокирует расширение, не давая никакой возможности его включить.
              Ссылается на страницу: support.google.com/chrome/answer/2811969?p=ui_remove_non_cws_extensions&rd=1&hl=ru


              1. NickKolok Автор
                08.05.2015 02:49

                Спасибо. Действительно, Хром под виндой теперь требует обязательной регистрации расширений в каталоге. Грустно, очень грустно. У меня аккаунта в каталоге нет, разместить там не могу. В качестве идеолога призывается Meklon, будем решать, прогинаться ли под это решение.


                1. Ezhyg
                  08.05.2015 08:54

                  «прогинаться» :D Вот вам и ещё словечко в базу


                  1. NickKolok Автор
                    09.05.2015 14:14

                    Пишу и говорю так исключительно ради благозвучия, иначе некоторые представители «золотой молодёжи» имеют тенденцию воспринимать это слово неадекватно.
                    Извините за прямоту.


                1. Meklon
                  08.05.2015 08:57

                  Стоит зарегистрироваться. Я сам на Firefox именно из-за этого, но тенденция на усиление контроля за расширениями будет сохраняться. Ты срезы аудитории по браузерам оцени и дальше решай.


                  1. NickKolok Автор
                    09.05.2015 14:14

                    Спасибо.
                    С Firefox, кстати, скоро будет нечто подобное, но, надеюсь, бесплатное.


              1. NickKolok Автор
                08.05.2015 03:03

                А также кто-нибудь, кто знает, давно ли это так. Раньше вроде обходилось через режим разработчика.


                1. NickKolok Автор
                  15.05.2015 22:44

                  Тем временем ymatuhin выложил в каталоге и добавил нормальную иконку и прочую красоту, за что ему большое спасибо.


                  1. Beltoev
                    15.05.2015 23:41

                    Прямо-таки обрадовали, спасибо =)


  1. Hanazono
    07.05.2015 00:30
    +3

    По вашей просьбе. Вот мои выводы на сегодняшний день.
    1. Построенные на аксиомах «старой парадигмы» (именно о таком походе вы говорите в данном сообщении) программы не способны выявить даже все орфографические ошибки. Это связано с тем, что для исправления определенного класса ошибок требуется более сложные алгоритмы, нежели используются в традиционных программах проверки орфографии. Классический пример — «ться» и «тся» в возвратных глаголах; так, здесь можно использовать наработки Ю. Шрейдера, но подобные алгоритмы медлительны и не подходят для «онлайн» проверки орфографии (см. ниже п.2).
    2. Чтобы повысить точность лингвистических программ требуется решить несколько «неклассических» задач. Например, до сих пор нет простого и быстрого способа автоматически выявить терминальные знаки («проблема точки»), нет алгоритма работы с дефисами и т. д. Таким образом, даже в простейшем случае, любая «классическая программа» будет неизбежно «тонуть» в «проблеме точки» и т. п.
    PS Алгоритм Шрейдера, позволяющий в 75 % выявлять возможные ошибки использования возвратных глаголов (ться-тся), предполагает работу с «ближайшем окружением». Поэтому так важно сначала определить «терминальные» знаки.
    3. Наиболее «точные» на сегодняшний день программы будут использовать т. н. «паттерны» и специальные, описывающие, внутренние языки (скажем, в том числе нечто похожее на регулярные выражения, но ближе к классическим языкам программирования). То есть речь идет о «препроцессорной» обработке текста, когда специальный «встроенный» язык, содержащий инструкции («правила») используется для выполнения действий над текстом. «Транслятор» для такого языка, как вы понимаете, невозможно написать на скриптах или языках интерпретаторах, здесь необходимо использовать по крайней мере компилируемые языки.
    4. Почти все современные «классические» программы не работают с синтаксическими ошибками в должном объеме. Подразумевается, что «пользователь» правильно ставит запятые или иные знаки препинания. Также в программах, как правило, не исправляются стилистические или другого рода ошибки. Даже простейшие — типа зияний. Очень редко в программах используют сложные алгоритмы (например, алгоритм исправления ошибок на основе предварительной работы с массивом текстов, кстати, Гугль идет по этому пути). Иными словами — мы медленно и верно подходим к методам статистическим и корпусным.
    5. Наконец, некое обобщение. Чтобы «вырваться» за пределы, поставленные многочисленными программами «старой школы» (aspell, myspell и подобные), необходимо иметь сложную и медлительную программу, способную работать с паттернами, также «выявлять» предложения и «встроенные» фразы.
    То есть мы говорим о том, что сначала программа должна «понять», где заканчивается предложение, а уж потом провести какую-то «правку» орфографических и синтаксических, стилистических ошибок. Впрочем, во многих случаях достаточно работать просто с массивом слов. Если мы будем работать в рамках парадигмы «старой школы», мы продолжим медленное застревание на прежнем уровне, когда всего лишь «обнаруживаются» неправильные написания слов. Конечно, даже в такой форме это хорошее и полезное начинание. Однако «Хром» уже проверяет некоторого рода ошибки (кажется, используется что-то типа aspell) в окошке чата. Так зачем встраивать еще какие-то программы, ведь «качественного» скачка не будет.

    Дополнительно, замечания по тексту. Вы пишите.
    «Автоматически же искать разницу между ДЕРЖАТСЯ и ДЕРЖАТЬСЯ не рекомендую»
    Алгоритм Шрейдера весьма серьезно и быстро в 75 % исправляет такие ошибки (см. выше).
    «Так и родилась идея chas-correct — расширения для браузера, автоматически исправляющего многие ошибки»
    «… может быть легко формализовано и исправлено автоматически.»
    К сожалению, подобного рода ошибки не так уж и часты.
    Боюсь, в итоге вы получите еще одну программу, которая будет предлагать варианты трансформации слова «кыт» в «кот», «кВт», «крот» и т. д. ))
    «Полноценный анализ текста в реальном времени в браузере всё равно едва ли возможен»
    Возможен. Если будет использоваться «серверное» решение, как с распознаванием речи. Кроме всего прочего, если вы уж говорите об автоматической правке ошибочного слова, то никак не обойтись без работы с достаточно внушительными массивами, хотя бы для того, чтобы «исправлять» с высокой точностью)


    1. NickKolok Автор
      08.05.2015 02:46

      Большое спасибо за подробный ответ! Консультация профессионального лингвиста мне, конечно, ценна и иногда лаже необходима. Постараюсь ответить столь же аргументированно.
      0. Прошу всё же выслать куда-нибудь три с половиной килоглагола.
      1. Записываю алгоритм Шрейдера «напогуглить». Если у Вас есть хорошая ссылка — буду рад.
      2. Сейчас неким подобием «терминального знака» выступает любой html-тэг. То есть посередине предложение что-то выделено жирным, то расширение разобьёт его на три части. Любая попытка отступить от перебора нод нативным nodeTreeWalker() — замедление раза в полтора. До возможности распараллеливать JS на потоки — скорее всего, так и останется. Но вообще спасибо, я как-то совсем над этим не задумывался.
      3. Примерно понимаю. Был вариант — устанавливать на клиенте прокси-сервер. И сообщения в безопасности, и язык компилируемый. Возможно, вернёмся к нему со временем.
      4. Гугль тут догнать едва ли возможно, не в одиночку — точно. Передавать проверяемый текст на сервер — крайне нежелательно, поскольку не хотелось бы делать личные сообщения доступными третьей стороне. А вот хабрастатьи и форумы — это можно.
      5. Как ни странно, Ваше упоминание встроенных фраз натолкнуло меня совсем на другие идеи. Если реализую и получится — напишу.
      6. По поводу того, насколько часты такие ошибки… Когда у меня на руках будет свежая, вкусная, пушистая статистика, я снова возьму на себя смелость Вас беспокоить.


      1. Hanazono
        08.05.2015 16:11
        +1

        Вряд ли найдете много информации ru.wikipedia.org/wiki/%D0%A8%D1%80%D0%B5%D0%B9%D0%B4%D0%B5%D1%80,_%D0%AE%D0%BB%D0%B8%D0%B9_%D0%90%D0%BD%D0%B0%D1%82%D0%BE%D0%BB%D1%8C%D0%B5%D0%B2%D0%B8%D1%87
        Там известная проблема — ВИНИТИ до сих пор не очень ценит наработки времен СССР. А скорее их перепродают во всякие мало- и много- мудрые современные фирмы.
        Если любопытно, то здесь подробнее пишу www.facebook.com/permalink.php?story_fbid=606818949418449&id=100002710491649
        PS Статистика есть у меня, вывод следующий — на сегодняшний день ваше решение нельзя считать перспективным и даже «работающим», зато у вас будет отличный опыт знакомства с комп. лингвистикой, так что «наших больше, наши в городе!»)
        Рекомендую также зарегиться здесь forum.dialog-21.ru/actualforum.aspx


  1. MaxxxZ
    07.05.2015 14:46

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


  1. neko_nya
    10.05.2015 11:16
    +1

    Вот замечательно же! Два года жду такой плагин. А скажите, «Вы» с большой буквы он исправляет?


    1. NickKolok Автор
      10.05.2015 20:33

      К сожалению, нет: программа не может (и вряд ли скоро сможет) распознать, идёт ли обращение во множественном числе или в единственном.


      1. neko_nya
        10.05.2015 20:58
        +1

        А разницы никакой нету на самом деле: если не личная переписка, должно быть с маленькой. Всегда.


        1. NickKolok Автор
          10.05.2015 22:29

          Везде, кроме начала предложения, заменить «Вы» на «вы» можно.
          Копать в chrome/prepareDictionary.js, переменная actionArray, дописать в районе строки 58 строчку вроде

          [/([а-яёА-ЯЁ,:;—-%0-9])(\s)Вы/g,"$1$2вы",/\sВы/],
          

          и пересобрать (./build.sh), требуется Linux.
          Если не получится, пишите в личку, помогу.


  1. bogolt
    10.05.2015 23:14
    +1

    Знаете, если эта штука позволить больше никогда не видеть: андройды, выйгрыши и тд, то я уже буду очень рад.


  1. betrachtung
    10.05.2015 23:30
    +1

    Вы спасаете мир. Спасибо вам.
    А вот и баг: в комментарии выше «андройды» так и не стали андроидами.
    Зато комментарии про «в общем» после исправления могут поставить в тупик неподготовленного человека.
    И да, присоединюсь к пожеланию опционального исправления «Вы» на «вы». Когда будут настройки и прочие плюшки.


    1. NickKolok Автор
      11.05.2015 00:06

      Андроид — случай пока спорный, поэтому в словарь не внесён.
      Однако, учитывая количество желающих развидеть «андройд», скорее всего, скоро внесён всё-таки будет. Если не терпится — файл chrome/dictionary.js, дополните массив orphoPrefixToCorrect и пересоберите: ./build.sh
      Когнитивный диссонанс от обсуждения «невидимой» ошибки — вполне ожидаемая побочка, как исправить — нужно думать, вариант — юникодное выделение.