Класс тезауруса или API для PHP [отредактирован]

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, которые я мог бы использовать?

Большое спасибо.

Ответ 1

Вы можете попытаться использовать функции полнотекстового поиска 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, и я уверен, что вы узнаете, как настроить выше, если это так.

Какая бы ни была деталь реализации, я считаю, что этот подход должен работать.

Ответ 2

Здесь приведен пример PHP для использования API тезауруса...

http://thesaurus.altervista.org/testphp

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

Ответ 3

Кажется, это вариант, хотя я не уверен, что его многоязычность: http://developer.dictionary.com/products/synonyms

Я также нашел следующий сайт, который делает что-то похожее на вашу конечную цель, возможно, вы можете попытаться связаться с владельцем и спросить его, как он это сделал: http://www.synonymlab.com/