2012-07-16 29 views
0

我需要對一組消費者數據運行聚類算法,但我不確定如何處理基於文本的字段(完美示例是字母數字後綴代碼,如SE1 8XR)。對基於文本的信息(即實現字符串內核)進行分類

顯然我需要使用的是一個字符串內核,我理解其中的基本思想,但是不能很好地實現。

理想情況下,我希望新的數字向量編碼的想法,即兩個不同的郵政編碼是越遠的數據點彼此,但不知道如何做到這一點,我一直無法找到一個有用的教程,指南或教科書!

另外我在Python中這樣做,以防某些庫任何人知道這可能是有用的。

回答

2

重新郵政編碼

你不能比較郵政編碼爲字符串。 `AL1 1AA'是聖奧爾本斯,'AB1 1AA'是阿伯丁。他們非常接近編輯距離,但CR6 7DX更接近聖奧爾本斯:

你最好的辦法可能是抓住一些查找表(我知道你可以從他們買皇家郵件)也許從http://www.ordnancesurvey.co.uk/oswebsite/products/os-opendata.html這需要一個郵政編碼,或者至少一個部門'AL1 1'(甚至可能是地區'AL1'),然後將其映射到經緯度,然後用於存儲數據。

其他字符串

一種可能的選擇是使用difflib.SequenceMatcher返回一個百分比分數的兩個字符串的相似程度對方(也有很多其他的算法在那裏:谷歌「遺傳字符串算法」 ,「模糊字符串匹配」,「字符串相似度算法」等)。將所有(可能)彼此相似的字符串分組,然後分配這些組,然後在該組上進行聚類。

根據您的要求和數據的複雜程度,您也可能會發現metaphone &雙倍變音電話(可能還有ntlk)有用。

+0

啊,哎呀,我以爲他們是! 我該怎麼做一個不同的例子,編輯距離的重要性呢? (郵政編碼只是很多領域的一個例子) – iRoygbiv 2012-07-16 14:44:35

+0

@ user671629我已更新我的答案 – 2012-07-16 16:50:07

+0

感謝您的幫助 – iRoygbiv 2012-07-17 08:11:43