Pull to refresh

Comments 71

А что делать, если орфография была намеренно искажена?
Как правило, расширение в таком случае не сможет полностью откорректировать текст. Уцелеет, скорее всего, искажение окончаний падежей и сафсемм ачывидьные ашыппке, так что литературный эффект остается.
А вот отдельные крики «Развидеть!», действительно, могут стать непонятны.
Надо подсветку измененного текста отдельным цветом и показ оригинала при наведении мыши.
Такой вариант рассматривался, но был отклонён по нескольким причинам.
Во-первых, сейчас DOM не меняется, идёт изменение лишь «листьев», то есть textNodes. Любое выделение цветом или шрифтов — это дополнительные тэги, можно случайно искорёжить вёрстку. Отчаянный вариант — юникодное выделение текста, например, символами подчёркивания.
Можно поставить обработчик mousemove на body, объединить с getBoundingClientRect, и без всякого вмешательства в DOM ловить наведение мышкой (и добавлять, скажем, всплывающую подсказку, которая будет где-нибудь в конце body, станет ломать вёрстку с очень маленьким шансом, и, если и будет, то временно).
Правда, извращение, зато работает.
И лишние тормоза, да.

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

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

Покажем, что список сайтов-исключений нужно делать именно индивидуальным. Рассмотрим сайт, публикующий статьи на двух языках — русском и украинском. Тогда человеку, знающему украинский, но не знающему русский, ставить расширение вовсе смысла нет, человеку, знающему русский, но не знающему украинский — есть смысл ставить расширение и использовать его на рассматриваемом сайте, поскольку ложных исправлений в украинском он всё равно не заметит, а вот человеку, знающему оба языка, придётся выключать расширение на этом сайте, поскольку даже в пределах одной страницы будут русские куски текста, которые можно исправить, и украинские, которые не нужно.
Таким образом, двум разным людям потребуются разные списки сайтов-исключений.
Простите, оффтопик: Мне очень нравится идея Orphus. Частенько пользуюсь и отсылаю ошибки, например, на lenta.ru, сидя за стационарным компьютером. Легко, удобно — выделил, ctrl-enter, enter, всё. Но что меня дичайше удивляет — отсутствие реализации Orphus в мобильных браузерах. В 2015 году! На официальном форуме висит тикет-вопрос аж с 2013 года. Никакой реакции.
А что вы хотели от сайта с дизайном 98 года?
А зачем им дизайн 2015-го года?
Это философский вопрос.
Вот Вы так говорите, а где-то плачет ребёнок топ-менеджера Intel, которому не хватает на очередную поезду в Диснейленд…
Не думаю, что протокол у них закрыт. Наверняка можно написать расширение для Firefox Mobile, который добавит такую возможность, и скрипт непосредственно для сайтов.
Главное, чтобы сами орфусовцы не возражали.
Если не ошибаюсь, автором Orphus является небезызвестный DmitryKoterov (dklab). Возможно, он может разъяснить эту ситуацию.
Не в тему… А чем плох «вообщем»? :) Меня так в школе учили, и в книгах так писали…
Ммм, спасибо, теперь все понятно!

