5

我想创建一个方法来比较两个句子并返回使它们不同的单词。

例如

灰色瓷砖 100 X 200 厨房地板

灰色瓷砖 300 X 600 厨房地板

差异为 100 x 200 300 x 600

它将允许一个单词(不需要一个字符位于两个唯一单词之间),但如果距离超过一个,它会抛出一个错误,说短语不够相似,可以在开始/结束/中间找到差异文本

在传递到不同的博客后,我发现使用本机 php 函数 xdiff_string_diff 的方法与我的关注类似,但问题是,我无法使代码正常工作。我收到错误说 xdiff_string_diff 是未定义的函数。你们中的任何人都知道应该加载哪些扩展才能使此功能可用?或者,如果您可以建议另一种方法,那将非常感谢。:)

<?php
$old_article = "grey tiles 100 X 200 kitchen flooring";
$new_article = "grey tiles 300 X 600 kitchen flooring"

$diff = xdiff_string_diff($old_article, $new_article, 1);
if (is_string($diff)) {
    echo "Differences between two articles:\n";
    echo $diff;
}

?>
4

3 回答 3

7

你必须安装 xdiff

pecl install  xdiff

或者,您可以尝试使用 array_diff 来查找字符串之间的差异。在空间上分解它们,然后对它们进行 array_diff :

$a1 = explode(" " , 'grey tiles 100 X 200 kitchen flooring');
$a2 = explode(" ", 'grey tiles 300 X 600 kitchen flooring');

echo join(' ', array_diff($a1, $a2)); // 100 200

不过,这不会捕获 X,因为 X 将成为该上下文中字符串的公共部分。

于 2012-08-17T08:19:34.370 回答
2

在每个函数(或库)的每个手册页上,它总是提到它是否默认随附 PHP,以及他们从哪个版本的 PHP 开始将其打包到发行版中。

如果它不在发行版中,那么它会提到它所在的包(PECL 或 PEAR)。

O它的手册页指出:

PECL xdiff >= 0.2.0

如果您正在运行 BSD/Solaris/Linux/Mac,您只需打开控制台并输入:

pear install xdiff
于 2012-08-17T08:18:56.267 回答
0

您可以逐个比较每个字符,在每个差异中您都可以增加一个计数器。但是这个解决方案不会给你“300”,它会给你3。

于 2012-08-17T08:19:51.133 回答