Или всё-таки под Елочку?

Нет, под Ёлочку! Теперь точно с Ё, потому что это статья про ёфикацию!

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

image
ссылка на сайт — пользуйтесь!

Как работает программа?

Она загружает файл с ёфицированными словами, потом деёфицирует их все.
(база взята вот отсюда) — http://python.anabar.ru/yo.htm
потом ищет каждое из этих слов в исходном тексте и если они там есть, запоминает где это слово.

Это происходит довольно быстро.

Дальше то что происходит медленно…

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

Всё это происходит через Parallel.For в столько потоков сколько у вас есть.

Дальше программа предлагает сохранить файл куда вы хотите (на компе), или в папку Documents/Yo на телефоне. Оттуда его можно переместить куда угодно и открывать в любой читалке.

Поддерживаемые форматы:
txt, fb2, fb2.zip

Сохраняет в таком же формате, в каком и открывает. Если надо запаковать в zip то запаковывает. fb2 разбирает на элементы и не пытается просматривать binary для ускорения работы

Самое интересное то, что программа работает одинаково на всех платформах, алгоритм полностью портируемый! За это слава Microsoft, петя Core 3.1 и вася .net standard 2.1
Теперь у меня будет единая кодовая база и для мобильников, и для сервера и для десктопа. Чему я несказанно рад! Надо ещё научиться шарить картинки и ресурсы между проектами, чтобы не копировать вручную логотип и словарь.

Почему я так рад? Потому что теперь не буду читать искалеченные книги, которые скачиваю из интернета. Никаких больше ежиков, ее, еще и е-мое. Только Ё, только хардкор!

Торопился сделать всем подарок на новый год, поэтому пока есть некоторые ограничения:

  • пока нет поддержки epub
  • иногда не показывает куда сохранила (на телефоне)
  • пока работает только с кодировкой UTF-8
  • если txt то не показывает progress bar, но работает
  • пока ёфицирует только однозначно определяемые слова (все от всё не отличает, но я буду работать над этим)

Планы:

кроме улучшения интерфейсов и декоративных вещей, планирую сделать
поддержку docx, epub
progressbar для текста
сервис по ёфикации на сайте
API для подключения сторонних сервисов
выложить в открытый доступ исходники
редактор ё-словаря (сейчас там не все ругательства, их надо обязательно добавить!)
редактор исходных и ёфицированных текстов
автоматическое обучение сложным случаям
анализ контекста
вылаживание apk в PlayMarket
консольный режим, поддержка Drag & Drop — спасибо за идею KorDen32

А теперь — Ёфицируй это!

Всех с новый годом!

P.S.… И в лесу родилась, наконец-то, Ёлочка!

