Дедупликация в Duke: связывание записей не работает?

Я пытаюсь использовать Duke для сопоставления записей из одной базы данных в другую. Один БД имеет названия песен + писатели. Я пытаюсь сопоставить другую базу данных, чтобы найти дубликаты и соответствующие записи.

Я заставил герцога бежать, и я вижу, что некоторые записи совпадают. Но независимо от того, что я делаю, правильные ссылки найдены = 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

Нельзя писать в файл links.txt или находить правильные ссылки. Не уверен, что я здесь делаю не так. Любая помощь будет потрясающей.

1 ответ

Решение

На самом деле, он находит 8284 ссылки. --testfile предназначен для предоставления Duke файла, содержащего известные правильные ссылки, в основном тестовые данные. Что вы хотите --linkfile, который записывает ссылки, которые вы нашли в этом файле.

Я полагаю, мне следует добавить код, который предупреждает о пустом тестовом файле, поскольку это, скорее всего, указывает на ошибку пользователя.

Возможно, вам лучше задать этот вопрос в списке рассылки Duke, кстати.

Другие вопросы по тегам