0

私が見つけた最も近い既存の質問は、これまたはこれです

文字列を受け入れる関数またはクラスを書きたいと思います。次に、プログラムできる基準に基づいて、それが実際の人間の名前である確率を返します。現時点では、英語またはヨーロッパの名前、または他の名前の英語の音訳に大きく偏っていると思います. (たとえば、「bob」、「bob smith」、および「smith」はすべて 1.0 を返し、「sfgoisxdzzg」は .001 または .0000001 のような値を返す必要があります)

これがすでに行われている/行われている場合、誰かが知っていますか? (たとえ別の言語であっても) 私が最初に考えたのは、ある種の機械学習スクリプトを実行する必要があるということでした。それに関する私の問題は、機械学習理論について完全に無知であることです。

では、私の質問の 2 番目の部分は次のとおりです。機械学習は、この問題に取り組むための実行可能なオプションですか? もしそうなら、それを行う方法を学ぶためにどのリソースから始めるべきですか? そうでない場合は、正しい方向に私を向けることができますか?

4

1 に答える 1

2

私がフィルタリングに使用するこのベイジアン アプローチは、連絡先の送信と見積もりフォームのリクエストでかなりの成功を収めています。フォームはスコアリングを使用しており、世界中からのリクエストをさまざまな言語で処理します。さまざまなフィールドで 3 つまたは 4 つのテストに失敗した場合にのみ、スパムの試みとしてマークします。明らかに、「123456」のようなものは、電話番号に対して即座に危険信号を発します。また、コメントの BBCode は完全に無料です。

<?php
function nameCheck($var) {
        $nameScore = 0;
        //If name < 4 score + '3'
        $chars_count = strlen($var);
        $consonants = preg_replace('![^BCDFGHJKLMNPQRSTVWXZ]!i','',$var);
        $consonant_count = strlen($consonants);
        $vowels = preg_replace('![^AEIOUY]!i','',$var);
        $vowel_count = strlen($vowels);
        //We're expecting first and last name.
        if ($chars_count < 4){
            $nameScore = $nameScore + 3;    
        }

        //if name > 4 and no spaces score + '4'
        if (($chars_count > 4)&& (!preg_match('![ ]!',$var))){
            $nameScore = $nameScore + 4;    
        }

        if (($chars_count > 4)&&(($consonant_count==0)||($vowel_count==0))){
            $nameScore = $nameScore + 5;            
        }

        //if name > 4 and vowel to consonant ratio < 1/8 score + '5'
        if (($consonant_count > 0) && ($vowel_count > 0) && ($chars_count > 4) && ($vowel_count/$consonant_count < 1/8)){
            $nameScore = $nameScore + 5;    
        }
        //Needs at least 1 letter.
        if (!preg_match('![A-Za-z]!',$var)){
            $nameScore = $nameScore + 10;           
        }

        return $nameScore;
    }

//added for testing
$var = $_GET['email'];
echo nameCheck($var);
?>

誰かがフラッシュしても、アテンプトでコピーしてスコアを修正できるようにします。通常、中国語または韓国語でいくつかの誤検知がありますが、ほとんどの場合、英語でフォームに記入する人は誰でも合格します. 「ウーシー」のような名前は存在します。

于 2013-03-28T03:13:49.530 に答える