P.S. Видимо, имелось ввиду, что большими буквами, а не то, что два «о». Но вы мне объяснили, я понял. Тыкать в стрелочку же проще, правда?
Слова «вообщем» не существует. Нет такого слова. Есть наречие «вообще» и фразеологизм «в общем».
Все-таки, до сих пор не понимаю, почему на Хабре нет «Орфуса» с отправкой замечаний автору статьи в реальном времени. Это снизило бы количество бесполезных комментариев об ошибках в разы…
Тогда чем займутся граммар-наци?
пусть себе рейтинг накручивают специальный, мол, «Вася, предложил 1067 правок»
Сейчас они могут слать мне патчи, в основном, в словарь chrome/dictionary.js
главное, чтобы в интерфейсе автора статьи сразу можно было кликнуть и быстро перейти на место в тексте, требующее исправления…
Ещё одна идея — скрестить Хабр с git. Этакий githabr.
Статьи кладём в репозиторий, пишем утилитку, которая по какому-нибудь githabr push заливает изменения на Хабр/Гиктаймс, дублируем в обычный репозиторий на гитхабе… Там, по идее, и комментарии к отдельным строчкам есть.
Потом главное — не забыть указать в статье ссылку на гитхабовский реп.
Офигенная идея! И не будет дурацкого удаления статей авторами, и будут форки у всех желающих… Сообщество модеров и бэкенд по сути существуют, нужно только морду написать.
Классная штука! А можно убрать вывод в консоль под какой-нибудь девелоперский флаг? Мешает работать (:
Оно как бы бэта.
Можно закомментировать correct.logToConsole, в качестве временной меры.
Не хватает сюда функционала Orphus. Т.е. не просто «повышать культуру» читателей, но и повышать качество исходного материала.
Понятно, что работает на стороне клиента и мы не имеем связи с автором.

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

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

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

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

Я за то, чтобы не уродовалось правильное написание слов русского языка.
О. Наконец опубликовал) поздравляю ещё раз с прибытием на хабр)
Спасибо. Статья была за это время серьёзно дополнена. Более того, если сообществу эта тема интересна — честно говоря, я боялся криков: «На Гиктаймс!», но, судя по всему, напрасно — будет ещё как минимум одна статья — про то, как это работает технически, какие алгоритмы применяются, какая там оптимизация и, что небезынтересно, какие методы оптимизации внезапно не сработали.
Словарь лучше сделать на основе форумов без модерации к популярным играм, где много школьников. Это steam-форумы, wikia-форумы и комментарии к статьям и т.д. На хабре грамотность всё же довольно высокая.
Спасибо. Ждал комментария, в котором предложат направление развития. Прошу ссылки на подобные форумы в студию.
Про грамотность на Хабре можно было бы поспорить, но пока я этого делать не буду. Это повод для отдельной статьи с аккуратной аналитикой. Вкратце — в среднем примерно 3-4 ошибки на хабрастатью расширение ловит, это без учёта капитализации.
Прошу прощения, уточняю: на статью с комментариями, т. е. на страницу. Что, впрочем, не сильно меняет дело, ибо, как известно, «комментарии к статье на Хабре зачастую ценнее самой статьи».
По-моему, с комментариями всё-таки в корне меняет дело: когда читаешь статью, безграмотность автора «режет» глаза. Если же переходишь к комментариям, то морально настраиваешься, что грамотность некоторых комментаторов оставляет желать лучшего. Поэтому предлагаю не судить Хабр по комментариям =)

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

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

