Я регулярно использую тезаурус как при написании документации и файлов README, так и при написании кода для именования переменных и функций.
Раньше я пользовался онлайн-тезаурусами, особенно thesaurus.com, но мне не нравился этот опыт. Хотя результаты полезны и очень хорошо организованы, они не удобны для использования с клавиатурой и медленны в навигации, особенно когда результаты занимают много страниц.
Поэтому я создал свой собственный тезаурус. Я использую его гораздо чаще, чем когда-либо использовал thesaurus.com. У него меньше функций, но доступ к нему гораздо быстрее и он менее мешает творческому процессу.
В окне терминала введите th
а затем слово. Например, чтобы найти слово «внимание» :
th внимания |
Выходные данные представляют собой список связанных слов и фраз, организованных в столбцы с контекстными строками вверху и внизу, а также списком параметров навигации внизу.
Результат поиска по запросу "Внимание" |
В нижней строке экрана результатов отображается список доступных действий. Инициируйте действие, набрав первую букву действия (выделена на экране для акцента).
Данные организованы в виде записей тезауруса, каждая из которых содержит набор связанных слов и фраз. Запись — это ствол , а связанные с ней слова и фразы — это ветви .
По умолчанию используется режим ветвей. Отображаемые слова — это слова и фразы, перечисленные после записи в исходном тезаурусе. При переключении в режим соединительных линий будут показаны записи, содержащие это слово. Наиболее наглядно это демонстрирует пример без каких-либо ветвей:
триггер - это слово без записи |
Для слова триггер в тезаурусе нет записи. Однако слово «триггер» присутствует в тезаурусе как ответвление других статей. Переключитесь в режим соединительных линий , чтобы увидеть записи, содержащие триггер :
Список слов, для которых триггер является родственным словом |
Эта программа не доступна в виде пакета; необходимо загрузить исходный код и собрать проект. Следующие шаги позволят создать рабочий тезаурус:
git clone https://www.github.com/cjungmann/th.git
cd th
make
make thesaurus.db
Поиграйте с программой и посмотрите, понравится ли она вам. Если вы хотите, чтобы он был доступен за пределами каталога сборки, вызовите следующую команду:
sudo make install
Программу легко удалить, если вы решите, что она вам не нужна.
Если вы установили программу, сначала удалите ее с помощью sudo make uninstall
Это приведет к удалению программы, файлов поддержки и каталога, в котором файлы поддержки были установлены.
Если программа не установлена, то можно смело просто удалить клонированный каталог.
Следующий материал в первую очередь заинтересует разработчиков, если кого-то.
Проект легко построить, но он зависит от другого программного обеспечения. Ниже приведен список зависимостей, из которых только первая (база данных Беркли) может потребовать некоторого вмешательства. Элементы 3 и 4 ниже загружаются в подкаталог каталога сборки, а найденный там код статически связан с исполняемым файлом, поэтому он не повлияет на вашу среду.
db версии 5 (База данных Беркли) необходима для баз данных B-Tree в проекте. Если вы используете git , он у вас уже должен быть, даже во FreeBSD , которая в противном случае включает только более старую версию db . Make немедленно завершит работу с сообщением, если не сможет найти подходящую базу данных . В этом случае вам придется использовать менеджер пакетов для установки базы данных или сборки ее из исходных кодов.
git используется для загрузки некоторых зависимостей. Хотя зависимости проекта можно загрузить напрямую без git , для этого требуются недокументированные знания об исходных файлах, и этой проблемы можно избежать, если make может использовать git для загрузки зависимостей.
readargs — один из моих проектов, который обрабатывает аргументы командной строки. Хотя этот проект все еще используется th , для работы th больше не требуется устанавливать эту библиотеку. Теперь Makefile загружает проект readargs в подкаталог, собирает его и вместо этого использует статическую библиотеку.
c_patterns — еще один мой проект, эксперимент по управлению повторно используемым кодом без необходимости использования библиотеки. Makefile использует git для загрузки проекта, затем создает ссылки на некоторые модули c_patterns в каталоге src для включения в сборку .
Этот проект хоть и полезен (по крайней мере для меня), но в то же время является экспериментом. Одна из моих целей — улучшить свои навыки написания make-файлов. Некоторые из решений по сборке и установке, которые я принял, возможно, не являются лучшими практиками или даже могут быть осуждены более опытными разработчиками. Если вы беспокоитесь о том, что произойдет с вашей системой, если вы установите th
, я надеюсь, что следующее поможет вам принять решение.
Как и ожидалось, make скомпилирует приложение . Возможно, нетрадиционно make выполняет и другие задачи, которые могут занять некоторое время:
Загружает мой репозиторий модулей C и использует несколько из них, создавая ссылки на каталог src .
Вместо использования configure
для проверки зависимостей, make-файл идентифицирует и немедленно завершает работу с полезным сообщением, если обнаруживает отсутствующие зависимости.
Загрузите и импортируйте общедоступный тезаурус moby из проекта Gutenberg. Это заполняет базу данных слов приложения.
Заброшено Загрузите и импортируйте базу данных подсчета слов. Идея состоит в том, чтобы предложить альтернативный порядок сортировки, чтобы облегчить поиск слова в более длинном списке. Это сейчас не работает. Я не уверен, что вернусь к этому, потому что считаю, что польза от чтения алфавитного списка намного перевешивает сомнительную выгоду от попытки поставить на первое место более часто используемые слова. Причина в том, что гораздо легче отслеживать рассматриваемые слова, когда они не разбросаны случайным образом в длинном списке слов.
Я только что заметил, что существует ресурс списка частей речи Moby, который может помочь организовать вывод. Это интригует, но я не уверен, что это будет полезно, учитывая, насколько алфавитная сортировка помогает при использовании выходных данных. Посмотрим.
Когда я начинал этот проект, у меня было несколько целей.
Мне хотелось получить больше опыта работы с базой данных Беркли . Эта база данных хранилища ключей лежит в основе многих других приложений, включая git и sqlite .
Я хотел попрактиковаться в использовании некоторых модулей моего проекта c_patterns. Использование этих модулей в реальном проекте помогает мне понять их конструктивные недостатки и недостающие функции. Я использую
columnsize.c для генерации столбчатого вывода,
Promter.c для минимального меню опций в нижней части вывода,
get_keypress.c для неотраженных нажатий клавиш, в основном используется Promter.c .
Я хотел попрактиковаться в разработке процесса сборки, который работает как в Gnu Linux, так и в BSD. Это включает в себя идентификацию недостающих модулей (особенно db , в состав которой BSD входит слишком старая библиотека) и переработанную условную обработку.
Я не ориентируюсь на Windows, потому что она более существенно отличается от Linux, чем от BSD, и я не ожидаю, что многим пользователям Windows будет удобно перейти на приложение командной строки.
База данных Беркли ( bdb ) кажется интересным продуктом для баз данных. Его низкоуровневый подход с использованием библиотеки C кажется похожим на движок FairCom DB, который я использовал еще в конце 1990-х годов.
База данных Беркли привлекательна тем, что она является частью дистрибутивов Linux и BSD и занимает небольшую площадь. Это вознаграждает за детальное планирование данных и дает повод изучить некоторые из моих идей по языку C.
Этот проект представляет собой перезапуск моего проекта слов, который должен представлять собой тезаурус и словарь командной строки. В этом проекте я впервые использовал bdb , поэтому некоторые мои работы там немного неуклюжи. Я хочу снова разработать код bdb с нуля. Я скопирую часть кода синтаксического анализа текста из проекта Words , который будет применим здесь.
Используя большие наборы данных, такие как тезаурус и словарь, я также хочу проверить разницу в производительности между методами доступа к данным Queue и Recno. Я ожидаю, что очередь будет работать быстрее, поскольку можно будет вычислить начало и конец записей фиксированной длины. Доступ по номеру записи данной записи переменной длины потребует поиска местоположения файла. Я хотел бы измерить разницу в производительности, чтобы сопоставить это преимущество с эффективностью хранения записей переменной длины.
Существует два общедоступных источника тезаурусов:
Я использую тезаурус Моби, потому что его организация намного проще и, следовательно, его легче анализировать. Проблема в том, что синонимов много, и из-за отсутствия организации их гораздо сложнее просмотреть при поиске подходящего синонима.
Поскольку для многих слов существуют сотни синонимов, очень сложно просмотреть список, чтобы найти подходящее слово. Я постараюсь навести порядок в списке, чтобы им было легче пользоваться. После некоторого использования этого инструмента я пришел к выводу, что лучше всего использовать алфавитный порядок. Гораздо проще вернуться к слову в алфавитном списке. Я удалил возможность выбора другого порядка слов.
Самая простая в использовании классификация — это частота употребления слов. Я планирую перечислить слова от наибольшей к наименьшей частоте употребления. Предположительно, более популярные слова могут быть лучшим выбором, а менее популярные слова могут оказаться устаревшими.
Существует несколько источников частотности слов. Тот, который я использую, основан на Google ngrams:
Данные корпуса естественного языка: красивые данные
Я не особо изучал источник Норвига, так что возможно там много ерунды. Есть еще один источник, который может иметь более очищенный список: hackerb9/gwordlist. Если с Норвигом возникают проблемы, я хочу запомнить этот альтернативный список, которым я могу его заменить.
Эта часть больше не используется. Интерпретация исходных данных осложняется необходимостью распознавать и преобразовывать уникальные обозначения словаря в символы Юникода. Я решил многие из этих проблем, но многие все еще остаются. Makefile по-прежнему содержит инструкции по загрузке этой информации, а в репозитории хранятся некоторые сценарии преобразования на случай, если я захочу к этому вернуться.
Группировка синонимов по частям речи (т.е. существительное, глагол, прилагательное и т. д.) также может оказаться полезной. Первая проблема заключается в определении части речи, представленной каждым словом. Вторая проблема связана с представлением: было бы лучше, но сложнее запрограммировать, иметь интерфейс, в котором пользователь мог бы выбирать часть речи перед отображением слов.
Электронные общедоступные словари
Моя первая попытка — использовать Международный совместный словарь английского языка GNU (GCIDE). Он основан на старой (1914 г.) версии Вебстера с некоторыми словами, добавленными более современными редакторами.