2013-03-28 43 views
0

最接近的现有问题,我发现是thisthisPHP判断字符串作为一个人的名字或其他文本

我想编写一个接受一个字符串,然后根据什么标准可以是一个函数或类编入它将返回它是一个真正的人名的可能性。目前我预计它会严重偏向英文或欧洲名称或其他名称的英文音译。 (例如,“bob”,“bob smith”和“smith”都应该返回1.0,“sfgoisxdzzg”应该返回类似.001甚至.0000001的值)

有没有人知道这是否已经完成/存在做了什么? (即使在另一种语言) 我的第一个想法是,我不得不做某种机器学习脚本。我的问题是我对任何机器学习理论的完全无知。

所以,我的问题的第二部分是这样的:机器学习是解决这个问题的可行方案吗?如果是这样,我应该从哪些资源开始学习如何去做?如果不是,你能指点我的方向吗?

+0

第一个引用问题的接受答案是你应该采取的答案。这取决于你自己/管理部门监控数据库并对无效名称发出不良/惩罚/惩罚 – 2013-03-28 03:04:43

+0

出于兴趣,你为什么要这样做? – Jim 2013-03-28 03:08:21

+0

您可以查看[Levenshtein](http://php.net/manual/en/function.levenshtein.php)以及从那里链接的其他类似功能。就像BCS碗的选择一样,只是通过一系列不同的测试来折腾他们,看看最终结果如何。但是,您可能需要一些原型。 – 2013-03-28 03:08:38

回答

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

即使有人冲我有它复制我的尝试,所以我可以修复我的得分。中文或韩文通常会有一些误报,但大部分情况下,任何人填写英文表格都会通过。像“无锡”这样的名字确实存在。

+0

这与我目前处理潜在垃圾邮件的概念类似。我会花一些时间寻找其他答案,但我可能会接受这个答案。 – TecBrat 2013-03-28 12:31:39

+0

自从阅读你的答案后,我一直在研究“贝叶斯”这个词,我非常感兴趣。这对我来说可能是一个全新的领域,可以指导一些学习。谢谢! [垃圾邮件过滤](http://en.wikipedia.org/wiki/Bayesian_spam_filtering)我已经这样做了,不知道这个词,但现在我知道要搜索哪些内容才能找到更多资源。 – TecBrat 2013-03-28 15:25:43

+0

作为一个方面的说明,我还发现这个[Gibberish Detector](https://github.com/buggedcom/Gibberish-Detector-PHP)可以帮我实现。它使用了一本小说作为培训文本,我怀疑一个人可以使用名单来代替。 – TecBrat 2013-03-29 02:52:45

相关问题