我正在根據名稱和位置字段實現從公司標準化數據庫提取的JSON對象與來自Twitter的非結構化數據之間的聯接。爲了澄清,這個連接是通過MapReduce完成的,所以除了手動實現連接條件之外別無它法。 顯而易見的實現是將這些字段與Java String.equals方法連接並進行比較。考慮這兩個JSONs,首先從標準化的數據提取和第二從Twitter:字符串確切匹配和潛在匹配
{"location":"Rio de Janeiro - Brasil","name":"Joao Paulo Forny "}
{"location":"RiodeJaneiro;Brasil","name":"JoaoPaulo-Forny!"}
下面的連接條件可以找到相同的名稱和包含在同一順序相同的字母位置之間的匹配由於使用的正則表達式來消除所有空格和其他字符而不是字母。
obj1.getJoinKey().toLowerCase().replaceAll("[^A-Za-z]", "")
.equals(ob2.getJoinKey().toLowerCase().replaceAll("[^A-Za-z]", ""))
由於Twitter的數據不被標準化,該字段可以包含任何信息或資料,甚至是不相關的特定字段信息僅供件,所以有這是不可能計算傷害的案件。但是,有些情況可能會發現潛在的匹配,例如,該地點可能只包含城市,該名稱可能不具有所有中間名或姓,也可能是相同的,但是不符合順序。
{"location":"Rio de Janeiro - Brasil","name":"Joao Paulo Forny de Melo"}
{"location":"Rio de Janeiro","name":"Joao Paulo Forny de Melo"}
{"location":"Rio de Janeiro - Brasil","name":"Joao Paulo Forny de Melo"}
{"location":"Rio de Janeiro - Brasil","name":"Joao Forny"}
{"location":"Rio de Janeiro - Brasil","name":"Joao Paulo Forny de Melo"}
{"location":"Brasil - Rio de Janeiro","name":"Joao Paulo Forny de Melo"}
問題是,什麼解決方案可以用來找到潛在的匹配基於上述三個條件?
你可能想看看像這樣的lucene的東西。 – Taylor
你總是可以計算出它們[Levenshtein距離](http://en.wikipedia.org/wiki/Levenshtein_distance),它是衡量兩個字符串之間「距離」的標準。 – Sinkingpoint