PHP的同义词类或API [已编辑]

Spu*_*ley 12 php linguistics thesaurus

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


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

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

我的研究让我有两个有希望的候选人:WordNetStardict.

到目前为止,我一直专注于WordNet,使用该shell_exec()函数从PHP调用它,并且我已经设法使用它来创建一个非常有前途的原型PHP页面,但到目前为止只用英语.我正在努力学习如何多语言使用它.

Wordnet站点有外部链接到其他语言的Wordnet项目(例如DanNet for Danish),但是虽然它们通常被称为Wordnet,但它们似乎使用各种数据库格式和软件,这使得它们不适合我.我需要一个可以从我的PHP程序调用的一致接口.

从这个角度来看,Stardict看起来更有希望:它们以标准数据库格式为一个应用程序提供多种语言的字典.

但Stardict的缺点是它主要是一个GUI应用程序.从命令行调用它会启动GUI.显然有一个命令行版本(SDCV),但它似乎已经过时了(上次更新2006),并且仅适用于Linux.

任何人都可以帮助我解决这些程序中的问题吗?或者,任何人都可以建议我可以使用的任何其他替代软件或API吗?

非常感谢.

Fen*_*ton 7

这里有一个用于同义词API用法的PHP示例...

http://thesaurus.altervista.org/testphp

适用于意大利语,英语,法语,德语,西班牙语和葡萄牙语.


Den*_*rdy 7

您可以尝试利用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
    );
    
    Run Code Online (Sandbox Code Playgroud)
  2. 获取所需的词典/同义词库文件(来自aspell/Open-Office的文件应该有效).

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

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

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

    create index on dict_en using gin (to_tsvector('english', word));
    
    Run Code Online (Sandbox Code Playgroud)

您现在可以运行使用此索引的查询:

-- Find words related to `:word`
select word
from dict_en
where to_tsvector('english', word) @@ plainto_tsquery('english', :word)
and word <> :word;
Run Code Online (Sandbox Code Playgroud)

您可能需要为每种语言创建单独的数据库或模式,如果由于语言参数而Postgres拒绝索引表达式,则可以添加其他字段(tsvector).(我很久以前就读过全文文档).有关这方面的详细信息将在第12.2节中,如果是这种情况,我相信你会知道如何调整上述内容.

不过,无论实施细节如何,我相信这种方法应该有效.