TL; DR Резюме: Мне нужно одно приложение командной строки, которое я могу использовать для получения синонимов и других связанных слов. Он должен быть многоязычным и работать кросс-платформой. Может ли кто-нибудь предложить подходящую программу для меня или помочь мне с теми, которые я уже нашел? Благодарю.
Более длинная версия: мне было поручено написать систему на PHP, которая может предложить альтернативные предложения для слов, введенных пользователем. Мне нужно найти приложение тезауруса / API или подобное, которое я могу использовать для создания этих предложений.
Важно отметить, что он должен быть многоязычным (английский, датский, французский и немецкий). Это исключает большую часть программного обеспечения, которое мне удалось найти с помощью Google. Он также должен быть кросс-платформенным (он должен работать на Linux и Windows).
Мои исследования позволили мне двух перспективных кандидатов: WordNet и Stardict .
На данный момент я сосредоточен на WordNet, называя его с PHP с помощью функции shell_exec()
, и мне удалось использовать его для создания очень перспективной прототипа PHP-страницы, но до сих пор на английском языке. Я борюсь с тем, как использовать его многоязычный.
Сайт Wordnet имеет внешние ссылки на проекты Wordnet на другом языке (например, DanNet для датчан), но, хотя их часто называют Wordnet, они, похоже, используют различные форматы и программное обеспечение для баз данных, что делает их непригодными для меня. Мне нужен последовательный интерфейс, который я могу вызвать из своей PHP-программы.
Stardict выглядел более перспективным с этой точки зрения: они предоставляют словари на многих языках в стандартном формате DB для одного приложения.
Но нижняя сторона Stardict – это, прежде всего, графическое приложение. Вызов из командной строки запускает графический интерфейс. По-видимому, версия командной строки ( SDCV ), но она выглядит совершенно устаревшей (последнее обновление 2006 года) и только для Linux.
Может ли кто-нибудь помочь мне с моими проблемами с любой из этих программ? Или, может ли кто-нибудь предложить любое другое альтернативное программное обеспечение или API, которые я мог бы использовать?
Большое спасибо.
Вы можете попытаться использовать функции полнотекстового поиска PostgreSQL:
http://www.postgresql.org/docs/9.0/static/textsearch.html
Вы можете настроить его с помощью любого из доступных языков и всех видов сортировок в соответствии с вашими потребностями. PostgreSQL 9.1 добавляет некоторые дополнительные функции сопоставления, которые вы, возможно, захотите изучить, если подход кажется разумным.
Основными шагами были бы (для каждого языка):
Создайте необходимую таблицу (соответствующим образом сопоставленную). Для нас достаточно одного столбца, например:
create table dict_en ( word text check (word = lower(word)) primary key );
Извлеките необходимые файлы словаря / тезауруса (те из aspell / Open-Office должны работать).
Настройте текстовый поиск (см. Ссылку выше, а именно раздел 12.6), используя соответствующие файлы.
Вставьте весь словарь в таблицу. (Конечно, где-то есть файл csv …)
И, наконец, проиндексируйте вектор, например:
create index on dict_en using gin (to_tsvector('english', word));
Теперь вы можете запускать запросы, которые используют этот индекс:
-- Find words related to `:word` select word from dict_en where to_tsvector('english', word) @@ plainto_tsquery('english', :word) and word <> :word;
Возможно, вам потребуется создать отдельную базу данных или схему для каждого языка и добавить дополнительное поле (tsvector), если Postgres откажется индексировать выражение из-за параметра языка. (Я давно прочитал полнотекстовые документы). Подробности об этом будут в разделе 12.2, и я уверен, что вы будете знать, как настроить выше, если это так.
Однако, насколько мне известно, этот подход должен работать.
Существует пример PHP для использования API тезауруса здесь …
http://thesaurus.altervista.org/testphp
Доступно для итальянского, английского, французского, немецкого, испанского и португальского языков.
Кажется, это вариант, хотя я не уверен, что его многоязычность: http://developer.dictionary.com/products/synonyms
Я также нашел следующий сайт, который делает что-то похожее на вашу конечную цель, возможно, вы можете попытаться связаться с владельцем и спросить его, как он это сделал: http://www.synonymlab.com/