记录链接:与杜克一起玩
最近,我在記錄鏈接方面變得非常有趣,并遇到了Duke項目,該項目提供了一些工具來幫助解決此問題。 我以為可以嘗試一下。
進行記錄鏈接時的典型問題是,我們有兩個來自不同數據集的記錄,它們代表同一實體,但是沒有可用于將它們合并在一起的公共鍵。 因此,我們需要提出一種啟發方法,使我們能夠這樣做。
杜克大學(Duke)有一些實例表明了它的實際作用,我決定與聯系國一道去。 在這里,我們有來自Dbpedia和Mondial數據庫的國家,我們希望將它們鏈接在一起。
我們需要做的第一件事是構建項目:
export JAVA_HOME=`/usr/libexec/java_home` mvn clean package -DskipTests在撰寫本文時,這將使zip失敗,其中包含我們需要的所有內容,位于duke-dist / target / 。 讓我們打開包裝:
unzip duke-dist/target/duke-dist-1.3-SNAPSHOT-bin.zip接下來,我們需要下載數據文件和Duke配置文件:
wget https://raw.githubusercontent.com/larsga/Duke/master/doc/example-data/countries-dbpedia.csv wget https://raw.githubusercontent.com/larsga/Duke/master/doc/example-data/countries.xml wget https://raw.githubusercontent.com/larsga/Duke/master/doc/example-data/countries-mondial.csv wget https://raw.githubusercontent.com/larsga/Duke/master/doc/example-data/countries-test.txt現在我們準備好嘗試了:
java -cp "duke-dist-1.3-SNAPSHOT/lib/*" no.priv.garshol.duke.Duke --testfile=countries-test.txt --testdebug --showmatches countries.xml...NO MATCH FOR: ID: '7706', NAME: 'guatemala', AREA: '108890', CAPITAL: 'guatemala city',MATCH 0.9825124555160142 ID: '10052', NAME: 'pitcairn islands', AREA: '47', CAPITAL: 'adamstown', ID: 'http://dbpedia.org/resource/Pitcairn_Islands', NAME: 'pitcairn islands', AREA: '47', CAPITAL: 'adamstown',Correct links found: 200 / 218 (91.7%) Wrong links found: 0 / 24 (0.0%) Unknown links found: 0 Percent of links correct 100.0%, wrong 0.0%, unknown 0.0% Records with no link: 18 Precision 100.0%, recall 91.74311926605505%, f-number 0.9569377990430622我們可以查看countries.xml ,看看如何計算記錄之間的相似度:
<schema><threshold>0.7</threshold> ...<property><name>NAME</name><comparator>no.priv.garshol.duke.comparators.Levenshtein</comparator><low>0.09</low><high>0.93</high></property><property><name>AREA</name><comparator>no.priv.garshol.duke.comparators.NumericComparator</comparator><low>0.04</low><high>0.73</high></property><property><name>CAPITAL</name><comparator>no.priv.garshol.duke.comparators.Levenshtein</comparator><low>0.12</low><high>0.61</high></property></schema>因此,我們通過計算首都和國家的Levenshtein距離(即將一個單詞轉換為另一個單詞所需的最小單字符編輯次數)來計算出首府城市和國家/地區的相似性
如果其中一個數據集的拼寫有誤或有差異,這將非常有效。 但是,我很好奇,如果該國有兩個完全不同的名稱,例如科特迪瓦有時被稱為象牙海岸,那會發生什么。 讓我們嘗試在以下文件之一中更改國家/地區名稱:
"19147","Cote dIvoire","Yamoussoukro","322460"java -cp "duke-dist-1.3-SNAPSHOT/lib/*" no.priv.garshol.duke.Duke --testfile=countries-test.txt --testdebug --showmatches countries.xmlNO MATCH FOR: ID: '19147', NAME: 'ivory coast', AREA: '322460', CAPITAL: 'yamoussoukro',我還通過曼聯對托特納姆熱刺的BBC和ESPN比賽報告來進行了嘗試-BBC按姓氏引用球員,而ESPN有其全名。
當我使用Levenshtein比較器將全名與姓氏進行比較時,沒有您所期望的匹配。 我必須將ESPN名稱分解為名字和姓氏才能使鏈接正常工作。
同樣,當我將球隊名稱更改為“曼聯”而不是“曼聯”和“熱刺”而不是“托特納姆熱刺”時,兩者也不起作用。
我想我可能需要編寫一個特定于域的比較器,但是我也很好奇是否可以提出一些訓練示例,然后訓練一個模型來檢測什么使兩條記錄相似。 它的確定性較差,但可能更健壯。
翻譯自: https://www.javacodegeeks.com/2015/08/record-linkage-playing-around-with-duke.html
總結
以上是生活随笔為你收集整理的记录链接:与杜克一起玩的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 设计师如何选适合自己的显示器电脑显示器如
- 下一篇: 家中没安装网线家里没有网线如何安路由器
