php - PHP 的同义词库类或 API [编辑]

标签 php linguistics thesaurus

TL;DR 摘要: 我需要一个命令行应用程序,可以使用它来获取同义词和其他相关单词。它需要是多语言的并且跨平台工作。任何人都可以为我推荐一个合适的程序,或者帮助我使用我已经找到的程序吗?谢谢。


更长的版本: 我的任务是用 PHP 编写一个系统,该系统可以针对用户输入的单词提出替代建议。我需要找到一个同义词库应用程序/API 或类似的应用程序,我可以用它来生成这些建议。

重要的是,它需要是多语言的(英语、丹麦语、法语和德语)。这排除了我使用谷歌找到的大部分软件。它还需要跨平台(需要在 Linux 和 Windows 上运行)。

我的研究让我找到了两个有前途的候选人:WordNetStardict .

到目前为止,我一直专注于 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 添加了一些额外的排序功能,如果该方法看起来合理,您可能需要研究一下。

基本步骤是(对于每种语言):

  1. 创建所需的表格(适当整理)。为了我们的利益,一列就足够了,例如:

    create table dict_en (
      word text check (word = lower(word)) primary key
    );
    
  2. 获取所需的词典/同义词库文件(来自 aspell/Open-Office 的应该可以)。

  3. 使用相关文件配置文本搜索(请参阅上面的链接,即第 12.6 节)。

  4. 将整个字典插入表中。 (肯定有一个 csv 文件在某处......)

  5. 最后对向量进行索引,例如:

    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/

相关文章:

database - 寻找叙词表数据

php - 奇怪的数据库输出问题

php - prestashop 主题的更改未反射(reflect)

php - 如何命名使用创建的新 id 记录上传的文件

php - preg_match 在大文本上比 strpos 更快?

c# - 使用同义词库的句子生成器

nlp - winword中汇总功能的背景

compare - 计算相对 Levenshtein 距离 - 有意义吗?

c# - 英语词典 api