Duke重复数据删除引擎:链接记录不起作用?

时间:2015-02-10 23:40:02

标签: java xml fuzzy-logic record-linkage duke

我正在尝试使用Duke来匹配从一个数据库到另一个数据库的记录。一个db有歌曲标题+作家。我正在尝试匹配另一个数据库以查找重复项和相应的记录。

我已经让公爵跑了,我可以看到一些记录得到匹配。但无论我做什么,纠正链接发现= 0%总是我不能直接链接文件。

这就是我目前所做的:

<duke>
<schema>
    <threshold>0.79</threshold>
    <maybe-threshold>0.70</maybe-threshold>
    <path>test</path>

    <property type="id">
        <name>PublishingID</name>
    </property>

    <property type="id">
        <name>AmgID</name>
    </property>

    <property>
        <name>NAME</name> 
        <comparator>no.priv.garshol.duke.comparators.JaroWinkler</comparator>
        <low>0.12</low>
        <high>0.61</high>
    </property>
    <property>
        <name>TITLE</name> 
        <comparator>no.priv.garshol.duke.comparators.Levenshtein</comparator>
        <low>0.09</low>
        <high>0.93</high>
    </property>
</schema>

<group>
    <jdbc>
        <param name="driver-class" value="com.mysql.jdbc.Driver"/>
        <param name="connection-string" value="jdbc:mysql://127.0.0.1"/>
        <param name="user-name" value="root"/>
        <param name="password" value="root"/>
        <param name="query" value="
            SELECT pSongs.song_id, pSongs.songtitle, pSongs.publisher_id, pWriters.first_name AS writer_first_name, pWriters.last_name AS writer_last_name 
            FROM    devel_matching.publisher_songs AS pSongs
            INNER JOIN devel_matching.publisher_writers as pWriters ON pWriters.publisher_id = pSongs.publisher_id AND pWriters.song_id = pSongs.song_id
            WHERE pSongs.writers LIKE '%LENNON, JOHN%'
            LIMIT 20000;"/>
        <column name="song_id" property="PublishingID"/>
        <column name="songtitle" property="TITLE" cleaner="no.priv.garshol.duke.cleaners.LowerCaseNormalizeCleaner"/>
        <column name="writer_first_name" property="NAME" cleaner = "no.priv.garshol.duke.cleaners.LowerCaseNormalizeCleaner"/>
    </jdbc>
</group>

<group>
    <jdbc>
        <param name="driver-class" value="com.mysql.jdbc.Driver"/>
        <param name="connection-string" value="jdbc:mysql://127.0.0.1"/>
        <param name="user-name" value="root"/>
        <param name="password" value="root"/>
        <param name="query" value="
            SELECT amgSong.id, amgSong.track, SUBSTRING_INDEX(SUBSTRING_INDEX(amgSong.composer, '/', numbers.n), '/', -1) composer
            FROM 
                devel_matching.numbers INNER JOIN devel_matching.track as amgSong
                ON CHAR_LENGTH(amgSong.composer) - CHAR_LENGTH(REPLACE(amgSong.composer, '/', '')) >= numbers.n - 1
            WHERE amgSong.composer like '%lennon%'
            LIMIT 5000;"/>
        <column name="id" property = "AmgID"/>
        <column name="track" property="TITLE" cleaner="no.priv.garshol.duke.cleaners.LowerCaseNormalizeCleaner"/>
        <column name="composer" property="NAME" cleaner = "no.priv.garshol.duke.cleaners.LowerCaseNormalizeCleaner"/>
    </jdbc>
</group>

输出:

  • 总记录:5000
  • 总匹配数:8284
  • 总不匹配:1587
  • 找到正确的链接:0/0(0.0%)
  • 找到了错误的链接:0/0(0.0%)
  • 发现未知链接:8284
  • 链接百分比正确0.0%,错误0.0%,未知100.0%
  • 精确度0.0%,召回NaN%,f值0.0

在Spring STS上运行: 程序参数= --progress --verbose --testfile=linked.txt --testdebug --showmatches duke.xml

它不写入linked.txt或找到任何正确的链接。不知道我在这里做错了什么。任何帮助都会很棒。

1 个答案:

答案 0 :(得分:2)

实际上,它正在寻找8284个链接。 --testfile用于向Duke提供包含已知正确链接的文件,基本上是测试数据。你想要的是--linkfile,它将你找到的链接写入该文件。

我想我应该添加警告空测试文件的代码,因为这很可能表示用户错误。

你可能最好在杜克邮件列表上问这个问题,顺便说一句。