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

13

TL;DR 摘要:我需要一个单独的命令行应用程序,可以用于获取同义词和其他相关单词。它需要支持多语言并跨平台使用。有人能推荐适合我的程序吗?或者可以帮忙处理我已经找到的程序吗?谢谢。

详细说明:我被委托编写一个PHP系统,用于为用户输入的单词提供替代建议。我需要找到一个可用于生成这些建议的同义词应用程序/ API或类似工具。

重要的是,它需要支持多种语言(英语、丹麦语、法语和德语)。这排除了我通过Google找到的大多数软件。它还需要跨平台使用(需要在Linux和Windows上运行)。

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

到目前为止,我一直在专注于WordNet,使用shell_exec()函数从PHP中调用它,并成功地用它创建了一个非常有前途的原型PHP页面,但目前只支持英语。我不知道如何使用多语言功能。

Wordnet网站有外部链接到其他语言的Wordnet项目(例如,丹麦语的DanNet),但尽管它们通常被称为Wordnet,它们似乎使用各种数据库格式和软件,这使它们对我不适用。我需要一个一致的接口,可以从我的PHP程序调用。

从这个角度看,Stardict看起来更有前途:它们提供许多语言的词典,并使用标准的DB格式进行一种应用程序。

然而,Stardict 的缺点在于它主要是一个 GUI 应用程序。从命令行调用它会启动 GUI。显然有一个命令行版本(SDCV),但它似乎相当过时(最后更新于2006年),且只适用于 Linux。

有人能帮我解决这两个程序的问题吗?否则,有没有其他替代软件或 API 推荐给我使用?

非常感谢。

3个回答

7
您可以尝试利用PostgreSQL的全文搜索功能:
http://www.postgresql.org/docs/9.0/static/textsearch.html
您可以配置它与任何可用语言和各种排序方式以适应您的需求。如果这种方法看起来合理,PostgreSQL 9.1添加了一些额外的排序功能,您可能需要了解。
基本步骤如下(对于每种语言):
  1. Create the needed table (collated appropriately). For our sake, a single column is enough, e.g.:

    create table dict_en (
      word text check (word = lower(word)) primary key
    );
    
  2. Fetch the needed dictionary/thesaurus files (those from aspell/Open-Office should work).

  3. Configure text search (see link above, namely section 12.6) using the relevant files.

  4. Insert the whole dictionary into the table. (Surely there's a csv file somewhere...)

  5. And finally index the vector, e.g.:

    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节,如果是这种情况,我相信您知道如何进行调整。
无论实现细节如何,我相信这种方法应该可行。

+1 因为这里有一些有用的东西。我们有一个 MySQL 数据库,但我相信它具有类似的搜索功能。你忽略了“获取所需的字典/词典文件”和“插入到表中”的部分——我一直在寻找合适的文件,但还没有找到令我满意的。任何指针都将受到欢迎。谢谢。 - Spudley
我自己没有做过这个,但如果我没记错的话,Postgres文档在某个地方提到了aspell和openoffice源文件。我理解这意味着后两者的字典文件是可用的,并且在某个地方可以找到。 - Denis de Bernardy
谢谢。我会继续努力解决问题。因为你是最好的答案,所以我会给你奖励,但我不认为我已经完全解决了这个问题。 - Spudley

7

谢谢你的回复,看起来很不错。但是有两个问题:1)我更喜欢将字典保存在本地而不是依赖第三方;2)更重要的是,它不支持丹麦语,而这是这个项目的一个关键需求。这很遗憾,因为如果它支持丹麦语,我可能会考虑接受它是一个远程服务的事实,因为它看起来很不错。 - Spudley
我注意到它使用了OpenOffice的同义词词库。我想知道是否有可能让我在本地使用它?是否有相应的API可以供我使用? - Spudley
嗯 - 不太确定 - 参见此线程:http://user.services.openoffice.org/en/forum/viewtopic.php?f=7&t=34238 - Fenton
我也想建议使用OpenOffice(或LibreOffice)-我们最近使用它从命令行执行各种文档转换。考虑到代码是开源的,即使没有现有的API,您也可以浏览一下并查看其在OpenOffice本身内部的使用情况,并尝试反向工程出一些东西。我想这取决于时间/预算限制! :-) - Nils Luxton

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接