По поводу подсветки и оповещения — в перспективе планируется оповещение а-ля адблок. Когда юзерскрипт станет полноценным расширением, когда у него появится иконка…
Кстати, хром блокирует расширение, не давая никакой возможности его включить.
Ссылается на страницу: support.google.com/chrome/answer/2811969?p=ui_remove_non_cws_extensions&rd=1&hl=ru
Спасибо. Действительно, Хром под виндой теперь требует обязательной регистрации расширений в каталоге. Грустно, очень грустно. У меня аккаунта в каталоге нет, разместить там не могу. В качестве идеолога призывается Meklon, будем решать, прогинаться ли под это решение.
«прогинаться» :D Вот вам и ещё словечко в базу
Пишу и говорю так исключительно ради благозвучия, иначе некоторые представители «золотой молодёжи» имеют тенденцию воспринимать это слово неадекватно.
Извините за прямоту.
Стоит зарегистрироваться. Я сам на Firefox именно из-за этого, но тенденция на усиление контроля за расширениями будет сохраняться. Ты срезы аудитории по браузерам оцени и дальше решай.
Спасибо.
С Firefox, кстати, скоро будет нечто подобное, но, надеюсь, бесплатное.
А также кто-нибудь, кто знает, давно ли это так. Раньше вроде обходилось через режим разработчика.
Прямо-таки обрадовали, спасибо =)
По вашей просьбе. Вот мои выводы на сегодняшний день.
1. Построенные на аксиомах «старой парадигмы» (именно о таком походе вы говорите в данном сообщении) программы не способны выявить даже все орфографические ошибки. Это связано с тем, что для исправления определенного класса ошибок требуется более сложные алгоритмы, нежели используются в традиционных программах проверки орфографии. Классический пример — «ться» и «тся» в возвратных глаголах; так, здесь можно использовать наработки Ю. Шрейдера, но подобные алгоритмы медлительны и не подходят для «онлайн» проверки орфографии (см. ниже п.2).
2. Чтобы повысить точность лингвистических программ требуется решить несколько «неклассических» задач. Например, до сих пор нет простого и быстрого способа автоматически выявить терминальные знаки («проблема точки»), нет алгоритма работы с дефисами и т. д. Таким образом, даже в простейшем случае, любая «классическая программа» будет неизбежно «тонуть» в «проблеме точки» и т. п.
PS Алгоритм Шрейдера, позволяющий в 75 % выявлять возможные ошибки использования возвратных глаголов (ться-тся), предполагает работу с «ближайшем окружением». Поэтому так важно сначала определить «терминальные» знаки.
3. Наиболее «точные» на сегодняшний день программы будут использовать т. н. «паттерны» и специальные, описывающие, внутренние языки (скажем, в том числе нечто похожее на регулярные выражения, но ближе к классическим языкам программирования). То есть речь идет о «препроцессорной» обработке текста, когда специальный «встроенный» язык, содержащий инструкции («правила») используется для выполнения действий над текстом. «Транслятор» для такого языка, как вы понимаете, невозможно написать на скриптах или языках интерпретаторах, здесь необходимо использовать по крайней мере компилируемые языки.
4. Почти все современные «классические» программы не работают с синтаксическими ошибками в должном объеме. Подразумевается, что «пользователь» правильно ставит запятые или иные знаки препинания. Также в программах, как правило, не исправляются стилистические или другого рода ошибки. Даже простейшие — типа зияний. Очень редко в программах используют сложные алгоритмы (например, алгоритм исправления ошибок на основе предварительной работы с массивом текстов, кстати, Гугль идет по этому пути). Иными словами — мы медленно и верно подходим к методам статистическим и корпусным.
5. Наконец, некое обобщение. Чтобы «вырваться» за пределы, поставленные многочисленными программами «старой школы» (aspell, myspell и подобные), необходимо иметь сложную и медлительную программу, способную работать с паттернами, также «выявлять» предложения и «встроенные» фразы.
То есть мы говорим о том, что сначала программа должна «понять», где заканчивается предложение, а уж потом провести какую-то «правку» орфографических и синтаксических, стилистических ошибок. Впрочем, во многих случаях достаточно работать просто с массивом слов. Если мы будем работать в рамках парадигмы «старой школы», мы продолжим медленное застревание на прежнем уровне, когда всего лишь «обнаруживаются» неправильные написания слов. Конечно, даже в такой форме это хорошее и полезное начинание. Однако «Хром» уже проверяет некоторого рода ошибки (кажется, используется что-то типа aspell) в окошке чата. Так зачем встраивать еще какие-то программы, ведь «качественного» скачка не будет.

