5

2 つの文を比較して、違いを生む単語を返すメソッドを作成したいと考えています。

例えば

グレーのタイル 100 X 200 キッチン フローリング

グレーのタイル 300 X 600 キッチン フローリング

違いは 100 x 200 300 x 600

1 つの単語を許可します (2 つの一意の単語の間に 1 文字を配置する必要はありません) が、距離が 1 を超えると、フレーズが十分に類似していないというエラーがスローされますが、違いは最初/最後/途中で見つけることができますテキスト

別のブログに移動した後、ネイティブphp関数xdiff_string_diffを使用して懸念事項に対する同様のアプローチを見つけましたが、問題は、コードを機能させることができないことです。xdiff_string_diff is undefined function というエラーが表示されました。この機能を利用できるようにするには、どの拡張機能をロードする必要があるか知っている人はいますか? または、別のアプローチを提案できれば、それは素晴らしいことであり、非常に高く評価されます。:)

<?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

各キャラクターを 1 つずつ比較できます。違いがあるたびに、カウンターを 1 つ増やすことができます。しかし、この解決策は「300」ではなく、3 になります。

于 2012-08-17T08:19:51.133 に答える