2009-10-26 65 views
3

我們網站的用戶經常輸入大量垃圾作爲名稱和地址信息。例如,所有CAPS,全部小寫字母等。關於修復人名的建議,使其正確大寫

如果我們爲他們修復案例,看起來好多了,但任何人都可以提出一個很好的方法。一個簡單的方法就是將每個單詞的名稱大寫,但是在處理某些名稱時會失敗。這裏有幾個例子...

  • 鮑勃麥當勞
  • 莎拉·奧康納
  • MR PETE SMITH

,這裏是我想將它們轉換成

    什麼
  • Bob McDonald
  • Sarah O'Connor
  • Pete Smith先生

我使用PHP如果有幫助。

+0

在荷蘭語中,IJ被認爲是用於大寫字母的單個字母。像IJmuiden這樣的名稱不拼寫Ijmuiden ... ;-)這個解決方案是否應該知道這些類型的名稱?如果不是,則除了每個單詞的第一個字母以外,都應該小寫。 – 2009-10-26 14:52:28

回答

7

沒有正確的方法來做到這一點,或更具體地說,你選擇的每種方法都是錯誤的。

有時O'Connor通常會被它的主人拼寫成O'connor。或者,或者有人可能認爲它是奧康納,而實際上是奧康納,反之亦然。有時麥當勞是麥當勞。你可以合法地使用「bob smith」這個名字,所有的字母都是小寫字母。

我認爲只有修復我會做的是將所有上限更改爲第一個字母大寫。否則,就讓它一個人留下吧,因爲沒有辦法區分一個蹩腳的拼音和一個決定他們想要一個瘋狂的名字的人。

+0

我喜歡你的建議,檢查所有大寫,並在這種情況下做一些事情。 – 2009-10-26 16:07:53

9

讓它保持原樣。如果用戶不夠自信地正確寫出他們的名字,你爲什麼要關心?儘管如此,編寫一個子程序來後處理名稱,它將處理一些無處不在的情況。

  • 大寫不包括像「馮」
  • 查找特定的模式和自定義更新匹配的單詞非資本化的單詞的第一個字母(例如,利用第三個字母,如果這個詞與「MC」開頭)

由於問題的複雜性,我認爲在修正算法運行後,您將不得不求助於手動編輯名稱。用戶註冊後,名稱將被後處理,然後添加到某個審覈隊列中,您可以在該審覈隊列中對其進行檢查並根據需要進行更新,然後才能使用它,並可能打印在發票和包裹標籤上。當然,如果你確定你知道你在做什麼。

3

您可以使用PHP中的$name = ucwords(strtolower($name));讓你接近你想要的東西。

+1

這是我在想的方法 - 但其他關於正確性的評論讓我停止發佈所有內容。這可能會帶來90%的收益 - 至少對於美國的普通人羣來說。然後在查找表上碰撞可能會更多一點。也許只有正確的情況下,那些名字全部較低或全部較高 - 假設那些混合大小寫的名稱是正確的?只是一個想法。 – ChronoFish 2009-10-26 15:56:26

+0

我可能會做的是檢測名稱是全部小寫還是全部大寫。如果是這樣,那就這樣做。如果他們混合使用了案件,那麼就假定他們爲我做了工作,並保持不動。 – 2009-10-26 16:06:50

4

當然,還有像我這樣的人在他們的名字中間加上大寫字母。如果你試圖「糾正」它,你會侮辱我。就像'開發者藝術'一樣,如果人們不夠自信地正確地寫下他們的名字,那麼解決它就不是你的工作。