Гид по технологиям

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

• 5 min read • Linux • Обновлено 24 Nov 2025
Проверка орфографии в командной строке Unix
Проверка орфографии в командной строке Unix

Терминал Bash — пример командной строки

Краткое введение

Раньше, до повсеместных графических редакторов со встроенной проверкой, орфографию проверяли прямо в терминале. На большинстве Unix-подобных систем есть файл словаря (обычно /usr/share/dict/words), где каждое слово расположено в отдельной строке. Задача сводится к тому, чтобы получить из документа отсортированный список уникальных слов в нижнем регистре и сравнить его со словарём.

Определение: tr — утилита для замены или удаления символов; comm — утилита для построчного сравнения двух отсортированных файлов.

Пошаговый метод (надёжный вариант)

  1. Привести текст к нижнему регистру (лучше использовать POSIX-класс символов).
  2. Удалить знаки препинания, которые мешают разделению слов.
  3. Преобразовать разделители (пробелы) в перенос строки, чтобы каждое слово было на своей строке.
  4. Отсортировать и удалить дубли.
  5. Сравнить полученный список со словарём с помощью comm или grep.

Надёжная последовательность команд

cat document | tr '[:upper:]' '[:lower:]' | tr -d ',.:;()?!"' | tr "[:space:]" "\n" | sort | uniq > doc_words
sort /usr/share/dict/words | tr '[:upper:]' '[:lower:]' | uniq > words
comm -23 doc_words words

Пояснения:

  • tr ‘[:upper:]’ ‘[:lower:]’ — корректная и локально-независимая конвертация в нижний регистр.
  • tr -d ‘,.:;()?!”‘ — удаляет знаки пунктуации, мешающие формированию «чистых» слов. Подберите набор символов под ваш язык/текст.
  • tr “[:space:]” “\n” — превращает все пробельные символы в переносы строк (учёт табуляции и разных переводов строки).
  • sort + uniq — получаем отсортированный список уникальных слов.
  • comm -23 — печатает строки, которые есть в первом файле, но отсутствуют во втором (то есть кандидаты на ошибку).

Важно: comm требует, чтобы оба файла были отсортированы одинаково. Поэтому мы предварительно сортируем и словарь.

Пример: документ с опечатками

Содержимое файла document:

$ 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 '[:upper:]' '[:lower:]' | tr -d ',.:;()?!"' | tr "[:space:]" "\n" | sort | uniq | comm -23 - words
bulet
procesors
thikn

Эти строки — слова из документа, отсутствующие в словаре — кандидаты на орфографические ошибки.

Частые проблемы и когда метод не сработает

  • Словарь не соответствует вашему языку или домену. Технические термины, имена собственные, аббревиатуры и сленг часто отсутствуют.
  • Форматы с встроенной разметкой (HTML, Markdown, LaTeX) содержат теги и команды — их нужно предварительно очищать (sed/awk).
  • Словарь может содержать как прописные, так и строчные варианты (например, “Minnesota” и “minnesota”), что нарушит сортировку и работу comm, если не нормализовать регистр и не удалить дубли.
  • Метод не учитывает контекст: «read» vs «read» (разное произношение) и грамматику — только орфография.

Альтернативные, более простые и практичные инструменты

  • aspell (рекомендуется для быстрой интерактивной проверки):
aspell list < document | sort -u

aspell возвращает список слов, не найденных в его словаре. Он поддерживает словари для многих языков и умеет подсказывать варианты.

  • hunspell (используется в LibreOffice/Firefox):
hunspell -l document | sort -u
  • grep/fgrep как альтернатива comm (если не хочется сортировать словарь вручную):
# doc_words — уникальные слова из документа, words — подготовленный словарь
grep -F -x -v -f words doc_words

где флаги означают: -F (фиксированные строки), -x (совпадение всей строки), -v (вывести несовпадающие), -f (шаблоны из файла).

  • Для разметки (Markdown/HTML) сначала удалите теги: sed ‘s/<[^>]*>//g’ или специализированные парсеры, затем примените процесс проверки.

