我有一個相當小的結構化記錄坐落在數據庫中的語料庫。給定一條記錄中包含的一小部分信息,通過一個Web表單提交(與表格模式的結構相同)(我們稱之爲測試記錄),我需要快速繪製一份記錄最有可能與測試記錄匹配,並提供關於搜索條件與記錄匹配程度的信心估計。此搜索的主要目的是發現是否有人試圖輸入與語料庫中的記錄重複的記錄。有一個合理的機會,測試記錄將是一個愚蠢的,並有一個合理的機會,測試記錄不會是一個騙局。結構化數據的模糊匹配
記錄大約12000字節寬,記錄總數約爲150,000。表格模式中有110列,95%的搜索將位於最常見搜索列的前5%。
這些數據就像名字,地址,電話號碼和其他行業特定的數字。在語料庫和測試記錄中,它都是手動輸入的,並且在一個單獨的字段中是半結構化的。你可能會在第一時間說「用手來加重列數並匹配它們中的單詞標記」,但這並不容易。我也這麼認爲:如果我得到一個電話號碼,我認爲這將表明一個完美的匹配。問題在於,表單中沒有單個字段的標記頻率不會按數量級變化。電話號碼可能在語料庫中出現100次,或在語料庫中出現1次。其他領域也是如此。這使得在現場級別上的權重不切實際。我需要更細緻的方法來獲得體面的匹配。
我最初的計劃是創建散列哈希,最高級別是字段名。然後,我將從語料庫中爲給定字段選擇所有信息,嘗試清理其中包含的數據,並標記處理過的數據,在第二級對令牌進行散列處理,使用令牌作爲鍵和頻率作爲值。
我將使用頻率計數作爲權重:參考語料庫中令牌的頻率越高,如果在測試記錄中找到該令牌,則附加到該令牌的權重越小。
我的第一個問題是房間裏的統計員:我怎麼會把頻率當做體重?在n,記錄數,f(t),記號t出現在語料庫中的頻率,記錄是原始記錄而不是重複記錄的概率,以及概率p是否存在精確的數學關係測試記錄實際上是記錄x給定的測試,並且x在同一個字段中包含相同的t?跨多個字段的多個令牌匹配關係如何?
既然我真的懷疑存在,有沒有什麼能讓我接近,但比一個完全武斷的黑客充滿魔力因素更好?
除了這個,有沒有人有辦法做到這一點?
我尤其熱衷於不涉及維護數據庫中另一個表(如令牌頻率查找表)的其他建議。
感謝您的想法和更多的研究的鏈接。我可能最終計算編輯距離,或者不是,我無法確定。但是我認爲我會將記號匹配記爲1/f(t)*字段權重,並且在計算編輯距離之前查看距離我有多近。 – masonk 2010-03-12 20:29:53