【问题标题】:Duke deduplication engine : exact same record not matched杜克重复数据删除引擎:完全相同的记录不匹配
【发布时间】:2016-01-04 15:14:57
【问题描述】:

我正在尝试使用 Duke 将记录从一个 csv 匹配到另一个。第一个 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文件中给出的低属性值和高属性值的工作,如何确定列值的低值和高值。

【问题讨论】:

    标签: java algorithm duplicates fuzzy-logic duke


    【解决方案1】:

    您正在进行记录链接(两个数据集)而不是重复数据删除(单个数据集),因此请取出 .deduplicate() 调用。

    另外,请不要使用“no.priv.garshol.duke”包名。切勿使用不属于您自己的域名。

    无论如何,您找不到任何匹配项的原因是这两条记录具有相同的 ID。 Duke 验证它没有将记录报告为与自身匹配,因此匹配被过滤掉了。如果您复制 csv 文件并将其用于第 2 组,然后更改 ID,Duke 会找到副本。

    当我尝试这样做时会发生以下情况:

    [lars.garshol@laptop 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.5 这样的较小值时,它给出的结果比 0.8 更准确。我得到这个。请帮帮我。
    • 低概率 = 值不匹配时的概率。高 = 匹配时的概率。
    猜你喜欢
    • 2015-04-11
    • 2018-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-01
    • 2019-07-19
    • 2013-04-23
    • 2021-01-26
    相关资源
    最近更新 更多