4

我正在尝试编写一个程序来查找两个文档之间的相似性,由于我只使用英语,我决定使用 wordnet,但我找不到将 wordnet 与 php 链接的方法,我无法从 php 中找到任何 wordnet api。

我在论坛上看到有人说(Spudley)他从 php 调用 wordnet(使用 shell_exec() 函数)、 Thesaurus 类或 PHP 的 API [已编辑]

我真的很想知道使用的方法或一些示例代码,也许是开始使用 wordnet 和 php 的教程。

非常感谢

4

1 回答 1

10

从 WordNet 站点链接到的 PHP 扩展非常陈旧且过时——它声称可以与 PHP4 一起使用,所以我认为它已经有好几年没有被关注了。

没有任何其他 API 可用于 WordNet->PHP,所以我推出了自己的解决方案。

WordNet 可以从命令行运行,因此 PHP 的shell_exec()函数可以读取输出。

如果您从命令行运行 WordNet(cd 到 Wordnet 的目录,然后只是wn)不带任何参数,它将显示 Wordnet 支持的可能功能列表。

仍然在命令行中,如果您随后尝试其中一个/一些功能,您将看到 Wordnet 如何输出其结果。例如,如果你想要单词“star”的同义词,你可以试试这个-synsn函数:

wn star -synsn

这将产生看起来有点像这样的输出:

名词star的同义词/上位词(按估计频率排序)

八感星

感觉 1 星 => 天体,天体

Sense 2 ace, adept, Champion, sense, maven, mavin, virtuoso, 天才, hotshot, star, superstar, whiz, whizz, wizard, wiz => 专家

感觉 3 星 => 天体,天体

Sense 4星=>平面图,二维图

Sense 5 星,校长,主角 => 演员,演员,演员,戏剧演员,角色扮演者

Sense 6 头条新闻,明星 => 表演者,表演艺术家

Sense 7 星号、星号 => 字符、字形、图形符号

Sense 8 星型拓扑,星型 => 拓扑,网络拓扑

在 PHP 中,您可以使用该shell_exec()函数读取相同的输出。

$result = shell_exec('/path/to/wn '.$word.' -synsn');

现在$result应该包含上面引用的文本块。

此时,您必须进行一些适当的编码。您需要获取该文本块并将其解析为您想要的数据。

这就是棘手的地方。由于数据以一种设计为人类而非程序读取的格式呈现,因此准确解析是很棘手的。

需要注意的是,不同的搜索选项呈现的输出略有不同。而且,返回的一些结果可能有些深奥。我最终编写了一个加权系统来对结果进行评分,但它非常适合我的需求,所以你需要尝试它来提出你自己的系统。

我希望这对你有足够的帮助。:)

于 2011-06-13T15:44:28.377 回答