2013-03-28 23 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

相關問題