Мини‑методология (короткий чек-лист для запуска)

  1. Скопируйте document в рабочую папку.
  2. Подготовьте словарь: sort /usr/share/dict/words | tr ‘[:upper:]’ ‘[:lower:]’ | uniq > words
  3. Получите уникальные слова из документа: cat document | tr ‘[:upper:]’ ‘[:lower:]’ | tr -d ‘,.:;()?!”‘ | tr “[:space:]” “\n” | sort | uniq > doc_words
  4. Найдите отсутствующие слова: comm -23 doc_words words
  5. Просмотрите результаты вручную и решите: добавить слово в пользовательский словарь или исправить.

Роль‑ориентированные чек‑листы

Для технического автора:

  • удалите спецразметку (code blocks, inline code) перед проверкой;
  • используйте словарь с терминами проекта;
  • храните пользовательский словарь рядом с репозиторием.

Для системного администратора:

  • подготовьте централизованный словарь для команды: sort /usr/share/dict/words | tr ‘[:upper:]’ ‘[:lower:]’ | uniq > /usr/local/share/words.team
  • применяйте регулярное обновление пользовательских словарей.

Для разработчика:

  • интегрируйте aspell/hunspell в pre-commit hook: проверять изменённые файлы;
  • игнорируйте автогенерируемые файлы и бины.

Краткая сравнительная шпаргалка (cheat sheet)

  • Простая командная цепочка (полезна для быстрой проверки):
cat document | tr '[:upper:]' '[:lower:]' | tr -d '.,:;()?!"' | tr "[:space:]" "\n" | sort | uniq | comm -23 - /usr/share/dict/words
  • Быстро и удобно (с aspell):
aspell list < document | sort -u
  • Для сложных случаев (Markdown/HTML) — сначала очистка разметки, затем проверка.

Критерии приёмки

  • Скрипт выдаёт список слов, отсутствующих в словаре.
  • Алиасы и локальные словари учтены (если требуется).
  • Для файла со сложной разметкой проведена предварительная очистка.

Когда лучше выбрать aspell/hunspell вместо «старой школы»

  • Если важны подсказки и возможность добавить слово в пользовательский словарь интерактивно — используйте aspell/hunspell.
  • Если нужен интегрированный подход в IDE или CI — hunspell чаще встречается в проектах, совместимых с LibreOffice/Firefox.

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

Краткая таблица соответствия команд и задач

  • tr ‘[:upper:]’ ‘[:lower:]’ — нормализация регистра.
  • tr -d ‘… ‘ — удаление нежелательных символов.
  • tr “[:space:]” “\n” — разделение слов по строкам.
  • sort | uniq — сортировка и удаление дублей.
  • comm -23 — слова из первого файла, отсутствующие во втором.

Сравнение подходов (когда выбрать что)

  • “Old school” (tr + sort + comm): хорошо для полностью автономного процесса без внешних зависимостей.
  • aspell/hunspell: удобнее для интерактивной работы и языковой поддержки.
  • grep -F -x -v -f: полезно, когда вы уже получили список слов и хотите быстро отфильтровать словарь.

1‑строчный глоссарий

  • tr — утилита замены/удаления символов.
  • sort — сортирует построчный ввод.
  • uniq — удаляет соседние дубликаты (часто в связке с sort).
  • comm — сравнивает два отсортированных файла построчно.
  • aspell/hunspell — инструменты проверки орфографии, умеют подсказки и пользовательские словари.

Короткое объявление (announce, 100–200 слов)

В командной строке Unix можно проверять орфографию быстро и автономно, используя стандартные утилиты: tr, sort, uniq и comm. Метод полезен для серверных сред, CI и сценариев, где нет графического интерфейса. Для интерактивной работы или при необходимости подсказок лучше использовать aspell или hunspell. В статье показаны надёжные командные цепочки, варианты для разных форматов документа (plain text, Markdown) и рекомендации по созданию и поддержке командных словарей.

Итог / Резюме

  • Метод «старой школы» остаётся полезным: он прост, не требует дополнительных пакетов и легко автоматизируется.
  • Для интерактивной и контекстной проверки используйте aspell или hunspell.
  • Подготовка словаря и очистка разметки — ключевые шаги для корректной проверки.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро