名稱匹配-編輯距離
背景:
此次專案其中一個任務為公司名稱匹配,因此需要用到編輯距離。名稱匹配包括中英文,所以針對中英文有不同的計算方法:首先觀察中英文名稱特徵,國內公司一般以XX(省份|市|區|縣)XX(公司標誌名稱)XX(公司性質:科技|技術發展)有限公司|股份有限公司|有限責任公司|分公司,對應的英文也是如此eg,beijing XX technology co.,ltd.
ratio:一般用於長字元匹配
jaro_winker:用於短字元匹配,會給第一個字元相同的資料賦予較高的值
實施:
中文部分:
1.用正則表示式去除有限公司|股份有限公司|有限責任公司|分公司(re.sub(r'有限公司|股份有限公司|有限責任公司|分公司','',string))同時也可以建立地名詞典去除前面地點,防止有的公司省略地點名,定義函式get_sub()實現此模組
2.爬取企業資訊曾用名輔助匹配
condition[i==j,get_sub(i)==get_sub(j),ratio(get_sub(i),get_sub(j))>0.85]
此處採坑:由於查詢字典資料較大,用any()條件判斷會計算所有的condition才會執行將匹配到的結果新增進字典,故需要定義一個函式,只要滿足一個條件即跳轉,按照計算量的大小寫入condition中進行判斷(最後完成後才知道用雜湊表匹配更快)
英文部分:
由於中國公司的英文名相同字元較多eg.beijing XX technology coltd 這種模式下可以是很多家公司,所以在匹配全字相等後(忽略特殊符號,忽略大小寫,簡寫egcompany limited -co.,ltd croporation-crop incroporationed--INC)我想了一個方法就是以空格切分,除去相同單詞計算不同字元的編輯距離,這樣可以找到因時態單複數影響匹配不到的記錄