由於names are really, really complicated將全名拆分爲姓氏和名字是無法解決的問題。因此,代表作者和其他書籍撰稿人的我的模型包括name
和filingName
字段,其中filingName
通常應該是「Last,First」(西方名稱)。啓發式分裂全名
但是,爲了方便用戶使用,我希望我的應用程序在用戶填寫常規名稱時對申請名稱進行合理猜測。當然,如果猜測錯誤,用戶可以編輯提交名稱,但如果我猜對了,我會爲他們節省一些時間。目前,我只是假設最後一個空格分隔的「字」的姓,並用逗號移動到前:
NSMutableArray * parts = [self.name componentsSeparatedByCharactersInSet:NSCharacterSet.whitespaceCharacterSet].mutableCopy;
if(parts.count < 2) {
return self.name;
}
NSString * lastName = parts.lastObject;
[parts removeLastObject];
return [NSString stringWithFormat:@"%@, %@", lastName, [parts componentsJoinedByString:@" "]];
我能立刻想到一個情況下,這將導致我誤入歧途的:後綴像「Jr」。但我相信還有很多其他人。是否有任何好的資源可以解釋常見的命名警告,或解決這個問題的代碼的好例子,我可以用它來改進我的啓發式?我在Mac上使用Objective-C(如果有一個框架的某個不起眼的角落可以幫助我),但是我願意學習用任何語言編寫的代碼。
這類問題具有beenaskedbefore,但大多數的答案可以關注裂開一個字符串的機制,或者退化爲「設計模型不同」。我正在設計不同的模型;我只是想讓計算機爲我們的大部分用戶完成工作。
正如我前面所說,這段代碼主要處理書籍的作者和其他貢獻者的名字。其中的一些具體影響包括:
- 應該只有一個名字
name
,因爲我支持將多個作者附加到書中。 - 大部分的名字都不會有標題,但是像「Dr.」可能會出現。理想情況下,這些將被丟棄,不被視爲名字的一部分。
- 姓名通常是人,但有時可能是組織。我非常願意冒險改組組織名稱以獲得更好的人員姓名處理。
- 我希望我會主要處理歐洲人的名字,雖然檢測到名字should not be difficult的拼寫正確。
- 該代碼不應該對用戶的區域設置特別敏感。
對我來說,將此工作留給用戶肯定更容易。不幸的是,這不是一次性用戶註冊過程或其他類似內容的一部分;這是用戶可能必須連續做五到十次的事情,而一個沉重的用戶可能會每天做三到四次。它可以真正使用便利。 – 2013-03-24 23:21:12
我明白了。相反呢?我的意思是,詢問提交的名稱,並推斷出名稱,這可能會更容易。我想你提到的那些大量用戶將不得不輸入他們中的任何一個...... – clapas 2013-03-25 18:13:06
有幾個原因。 1:雖然會有一些沉重的用戶,但也會有很多偶爾的用戶(每隔幾個月會有一本書),誰會覺得輸入名字更自然。 2:如果用戶不理解「提交名稱」的含義,即使自動填寫的名稱不正確,自動填充功能也會顯示它們。 3:文件名稱包含更多的結構信息,但名稱實際上包含更多的命名信息。例如,名字「馬丁路德金博士小」有文件名「King,Martin Luther,Jr。」 - 標題在翻譯中被刪除。 – 2013-03-26 09:37:40