TL;DR 摘要: 我需要一个命令行应用程序,可以使用它来获取同义词和其他相关单词。它需要是多语言的并且跨平台工作。任何人都可以为我推荐一个合适的程序,或者帮助我使用我已经找到的程序吗?谢谢。
更长的版本:
我的任务是用 PHP 编写一个系统,该系统可以针对用户输入的单词提出替代建议。我需要找到一个同义词库应用程序/API 或类似的应用程序,我可以用它来生成这些建议。
重要的是,它需要是多语言的(英语、丹麦语、法语和德语)。这排除了我使用谷歌找到的大部分软件。它还需要跨平台(需要在 Linux 和 Windows 上运行)。
我的研究让我找到了两个有前途的候选人:WordNet和 Stardict .
到目前为止,我一直专注于 WordNet,使用 shell_exec() 函数从 PHP 调用它,并且我已经成功地使用它创建了一个非常有前途的原型(prototype) PHP 页面,但是所以远只有英文。我正在努力解决如何使用多种语言的问题。
Wordnet 站点具有其他语言的 Wordnet 项目的外部链接(例如丹麦语的 DanNet),但尽管它们通常被称为 Wordnet,但它们似乎使用了多种数据库格式和软件,这使得它们不适合我。我需要一个可以从 PHP 程序调用的一致接口(interface)。
从这个角度来看,Stardict 看起来更有前途:它们为一个应用程序以标准数据库格式提供多种语言的词典。
但 Stardict 的缺点是它主要是一个 GUI 应用程序。从命令行调用它会启动 GUI。显然有一个命令行版本( 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;
如果 Postgres 由于语言参数而拒绝为表达式建立索引,您可能需要为每种语言创建一个单独的数据库或架构,并添加一个附加字段 (tsvector)。 (我很久以前就读过全文文档)。有关此内容的详细信息将在第 12.2 节中进行,我相信如果是这种情况,您会知道如何调整上述内容。
无论实现细节如何,我相信该方法应该有效。
关于php - PHP 的同义词库类或 API [编辑],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5817635/