Поиск по сайту:

Как проверить орфографию в стиле старой школы Unix


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

Проверка орфографии в командной строке

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

В первые дни Unix система предоставляла файл словаря (обычно /usr/share/dict/words в большинстве систем Linux), который содержал отсортированный список слов из словаря, где каждое слово находилось в линия сама по себе. Чтобы проверить правописание из документа, вам нужно сравнить все слова в вашем документе с файлом словаря. А для этого вам нужно преобразовать документ в формат, похожий на файл словаря: отсортированный список слов, где каждое слово находится в отдельной строке.

Файл словаря написан строчными буквами, поэтому сначала вам нужно преобразовать документ для использования строчных букв. Вы делаете это с помощью команды cat для отображения файла и команды tr для перевода символов из одного набора в другой. В этом случае вы можете попросить tr преобразовать все прописные буквы A-Z в строчные a-z:

cat document | tr A-Z a-z

Хотя словарь включает в себя знаки препинания в словах, такие как дефисы и апострофы, список слов не включает знаки препинания в предложениях, такие как точки и вопросительные знаки. Итак, следующий шаг — использовать tr, на этот раз для удаления (-d) ненужных символов:

cat document | tr A-Z a-z | tr -d ',.:;()?!'

В файле словаря каждое слово находится на отдельной строке, поэтому вам нужно разбить документ, чтобы каждое слово отображалось на отдельной строке. Команда tr может заменить пробелы символом «новой строки», чтобы сделать это за нас:

cat document | tr A-Z a-z | tr -d ',.:;()?!' | tr ' ' 'n'

Сортировка вывода легко выполняется с помощью команды Unix sort. Добавьте команду uniq, чтобы очистить вывод и удалить повторяющиеся слова. Например, вы, вероятно, используете слово «the» несколько раз в любом документе. Использование sort, затем uniq удалит повторяющиеся экземпляры «the», поэтому в вашем выводе будет только один «the».

cat document | tr A-Z a-z | tr -d ',.:;()?!' | tr ' ' 'n' | sort | uniq

Теперь вы готовы сравнить список слов из вашего документа с файлом словаря! Стандартная команда Unix comm сравнивает два файла построчно и идентифицирует строки, уникальные для первого файла, уникальные для второго файла или строки, общие для обоих. Чтобы найти список слов с ошибками в вашем документе, вам нужен список уникальных слов — слов, которые встречаются в вашем документе, но не в файле словаря. Используйте параметр -2, чтобы не печатать слова, уникальные для второго файла, и параметр -3, чтобы не > отображать слова, общие для обоих файлов. Остаются слова, уникальные для вашего документа, которых нет в словаре; это слова с ошибками.

cat document | tr A-Z a-z | tr -d ',.:;()?!' | tr ' ' 'n' | sort | uniq | comm -2 -3 - /usr/share/dict/words

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

И вот как проверить орфографию в стиле «старой школы Unix»! Позвольте мне продемонстрировать образец документа. Я намеренно опечатался в нескольких словах:

$cat document
Early Unix didn't have word procesors like we thikn of them today. Instead,
you wrote a plain text document that might have embedded special commands to
underline text or create a list of bulet points. But how did you check the
spelling of your document?

Запустив список команд, вы найдете этот список слов с ошибками:

$cat document | tr A-Z a-z | tr -d ',.:;()?!' | tr ' ' 'n' | sort | uniq | comm -2 -3 - words
bulet
procesors
thikn

Ключом к такой проверке орфографии является команда Unix comm для сравнения двух отсортированных списков слов. Два списка должны быть отсортированы одинаково. Файл /usr/share/dict/words вашей системы Linux может содержать некоторые слова в верхнем регистре, такие как общие имена, заголовки или местоположения. Например, файл словаря в моей системе Fedora 32 содержит как «Миннесота» (правильная заглавная буква для названия штата США), так и «миннесота» (все строчные буквы) в соседних строках. Но команда Unix sort сортирует прописные буквы отдельно от строчных. Это запутает команду comm, которая будет жаловаться на то, что входной файл отсортирован неправильно. Чтобы лучше соответствовать методу «старой школы Unix» для проверки орфографии, вам может сначала потребоваться отсортировать файл словаря вашей системы и сохранить его в отдельном файле. Вы можете сделать это следующим образом:

sort /usr/share/dict/words > words