2012-10-20 59 views
4

我提出了一個棘手的問題,我不知道如何處理。所以,我制定了含有包含兩個對象字典一個的plist:檢查兩個NSStrings是否相似

  • 國名
  • 的插頭尺寸的國家

中只有210個國家/事實雖然。

而且,我已經能夠搜索很多很多國家的名單,其中可能有事實與否。但這裏是我的問題,我使用的是名爲Geonames的Web服務,用戶可以使用搜索欄顯示控制器來搜索國家,而這些與插件大小配對的plist國家名稱實際上來自Wikipedia文章。

現在,以Geonames命名的國家以及來自維基百科的plist可能會被命名爲稍有不同,也許會有額外的空間,額外的短劃線和額外的字母。這就是爲什麼我想看看geoname國家字符串是否與plist中的字符串非常相似。

因此,這不會是isEqualToString:,因爲如果它確切,compare:方法可以工作嗎?

我該如何解決這個問題?這裏有一個例子:

Geoname返回(不是一個真正的國家只是一個例子):

  • 亭鎮

但是plist中可能會返回:

  • Yitting

所以有1個額外的't',但還有其他的circ umstances。我希望將這些進行精確比較,或者至少類似,因此我可以將它們視爲匹配。

是否有任何教程,資源,項目等,你可以指向我?

謝謝!再見!

+1

你要找的是[近似字符串匹配](http://en.wikipedia.org/wiki/Approximate_string_matching)又名。模糊搜索。 – DrummerB

回答

5

Soundex算法是在這樣的情況下非常有用。

我在github上發現了一個sample implementation

+0

感謝生病檢查了這一點,並得到回覆 – MCKapur

+0

這太棒了!然而,有沒有辦法讓它更加激烈,它的作用......例如它表明美國與英國類似......但我希望它更準確,甚至更相似......生病了看代碼,但你知道如何? – MCKapur

+1

Soundex非常簡單,只能看到前幾個字母。如果你願意,你可以讓它看起來更多的文字。還可以看看上面評論中提到的[近似字符串匹配](http://en.wikipedia.org/wiki/Approximate_string_matching)鏈接。有很多不同的算法可以嘗試。 – rmaddy

2

您需要實現一個近似匹配字符串的算法。其中一種最流行的算法是Levenshtein distance,其中幾種算法是Edit distance。距離的計算方法是將字符串A轉換爲字符串B所需的編輯操作次數 - 插入,刪除或更改字符計數爲一次編輯操作。弦越近,它們之間的編輯距離越小。您可以計算成對編輯距離,並找到最小的一個來識別匹配。

2

您可能會發現this post about auto update/complete有用:

我已經測試了UITextView的工作以及在堅持在UIViewController類UITextViewDelegate協議,並會產生類似於什麼,你會在消息應用程序中找到結果。我還沒有檢查UITextFieldUITextFieldDelegate是否也可以。

Autocomplete/Autocorrect

+0

我懷疑.....兩百個國家...... – MCKapur

+0

感謝生病檢查了這一點,並得到回覆 – MCKapur