(upd 31.12.2019 13:36 — всё настроил, apk качается)

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


  1. kababok
    31.12.2019 01:01

    А вот "Рёнтген" там, наверное, нет… ;)


    1. 3263927 Автор
      31.12.2019 01:03

      действительно нет, проверил. даже если добавлю то сейчас не будет его ёфицировать, потому что неоднозначно — есть же ещё рентген без ё…


      1. kababok
        31.12.2019 02:05

        Мне кажется, что сам термин "рентген" именно здесь пал жертвой "обез-ёчивания" :))


        Ибо город, где сделано открытие, без проблем передаётся на русском "как есть": Wurzburg = Вюрцбург — именно с учётом умлаута.


        Но при этом Rontgen устоялось не как "Рёнтген", а как сейчас имеем. :)


        Немцы говорят и имя, и фамилию именно с "ё".


        1. 3263927 Автор
          31.12.2019 02:08

          да, много разных слов так странно видоизменяются! я поэтому предпочитаю лучше на английском термины писать и фамилии на всякий случай…
          технически можно добавить, но эта программа для индивидуального же пользования — если вам удобнее читать рёнтген и вы хотите чтобы она автоматически это делала добавьте в словарь это слово, по идее должно сработать.


        1. Igor_O
          31.12.2019 17:04

          Немцы говорят и имя, и фамилию именно с «ё».

          Как так получается, что Рёнтген выговаривают, а ёлочка… ну и остальные русские слова с ё… — ни у одного пока не получилось? Может быть они все же говорят не ё, а что-то другое?..
          Это был сарказм. И да, немцы говорят другое. Никакого отношения к русскому «ё» не имеющее.
          Просто послушаейте произношение на викшионари. И во всех остальных источниках. Оно «роэнтген». Никакого ё там близко нет. «О» там может быть достаточно коротким. Но оно «о». Для звука «ё» важно, что предыдушая согласная — мягкая. У немцев этого нет. У них согласная твердая, потом «о», потом, иногда «э», иногда что-то похожее на «е». В некоторых ситуациях что-то похожее на безэмоциональное американское «oh-yeah!» Но… Никаких «ё»!


          1. chapuza
            31.12.2019 17:07
            +1

            Для звука «ё» важно, что предыдушая согласная — мягкая.

            Как в слове «ёлочка»?


            1. Cerberuser
              31.12.2019 17:44

              А кто скажет, что "й" — твёрдая?


              1. 3263927 Автор
                31.12.2019 17:53

                тот первый бросит в меня камень


              1. chapuza
                31.12.2019 18:20
                +1

                А кто скажет, что «й» в слове «ёлочка» — предыдущая согласная?


                1. Igor_O
                  01.01.2020 00:57

                  От же ж зануды собрались. Ну да, нет в слове «ёлочка» согласной. Написанной. Но, когда буква «ё» первая в слове, часто предполагается наличие «й» перед ней. И да, «й» — очень часто, и в этом случае тоже, может быть согласной. В качестве домашнего задания, найдите немецкое слово, где буква «oe» — первая в слове или без согласной перед ней. Или где что-то похожее на «й» — первая буква в слове…


  1. Rsa97
    31.12.2019 01:08

    «Там и передохнёте». Или «передо?хнете»?
    Как быть со словами, у которых есть обе формы?


    1. 3263927 Автор
      31.12.2019 01:12

      со временем сделаю контекстный анализ, а пока "там" никто не выживет...


      1. justhabrauser
        31.12.2019 03:33

        со временем сделаю контекстный анализ

        Х-х-хех… Да Вы, батенька, оптимист.
        Хотя, в принципе… "Со временем" — оно же растяжимое, правда?
        В том веке никому времени не хватило, так у нас же вечность спереди!


        1. 3263927 Автор
          31.12.2019 13:36

          ну как вам сказать… это же pet project, я его делаю в том числе и для себя… сам люблю читать с ё, но теперь если вы напишите что вам это тоже надо для меня это будет ответственность — и я буду этому проекту уделять больше времени


  1. Nickrus
    31.12.2019 02:03

    Классно! А давайте ещё плагин для браузера, который во всех текстах будет на лету оформлять причастные и деепричастные обороты запятыми, принудительно.


    1. 3263927 Автор
      31.12.2019 02:04

      это не ко мне, я сам пишу как хочу а не по правилам, так что… сам писать не буду.
      но если вы займётесь то с разработкой помогу!


      1. Igor_O
        31.12.2019 18:05
        +1

        Причастные и деепричастные обороты запятыми — ну будут запятые… И что?
        Вот «тся» и «ться», как в «он заботится» против «надо заботиться» — это да. Но когда «он заботиться» или «надо заботится»… Это выбешивает… И, кажется, не так сложно парсить…


    1. a-tk
      31.12.2019 09:42

      И, выпиливает лишние, запятые там где их не должно, быть и ставит там, где они должны всё-таки быть.


      1. chapuza
        31.12.2019 10:13

        И умные грамотные комментарии за меня пишет, пока я сплю :)


        1. tvr
          31.12.2019 11:16
          +1

          Комментатор спит, а статы качаются :))


          1. chapuza
            31.12.2019 11:23

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


            1. artemev
              31.12.2019 11:38

              Это пять баллов, очень круто!


              1. chapuza
                31.12.2019 11:42

                Ой, да ладно. Это в миллиард раз проще, чем четыре строчки хорошего кода написать.


    1. Methos
      31.12.2019 13:08

      ну, моё расширение уже работает, которое заменяет imho на моё мнение.


      искать по слову imhoreplacer


      1. tvr
        31.12.2019 13:56

        1: Пока Славик ходил курить, обучили его Аутлук старословянскому ))
        2: Эт как? )
        1: Врубили ему автозамену список=свиток, чтобы=дабы, ну и там воистину, ибо и т.д. Главное, чтобы в глаза не бросалось )
        1: Так он очень удивился, когда на письмо с фразой "… посему высылаю всем свиток свободных айпишников, не забывайте!" ему стали приходить ответы типа «Челом бьем, боярин! Не прибежал еще со свитком гонец» ))

        bash.im


    1. 3263927 Автор
      31.12.2019 13:37

      а разве MSWord не советует запятые? сейчас пользуюсь google docs


      1. chapuza
        31.12.2019 13:43

        https://grammarly.com/ — просто оставлю тут эту ссылку.


    1. 3263927 Автор
      31.12.2019 13:38

      кстати, вот скрипт который заглавные буквы расставляет. для себя написал, может кому-то пригодится. сам никогда не люблю ставить заглавные буквы поэтому легче скрипт написать))

      var ui = DocumentApp.getUi(); // Or FormApp.getUi().
      
      function onOpen() 
      {
        ui.createMenu('Scripts')
            .addItem('Capitalize', 'onCapitalize')
            .addToUi();
      }
      
      function onCapitalize()
      {
        var selection = DocumentApp.getActiveDocument().getSelection();
        if(selection)
        {
          var elements = selection.getSelectedElements();
           for (var i = 0; i < elements.length; i++)
           {
             var element = elements[i];
             var text = element.getElement().editAsText();
             text.setText(fcap(text.getText()));
           }
        }
      }
      
      function fcap(str)
      {
        var pieces = str.split(". ");
          for ( var i = 0; i < pieces.length; i++ )
          {
              var j = pieces[i].charAt(0).toUpperCase();
              pieces[i] = j + pieces[i].substr(1);
          }
          return pieces.join(". ");
      }


  1. A-Stahl
    31.12.2019 06:49

    Э, не-е… С помощью таких вот маленьких кусочков (ё, базовая пунктуация, ться) можно чуть лучше понять кто автор. Так что пусть они остаются.


    1. chapuza
      31.12.2019 10:15

      [...] лучше понять кто автор.

      Вы точно этого хотите? :)


    1. 3263927 Автор
      31.12.2019 13:57

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


  1. Zifix
    31.12.2019 07:46


  1. zverolyub
    31.12.2019 11:39

    Спасибо! Мне иногда приходится вычитывать тексты по 30 000 знаков, чтобы вставить все буквы ё. И это отдельный вид пытки. Но теперь жизнь заиграет новыми красками)


    1. chapuza
      31.12.2019 11:43

      .del


      1. zverolyub
        31.12.2019 11:45
        +1

        Я только по буквам ё! :)


    1. 3263927 Автор
      31.12.2019 14:04

      для вас сделаю специально плагин для ваших систем и API


  1. Bonio
    31.12.2019 16:27

    Почему букву ё перестали использовать? Я, внезапно, осознал, что тоже вообще не использую ее её в письме.


    1. 3263927 Автор
      31.12.2019 16:58
      +2

      не знаю, может кому-то показалось это экономией, но читать реально мешает. я всегда использую, даже в телефоне все слова удаляю без ё а с ё вставляю. кому-то наверно не мешает, или просто забили


      1. chapuza
        31.12.2019 17:13
        +2

        В дореформенной орфографии «ё» не было вообще. После реформы и до 1956 года она заменила дореформенный дифтонг «io», а в 1956 лично Никита Сергеич предложил перестать заморачиваться, и, хотя официально «ё» никто не отменял, в советских печатных изданиях после 1960 года «ё» почти не встречалась.


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


        Каждому своё, в общем :)


        1. 3263927 Автор
          31.12.2019 17:34

          спасибо не знал эту историю. наверное кому как, я с твёрдыми знаками на конце старые тексты только с юмором могу воспринимать) недавно наткнулся на оригинальные издания 19 века где печатали Толстого Анну Каренину по главам, читал около часа, всё равно смешно было почему-то


        1. sergey-b
          01.01.2020 09:10

          Вообще история интересная. Меня больше всего поразил эпизод с приказом народного комиссариата просвещения РСФСР об обязательном использовании буквы ё в обучении. Этот приказ был спущен в 1942 году, 24 декабря, т. е. в разгар Сталинградской битвы. Даже в наши дни в середине учебного года школьную программу никто не меняет, а эти тыловые крысы занимались такой ерундой в самый тяжелый для страны период.


          1. chapuza
            01.01.2020 11:58
            +2

            Это был блистательный психологический трюк, а не «эти тыловые крысы занимались такой ерундой».


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


            1. sergey-b
              01.01.2020 13:41

              Интересная мысль. Типа, несмотря ни на что, правительство работает и успевает даже за орфографией следить.


          1. 3263927 Автор
            01.01.2020 14:03

            мне кажется это связано как раз с вопросами безопасности. на всякий случай, вдруг будет например 2 села с разными вариантами, и армия может просто ошибиться. опять же возможности манипуляции через неправильное написание/произношение, если есть разные значения слов значит должно быть разное написание. особенно это связано с транслитерацией немецких названий мне так кажется. как-никак язык противника, и Кёльн может стать Кельном, а при разговоре по телефону с человеком который не знает географии это название может превратиться в Кель, а это немного в другую сторону. так что это как раз очень умное стратегическое решение. как и то что сейчас в Госдуме вроде запретили документы без ё, чтобы не было неоднозначности


            1. sergey-b
              01.01.2020 14:33

              Мне больше нравится гипотеза про психологический трюк.


              1. 3263927 Автор
                01.01.2020 14:37

                для психологического трюка слишком маленький эффект, заметят только чиновники, и потом, сомневаюсь что у кого-то была возможность протестовать — при Сталине, тем более во время войны, людям достаточно было просто приказать и делать вид для руководства смысла не было


                1. chapuza
                  01.01.2020 16:59

                  Заметят все дети и все, у кого есть дети.


                  была возможность протестовать

                  Протесты-то тут вообще при чем? Говорю же: поддержание морального духа.


                  1. 3263927 Автор
                    01.01.2020 17:50

                    это теперь сложно будет узнать, разве что какие-то секретные документы всплывут...


            1. sergey-b
              01.01.2020 14:35

              В авиации и в армии используют свой язык, в котором коллизии исключены. Там еще учитываются возможные искажения при передаче информации голосом, а не только при написании.


            1. chapuza
              01.01.2020 16:57

              Еще шибболетами шпиёнов выявлять :)


    1. Cerberuser
      31.12.2019 17:47
      +6

      "Бойтесь человека, который пишет тексты с буквой "ё". Если он достаёт до неё в углу клавиатуры, то он и вас достанет" (с)


      1. 3263927 Автор
        31.12.2019 17:54

        это точно! по себе знаю


    1. KvanTTT
      31.12.2019 22:54

      Одна из причин — букву ё очень неудобно набирать на обычной русской раскладке слепым мультипальцевым методом, это снижает скорость.


      1. 3263927 Автор
        01.01.2020 14:04

        меня больше бесят заглавные буквы (я не минусовал)


  1. Ge1i0N
    31.12.2019 17:05

    Невнимательно читал статью, вопрос удалён.


    1. 3263927 Автор
      31.12.2019 17:13

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


      1. Mingun
        31.12.2019 23:06

        Ну, лично я уже давно пользуюсь плагином макросом Yoficator (он же Ёфикатор) для Far'а. Правда, есть неудобства – например, он не умеет заменять словосочетания (к примеру, различить просто «чем» и «чём» нельзя без контекста, но вот с предлогом уже всё становится однозначно: «с чем», «о чём»), приходится такие моменты автозаменой подкручивать или вручную натыкивать.


        1. 3263927 Автор
          01.01.2020 00:41

          а fb2 и архивы тоже ёфицирует? и на мобильных телефонах работает?


          1. Mingun
            01.01.2020 01:31

            Макрос работает в стандартном текстовом редакторе Far'а. Соответственно, всё, что можно там открыть, он и ёфицирует. Я, например, не читаю книги на телефоне, а на компе через расширение FB2-Reader Opera 12, а оно с fb2.zip-архивами не работает (да и в любом случае, не вижу смысла запаковывать fb2-файлы в архивы, проблемы нехватки места у меня не стоит). И да, это было пояснение к «никому это не нужно» и «проблема только для меня одного»: просто, возможно, некоторые уже нашли приемлемый для себя вариант. Что, конечно же, не означает, что ваша разработка никому не нужна :) Как я уже и сказал, этот макрос тоже не идеален.


            1. 3263927 Автор
              01.01.2020 02:43

              а, понятно. я просто с телефона читаю всегда, и скачиваю обычно где-нибудь в метро или в дороге, поэтому хотелось бы сразу с телефона и ёфицировать. и когда скачиваешь то обычно не fb2 а fb2.zip. плюс там 10% текста а остальное может быть картинки которые очень долго парсить


  1. KorDen32
    31.12.2019 18:36
    +2

    Плохо, что нет исходников.
    Пригодилось бы для любого txt-подобного формата (например, субтитры — srt, ass, ssa и другие)


    Желателен консольный режим (можно с выключаемым GUI выполнения). Навскидку:


    • yoficator.exe -i input.txt -o output.txt — выводит прогресс и выходит. Переключать консоль/gui можно каким-нибудь -c (/c) включать
    • yoficator.exe %* (перетаскивание на экзешник, "отправить" и т.п.)
    • INPUT | yoficator.exe | OUTPUT
      Ну и т.п.

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


    1. 3263927 Автор
      31.12.2019 19:09

      спасибо за идею! щас допишу в roadmap <3


  1. Keynessian
    31.12.2019 21:16

    А программа различает по окружающим словам «всЁ» от «всЕ»?
    Тот же вопрос про «житиЕ моЕ» vs «житьЁ моЁ».

    PS С Наступающим! :)


    1. 3263927 Автор
      31.12.2019 21:41

      хорошая идея, я об этом думал и в следующих модификациях это как-нибудь обязательно сделаю. пока нет, но идея хорошая. думаю что по контексту можно как-то определить
      вас тоже с новым годом! и вобще всех <3


  1. Tomasina
    31.12.2019 22:45

    Еще бы тире и дефисы научить отличать — был бы конкурент Типографу.


  1. yakov-bakhmatov
    31.12.2019 23:52

    Читал я однажды книжку, в которой (видимо, после массовой замены еще -> ещё) встречалось чудесное слово "пещёра".


    1. 3263927 Автор
      01.01.2020 00:41

      не, это не тупая замена. там именно отдельные слова ищет


  1. tendium
    01.01.2020 13:25

    Как на счет пар нёбо/небо, падеж/падёж, осел/осёл, совершенный/совершённый, окунем/окунём? Также будет ли скрипт буквоедом и ставить ё там, где его уже никто и не произносит, но где словари его до сих пор рекомендуют? А как на счет фамилий, где ё вообще не является регулярным (вне зависимости от правил в отношении нарицательных имён). А заимствованные фамилии: Ге/ёбельс, Депардье/ё, Че/ёрчилль, Лёнин...


    Не уверен, что всё это можно как-то полноценно автоматизировать.


    1. 3263927 Автор
      01.01.2020 14:07

      сейчас программа работает только по однозначным словам, но это всёравно 90% слов в книгах которые я читаю (художественная/научная литература)
      в дальнейшем я планирую сделать контекстный анализ и возможно список сложных случаев, основанный на принципах как в Гугл капча — если несколько человек отметят какое-то словосочетание как необходимое для ёфикации то это попадёт во все словари всех пользователей


    1. chapuza
      01.01.2020 17:00

      ставить ё там, где его уже никто и не произносит, но где словари его до сих пор рекомендуют?

      Как Маяковский и Блок в слове «чорт»?


      :)


      1. 3263927 Автор
        01.01.2020 17:52

        там разве что на чoрт заменить