1

文字列のおおよその類似性をチェックしようとしています。

そのために私が使っている基準があります。

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.
4

1 に答える 1

1

あなたの問題は、NLP (自然言語処理) の科学に属しています。

質問で言及されている各問題には、独自の研究分野があります。

  • 文字列を単語に分割することはトークン化です。英語では些細なことのように見えますが、ドイツ語などの他の言語ではそうではありません。また、句読点をどのように解析するかという問題もあります。

  • 「正しい単語」を作成することをステミングと呼びます。そのためのツールはたくさんあります。単語が英語の場合は、Porter Stemming Algorithmを試すことができます。他の言語には独自のステミング手法がある場合があり、通常は辞書アルゴリズムが存在します。

  • 個々の単語の出現に基づいて文字列の類似度を計算することを「コサイン類似度」と呼びます。他にもいくつかのテクニックがあります。同義性と多義性の問題もある

あなたの問題は上記の問題が混在しているため、お役に立てば幸いです。

于 2013-05-14T14:13:03.217 に答える