2015-02-10 13 views
2

Я пытаюсь использовать Duke для сопоставления записей из одной базы данных в другую. Один db имеет названия песен + писатели. Я пытаюсь сопоставить другой db, чтобы найти дубликаты и соответствующие записи.Механизм дедупликации 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%, диафрагменное число 0,0

Запуск на пружине STS: аргументы программа = --progress --verbose --testfile=linked.txt --testdebug --showmatches duke.xml

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

ответ

2

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

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

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

+0

О, мужчина его ВАС !! Спасибо за обновление. – 1000Suns

+0

Я читал намного больше (нашел ваши презентации). В итоге я написал пользовательский прослушиватель, который сохраняет совпадения в памяти, прежде чем выводить его в файл CSV. Это сработало так же хорошо. Я буду присоединяться к этому списку рассылки. Если я могу спросить: у нас есть интегрированный интеграл, можно ли использовать solr в качестве источника данных и пропустить индексацию записей? Его было весело работать с герцогом btw :) – 1000Suns

+0

Э-э, я, я. :) Были некоторые работы по использованию ElasticSearch напрямую, но ни одного из Solr, если я правильно помню. Во всяком случае, это вполне возможно. Для этого есть проблема, поэтому вы можете это посмотреть. https://github.com/larsga/Duke/issues/132 – larsga

 Смежные вопросы

  • Нет связанных вопросов^_^