我正在尝试编写一个程序来查找两个文档之间的相似性,由于我只使用英语,我决定使用 wordnet,但我找不到将 wordnet 与 php 链接的方法,我无法从 php 中找到任何 wordnet api。
我在论坛上看到有人说(Spudley)他从 php 调用 wordnet(使用 shell_exec() 函数)、 Thesaurus 类或 PHP 的 API [已编辑]
我真的很想知道使用的方法或一些示例代码,也许是开始使用 wordnet 和 php 的教程。
非常感谢
我正在尝试编写一个程序来查找两个文档之间的相似性,由于我只使用英语,我决定使用 wordnet,但我找不到将 wordnet 与 php 链接的方法,我无法从 php 中找到任何 wordnet api。
我在论坛上看到有人说(Spudley)他从 php 调用 wordnet(使用 shell_exec() 函数)、 Thesaurus 类或 PHP 的 API [已编辑]
我真的很想知道使用的方法或一些示例代码,也许是开始使用 wordnet 和 php 的教程。
非常感谢
从 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
应该包含上面引用的文本块。
此时,您必须进行一些适当的编码。您需要获取该文本块并将其解析为您想要的数据。
这就是棘手的地方。由于数据以一种设计为人类而非程序读取的格式呈现,因此准确解析是很棘手的。
需要注意的是,不同的搜索选项呈现的输出略有不同。而且,返回的一些结果可能有些深奥。我最终编写了一个加权系统来对结果进行评分,但它非常适合我的需求,所以你需要尝试它来提出你自己的系统。
我希望这对你有足够的帮助。:)