2015-10-07 7 views
2

Я пытаюсь использовать Duke для сопоставления записей с одного csv на другой. Первые csv и second оба имеют ID,Model,Price,CompanyName,Review,Url столбцов. Я пытаюсь сопоставить другой csv, чтобы найти дубликаты записей.Механизм дедупликации Duke: точно такая же запись не соответствует

package no.priv.garshol.duke; 

import no.priv.garshol.duke.matchers.PrintMatchListener; 

public class RunDuke { 

    public static void main(String[] argv) throws Exception { 
    Configuration config = 
     ConfigLoader 
      .load("/home/kishore/Duke-master/doc/example-data/presonalCare.xml"); 
    Processor proc = new Processor(config); 
    proc.addMatchListener(new PrintMatchListener(true, true, true, false, config.getProperties(), 
     true)); 
    proc.link(); 
    proc.close(); 
    } 

} 

Вот пример personalCare.xml:

<!-- language: xml --> 
<!-- For more information, see https://github.com/larsga/Duke/wiki/ Improvements 
    needed: - some area numbers have spaces in them - not stripping accents from 
    names --> 
<duke> 
    <schema> 
     <threshold>0.7</threshold> 
     <property type="id"> 
      <name>ID</name> 
     </property> 
     <property> 
      <name>Model</name> 
      <comparator>no.priv.garshol.duke.comparators.Levenshtein</comparator> 
      <low>0.4</low> 
      <high>0.8</high> 
     </property> 
     <property> 
      <name>Price</name> 
      <comparator>no.priv.garshol.duke.comparators.ExactComparator</comparator> 
      <low>0.04</low> 
      <high>0.73</high> 
     </property> 
     <property> 
      <name>CompanyName</name> 
      <comparator>no.priv.garshol.duke.comparators.Levenshtein</comparator> 
      <low>0.4</low> 
      <high>0.8</high> 
     </property> 
     <property> 
      <name>Review</name> 
      <comparator>no.priv.garshol.duke.comparators.Levenshtein</comparator> 
      <low>0.12</low> 
      <high>0.93</high> 
     </property> 
     <property> 
      <name>Url</name> 
      <comparator>no.priv.garshol.duke.comparators.Levenshtein</comparator> 
      <low>0.12</low> 
      <high>0.93</high> 
     </property> 
    </schema> 

    <database class="no.priv.garshol.duke.databases.InMemoryDatabase"> 
    </database> 

    <group> 
     <csv> 
      <param name="input-file" value="personal_care_11.csv" /> 
      <param name="header-line" value="false" /> 
      <column name="1" property="ID" /> 
      <column name="2" property="Model" cleaner="no.priv.garshol.duke.cleaners.LowerCaseNormalizeCleaner"/> 
      <column name="3" property="Price" /> 
      <column name="4" property="CompanyName" cleaner="no.priv.garshol.duke.cleaners.LowerCaseNormalizeCleaner"/> 
      <column name="5" property="Review" cleaner="no.priv.garshol.duke.cleaners.LowerCaseNormalizeCleaner"/> 
      <column name="6" property="Url" cleaner="no.priv.garshol.duke.cleaners.LowerCaseNormalizeCleaner"/> 
     </csv> 
    </group> 

    <group> 
     <csv> 
      <param name="input-file" value="personal_care_11.csv" /> 
      <param name="header-line" value="false" /> 
      <column name="1" property="ID" /> 
      <column name="2" property="Model" cleaner="no.priv.garshol.duke.cleaners.LowerCaseNormalizeCleaner"/> 
      <column name="3" property="Price" /> 
      <column name="4" property="CompanyName" cleaner="no.priv.garshol.duke.cleaners.LowerCaseNormalizeCleaner"/> 
      <column name="5" property="Review" cleaner="no.priv.garshol.duke.cleaners.LowerCaseNormalizeCleaner"/> 
      <column name="6" property="Url" cleaner="no.priv.garshol.duke.cleaners.LowerCaseNormalizeCleaner"/> 
     </csv> 
    </group> 


</duke> 

Приведенный выше код работает нормально, но это не соответствует точный пример записи

STHDRNFKAQ4AFYE8,Littmann 3M Classic II S.E Acoustic 
Stethoscope,6297,Littmann,,http://dl.flipkart.com/dl/littmann-3m-classic-ii-s-e-acoustic-stethoscope/p/itme3uhzbqxhzfda?pid=STHDRNFKAQFAFYE8&affid=3ba0de4902524e2b90e43b84b89ea0ef 

, который находится в обоих CSV файлах. Я также хочу знать работу с низким и высоким значением свойства, которое дается в файле .xml, как определить низкое и высокое значение для значения столбца.

ответ

2

Вы выполняете запись (два набора данных), а не дедупликацию (единый набор данных), поэтому выньте вызов .deduplicate().

Кроме того, не используйте имя пакета no.priv.garshol.duke. Вы никогда не должны использовать имена доменов, которыми вы не являетесь.

В любом случае причина, по которой вы не можете найти совпадений, состоит в том, что две записи имеют одинаковый идентификатор. Герцог проверяет, что он не сообщает, что записи соответствуют друг другу, поэтому матч отфильтровывается. Если вы сделаете копию файла csv и используете это для группы 2, внесите изменения в идентификатор, а затем Duke найдет дубликат.

Вот что происходит, когда я пытаюсь что:

[[email protected] tmp]$ java -cp ~/cvs-co/duke/duke-core/target/duke-core-1.3-SNAPSHOT.jar:. no.priv.garshol.duke.Duke --showmatches presonalCare.xml 

MATCH 0.9982630751840313 
ID: 'SHDRNFKAQ4AFYE8', Model: 'littmann 3m classic ii s.e acoustic stethoscope', Price: '6297', CompanyName: 'littmann', Url: 'http://dl.flipkart.com/dl/littmann-3m-classic-ii-s-e-acoustic-stethoscope/p/itme3uhzbqxhzfda?pid=sthdrnfkaqfafye8&affid=3ba0de4902524e2b90e43b84b89ea0ef', 
ID: 'STHDRNFKAQ4AFYE8', Model: 'littmann 3m classic ii s.e acoustic stethoscope', Price: '6297', CompanyName: 'littmann', Url: 'http://dl.flipkart.com/dl/littmann-3m-classic-ii-s-e-acoustic-stethoscope/p/itme3uhzbqxhzfda?pid=sthdrnfkaqfafye8&affid=3ba0de4902524e2b90e43b84b89ea0ef', 
+0

Спасибо за ответ. Я хочу знать, что означает значение низкой и высокой вероятности в свойствах для всех столбцов. Как я могу решить. Когда я даю высокий параметр как меньшее значение, равное 0,5, он дает более точный результат, чем 0,8. Я получаю это. пожалуйста помогите. –

+0

Низкая вероятность = вероятность, когда значения не совпадают. Высокий = вероятность, когда они совпадают. – larsga