文字列のおおよその類似性をチェックしようとしています。
そのために私が使っている基準があります。
1) 単語の順序は重要です 2) 単語は 80% の類似性を持つことができます。
例:
$string1 = "How much will it cost to me" //string in vocabulary (all "right" words is here)
$string2 = "How much does costs it " //"costs" instead "cost" -is a deliberate mistake (user input);
アルゴリズム: 1) 単語の類似性をチェックし、「正しい」単語でクリーンな文字列を作成します (語彙に表示される順序に従って)。OUTPUT: "how how much it cost " 2) ユーザー入力に表示されるように、"正しい" 単語でクリーンな文字列を作成します。OUTPUT: "how how much it it" 3) 2 つの出力を比較し、同じでない場合は no を返し、同じ場合は yes を返します。
助言がありますか?
コードを書き始めましたが、PHP のツールに詳しくないため、合理的かつ効率的に行う方法がわかりません。
それはjavascript/phpのように見えます
$string1="how much will it cost for me" ;
$string2= "how much does costs it";
function compareStrings($string1, $string2) {
if (strlen($s1)==0 || strlen($s2)==0) {
return 0;
}
while (strpos($s1, " ")!==false) {
$s1 = str_replace(" ", " ", $s1);
}
while (strpos($s2, " ")!==false) {
$s2 = str_replace(" ", " ", $s2);
}
$ar1 = explode(" ",$s1);
$ar2 = explode(" ",$s2);
$array1 = array_flip($ar1);
$array2 = array_flip($ar2);
$l1 = count($ar1);
$l2 = count($ar2);
$meaning="";
$rightorder=""
for ($i=0;$i<=$l1;$i++) {
for ($j=0;$j<=$l2;$j++) {
$k= similar_text($array1[i], $array2[j], $perc).PHP_EOL;
if ($perc>=85) {
$meaning=$meaning." ".$array1[j]; //generating a string of the first output
$rightorder[i]= array1[i]; //generating the array with second output
}
}
}
}
$meaning が「費用」を取得し、$rightorder が取得するという考え
$rightorder[0]='how'
$rightorder[1]='much'
$rightorder[2]=''
$rightorder[3]='cost'
$rightorder[4]='it'
その後、どういうわけかそれを文字列「どれくらいの費用がかかりましたか」に戻します
そしてその2つを比較します。
if ("how much cost it"=="how much it cost") return true; else return false.