LINUX.ORG.RU
ФорумTalks

Написал скриптец

 граммар-нацизм на марше,


0

1

Тупо заменяет опечатки в текстовых файлах на русском языке (fb2 и прочие, где разметка латиницей, тоже можно). Скриптец - это ерунда, в общем-то, а списком автозамен могу поделиться, всего там около 3800 пар. В РФВС, например, находит больше семисот ошибок, которые можно исправить просто автозаменой без участия человека.

Бывает много ложных срабатываний на троеточиях, лечится комментированием строки замены.

У меня все это запущено через sed, поэтому работает медленно, флибусту перелопачивать смысла нет. РФВС обрабатывался около трех минут. Годится для уменьшения количества опечаток перед закидыванием в читалку.

ОСТОРОЖНО, в выложенном ниже файле есть ошибки.

★★★★★

Последнее исправление: abraziv_whiskey (всего исправлений: 1)

Не воспроизводит Spectre и не шифрует файлы? Ненужно!

bodqhrohro_promo
()

Ну а как он распознает правильные окончания -ться и -тся, например? Или раздельное и слитное написанное?

Grantrol
()
Ответ на: комментарий от abraziv_whiskey

Да ну. Тогда не нужно. Вот если бы ты нейросетку написал для правки орфографии и пунктупации, тогда местная школота тебе бы спасибо сказала.

Grantrol
()
Ответ на: комментарий от Grantrol

Вот если бы ты нейросетку написал для правки орфографии и пунктупации

Для Яндекса движок писали последователи Зализняка, как я понимаю. Думаешь, ТС бы дотянул до их уровня?

pacify ★★★★★
()
Ответ на: комментарий от pacify

Это ошибки, которые вообще не требуют нейросетки при обработке на электронных мозгах.

abraziv_whiskey ★★★★★
() автор топика

Можно костыль. Делать запрос на поиск в гугл. В ответ он пришлёт «Возможно вы имели ввиду ...».

tyamur ★★
()

на троеточиях

Представляю, что этот «скриптец» назаменяет.

dexpl ★★★★★
()
Ответ на: комментарий от pacify

Ростелеком правда не пускает хомячков на пасту

За suicide.txt? )

Sociopsih ★☆
()

Ты мне напомнил историю времён ДОС-а, когда спеллчекер со словарём казался фантастикой.

Так кто-то запилил проверку орфографии на двух-трёхбуквенных сочетаниях...

greenman ★★★★★
()
Последнее исправление: greenman (всего исправлений: 1)
Ответ на: комментарий от pacify

Да кто его знает, вдруг он подпольный хений? У нас тут что не топик, то дарование какое-нибудь находится, то принципиально новые системы охлаждения с помощью напильника делают, то умные дома напичканные микрофонами, отслеживающие даже пуки, разрабатывают.
А творение яндекса будет доступно простым смертным? Когда? Или уже?

Grantrol
()
Ответ на: комментарий от greenman

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

abraziv_whiskey ★★★★★
() автор топика
Ответ на: комментарий от greenman

А то ж. Словарь автозамены и есть простейшая реализация.

abraziv_whiskey ★★★★★
() автор топика
Ответ на: комментарий от Grantrol

Ну напиши. Там будет определение кодировки, конверт в утф8, исключение бинарных блоков из обработки и все такое.

abraziv_whiskey ★★★★★
() автор топика
Ответ на: комментарий от abraziv_whiskey
s/кючук\ кайнарджийск/кючук-кайнарджийск/gi
s/кючуккайнарджийск/кючук-кайнарджийск/gi

Издеваешься?

greenman ★★★★★
()
Ответ на: комментарий от abraziv_whiskey
s/кожевенно\ обувн/кожевенно-обувн/gi
s/кожевеннообувн/кожевенно-обувн/gi
s/кожно\ электрическ/кожно-электрическ/gi
s/кожноэлектрическ/кожно-электрическ/gi

--
Не хватает кожно-венерическ (или как там правильно)
--
В общем, лулзов хватает...

greenman ★★★★★
()
Ответ на: комментарий от greenman

Мультиканальный
Колебательный
Гаванькала

