2015-10-07 62 views
2

我正在尝试使用杜克匹配记录从一个CSV到另一个。第一个CSV和第二个都有ID,Model,Price,CompanyName,Review,Url列。我正在尝试与另一个csv匹配来查找重复记录。杜克重复数据删除引擎:完全相同的记录不匹配

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'软件包名称。你不应该使用你自己不拥有的域名。

无论如何,你找不到任何匹配的原因是这两个记录具有相同的ID。 Duke证实它不报告记录是否与自己匹配,所以匹配被过滤掉。如果您制作了csv文件的副本并将其用于组2,请更改ID,然后杜克发现重复。

这里发生了什么,当我尝试:

[[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