Дополнительно, замечания по тексту. Вы пишите.
«Автоматически же искать разницу между ДЕРЖАТСЯ и ДЕРЖАТЬСЯ не рекомендую»
Алгоритм Шрейдера весьма серьезно и быстро в 75 % исправляет такие ошибки (см. выше).
«Так и родилась идея chas-correct — расширения для браузера, автоматически исправляющего многие ошибки»
«… может быть легко формализовано и исправлено автоматически.»
К сожалению, подобного рода ошибки не так уж и часты.
Боюсь, в итоге вы получите еще одну программу, которая будет предлагать варианты трансформации слова «кыт» в «кот», «кВт», «крот» и т. д. ))
«Полноценный анализ текста в реальном времени в браузере всё равно едва ли возможен»
Возможен. Если будет использоваться «серверное» решение, как с распознаванием речи. Кроме всего прочего, если вы уж говорите об автоматической правке ошибочного слова, то никак не обойтись без работы с достаточно внушительными массивами, хотя бы для того, чтобы «исправлять» с высокой точностью)
Большое спасибо за подробный ответ! Консультация профессионального лингвиста мне, конечно, ценна и иногда лаже необходима. Постараюсь ответить столь же аргументированно.
0. Прошу всё же выслать куда-нибудь три с половиной килоглагола.
1. Записываю алгоритм Шрейдера «напогуглить». Если у Вас есть хорошая ссылка — буду рад.
2. Сейчас неким подобием «терминального знака» выступает любой html-тэг. То есть посередине предложение что-то выделено жирным, то расширение разобьёт его на три части. Любая попытка отступить от перебора нод нативным nodeTreeWalker() — замедление раза в полтора. До возможности распараллеливать JS на потоки — скорее всего, так и останется. Но вообще спасибо, я как-то совсем над этим не задумывался.
3. Примерно понимаю. Был вариант — устанавливать на клиенте прокси-сервер. И сообщения в безопасности, и язык компилируемый. Возможно, вернёмся к нему со временем.
4. Гугль тут догнать едва ли возможно, не в одиночку — точно. Передавать проверяемый текст на сервер — крайне нежелательно, поскольку не хотелось бы делать личные сообщения доступными третьей стороне. А вот хабрастатьи и форумы — это можно.
5. Как ни странно, Ваше упоминание встроенных фраз натолкнуло меня совсем на другие идеи. Если реализую и получится — напишу.
6. По поводу того, насколько часты такие ошибки… Когда у меня на руках будет свежая, вкусная, пушистая статистика, я снова возьму на себя смелость Вас беспокоить.
Вряд ли найдете много информации 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
Очень хорошая идея, продолжайте в том же духе — вы сделаете мир лучше))
Пока нет времени поставить — разобраться, но вещь реально необходимая. Зрительная память творит ужасные вещи с моей грамматикой (((
Вот замечательно же! Два года жду такой плагин. А скажите, «Вы» с большой буквы он исправляет?
К сожалению, нет: программа не может (и вряд ли скоро сможет) распознать, идёт ли обращение во множественном числе или в единственном.
А разницы никакой нету на самом деле: если не личная переписка, должно быть с маленькой. Всегда.
Везде, кроме начала предложения, заменить «Вы» на «вы» можно.
Копать в chrome/prepareDictionary.js, переменная actionArray, дописать в районе строки 58 строчку вроде
[/([а-яёА-ЯЁ,:;—-%0-9])(\s)Вы/g,"$1$2вы",/\sВы/],

и пересобрать (./build.sh), требуется Linux.
Если не получится, пишите в личку, помогу.
Знаете, если эта штука позволить больше никогда не видеть: андройды, выйгрыши и тд, то я уже буду очень рад.
«выйгрыш» и «выйграть» вроде правит, а вот «видешь» было бы неплохо добавить.
Вроде ушло. Потом дома еще посмотрю, может еще с чем-нибудь помогу.
Например, было бы здорово сделать кнопку для панелек, чтобы можно было отключить плагин в один клик (а еще лучше — список исключений)
Вроде пришло и вроде правильно. Спасибо! Если добавите ещё выражений, ориентируясь на собственные нужды — пожалуйста, присылайте. Кнопку отключения и правда было бы здорово иметь, это браузер-специфичная задача. Сейчас в репозитории висит пулл-реквест, который делает расширение в Firefox по умолчанию неактивным, на каждой странице нужно нажимать заново (если я правильно понял). Также есть соответствующее issue. Примеры реализации стоит, по моему скромному разумению, смотреть в AdBlock и его аналогах.
Вы спасаете мир. Спасибо вам.
А вот и баг: в комментарии выше «андройды» так и не стали андроидами.
Зато комментарии про «в общем» после исправления могут поставить в тупик неподготовленного человека.
И да, присоединюсь к пожеланию опционального исправления «Вы» на «вы». Когда будут настройки и прочие плюшки.
Андроид — случай пока спорный, поэтому в словарь не внесён.
Однако, учитывая количество желающих развидеть «андройд», скорее всего, скоро внесён всё-таки будет. Если не терпится — файл chrome/dictionary.js, дополните массив orphoPrefixToCorrect и пересоберите: ./build.sh
Когнитивный диссонанс от обсуждения «невидимой» ошибки — вполне ожидаемая побочка, как исправить — нужно думать, вариант — юникодное выделение.
Sign up to leave a comment.

Articles