PHP将字符串判断为人名或其他文本

时间:2013-03-28 02:59:01

标签: php text-analysis

我发现的最近的问题是thisthis

我想编写一个接受字符串的函数或类,然后根据可编程的任何条件将返回它是真实人名的概率。目前我预计它会严重偏向英语或欧洲名称或其他名称的英语音译。 (例如,“bob”,“bob smith”和“smith”都应返回1.0,而“sfgoisxdzzg”应返回类似.001甚至.0000001的内容)

有人知道这是否已经完成/正在进行中? (即使用另一种语言) 我的第一个想法是,我必须做一些机器学习脚本。我的问题是我完全不了解任何机器学习理论。

所以,我的问题的第二部分是:机器学习是解决这个问题的可行选择吗?如果是这样,我应该从哪些资源开始学习如何做到这一点?如果没有,你能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:2)

我使用这种贝叶斯方法在联系提交和报价表单请求上取得了相当大的成功。该表单使用评分并以各种语言处理来自世界各地的请求。如果他们仅在各个领域进行了3或4次测试,那么我将其标记为垃圾邮件尝试。显然,像“#12; 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);
?>

即使有人冲了过来,我也会把它复制给我,这样我可以修复我的得分。中文或韩文通常会有一些误报,但大多数情况下,任何填写英文表格的人都会通过。名字像&#34;吴曦&#34;确实存在。