етц.

dogbert ★★★★★
()

В общем, надо это к лорчику прикрутить. Типа, вы при написании поста допустили не менее n ошибок. Но сами ошибки не показывать, так лучше будет.

abraziv_whiskey ★★★★★
() автор топика

Я сделал (перевёл в питоновский синтаксис регекспов):

cat abrwalg.sh | sed 's/^s\///' | \
sed -r 's/\/.*//' | sed 's/\\ / /g' | \
sed 's/>/\\b/' | sed 's/^\^/\\b/' > abrwalg.txt
И засунул на вход python-детектору:
#!/usr/bin/python                                                               
# -*- coding: utf-8 -*-                                                         
                                                                                
import re                                                                       
                                                                                
regexps = []                                                                    
filename = "abrwalg.txt" # словарь Вискаса                                                        
try:                                                                            
  f = open(filename,"rt")                                                       
  for line in f.readlines():                                                    
    line = line.strip()                                                         
    if not line: break                                                          
    r = re.compile(line)                                                        
    regexps.append(r)                                                           
  f.close()                                                                     
except Exception,e:                                                             
  print repr(e)                                                                 
                                                                                
import sys                                                                      
                                                                                
if len(sys.argv) < 2:                                                           
  print "А что вам, собственно, анализировать?"                                 
  sys.exit()                                                                    
nazi = sys.argv[1]                                                              
try:                                                                            
  f = open(nazi,"rt")                                                           
  n = 1                                                                         
  for line in f.readlines():                                                    
    line = line.strip()                                                         
    for r in regexps:                                                           
      alarm = r.findall(line)                                                   
      if len(alarm) > 0:                                                        
        for word in alarm:                                                      
          print str(n), word # печатаем n:ошибочную подстроку                                                   
    n += 1                                                                      
  f.close()                                                                     
except Exception,e:                                                             
  print repr(e)                                  
Тяжёлый код, и не PEP-8. Но я привык так писать (WET principle).

pacify ★★★★★
()
Ответ на: комментарий от pacify
# Входной файл будет аргументом $1. Если его нет, то стоп, код завершения 255
echo "Обрабатывается файл " $1
if [ ! -f $1 ]; then echo "Файл не существует"; exit 255; fi

corrected=$1"_corr"
sed -f subst_list $1 > $corrected
echo $corrected " сохранен, ошибок найдено:"
diff $1 $corrected | grep '\-\-\-' | wc -w
exit 0
abraziv_whiskey ★★★★★
() автор топика
Ответ на: комментарий от abraziv_whiskey

Если касаться практического применения, можешь внедрить куда-нибудь в PR-отделы (отделы министерств, которые занимаются выкладыванием новостей). Вполне можно внедрить решение (не обязательно твоё), как импортозамещение.

Можно и журналюгам предлагать внедрение.

pacify ★★★★★
()
Ответ на: комментарий от pacify

Логичнее всего запихать это обратно в LanguageTools.

abraziv_whiskey ★★★★★
() автор топика
Ответ на: комментарий от abraziv_whiskey

Зачем что-то печатать? Код должен просто исправлять опечатку без участия оператора.

Не знаю, что именно ты имел в виду в контексте треда, но вообще, имхо, замена должна быть не «просто», т.е. не «молчаливой» (по аналогии с silent install), а предупреждать пользователя, что именно, и на что заменяется, как в Вордах.

Иначе возможны лулзы в итоговом тексте, которых изначально не было.

Deleted
()

списком автозамен могу поделиться, всего там около 3800 пар

было бы очень здорово, с радостью впилил бы оный в емакс или ещё куда

raven_cler ★★
()
Ответ на: комментарий от Deleted

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

abraziv_whiskey ★★★★★
() автор топика
Ответ на: комментарий от abraziv_whiskey

Ну, если для наиболее дебильных, тогда не надо. А если более сложные варианты, там можно нажечся. Примеров готовых у меня нет, но закон Мерфи вполне работает.

Deleted
()
Ответ на: комментарий от justAmoment

И еще сто тыщ глаголов, которые не имеют формы с -ться.

abraziv_whiskey ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.