使用OpenRefine从其他两个表创建映射表

时间:2019-06-11 07:57:32

标签: openrefine

我有以下用例,OpenRefine似乎是一个很好的解决方案。我的数据库中有一个现有的“脏”产品表,如下所示:

$posts = Post::myPaginate(10);

我有一个新的“干净”产品表,如下所示:

id  name
51  Product A
52  product-a
53  product B
54  productb
55  produtc
56  productc

我想使用OpenRefine的集群来生成映射文件,以帮助我将产品从旧表映射到新表:

id  name
1   Product A
2   Product B
3   Product C

但是我不能完全让OpenRefine做我想要的事情。有关如何实现此目标的任何建议?

2 个答案:

答案 0 :(得分:2)

正如已经指出的那样,没有直接的方法可以实现此目的,但是借助帮助支持表和cross函数,您可以获得所需的结果:

  1. 您从脏表和干净表中获取“名称”列,并将其合并。现在不必担心ID。
  2. 将它们导入OpenRefine(例如,作为项目“产品名称”)
  3. 复制“名称”列(到目前为止唯一的列),并将新的名称命名为“ name_new”。
  4. 聚集“名称_新”列,并用正确的新名称替换所有旧名称。此时可能需要进行一些手动调整。 现在,您的结果应如下所示:

    name        name_new
    Product A   Product A
    product-a   Product A
    product B   Product B
    productb    Product B
    produtc     Product C
    productc    Product C
    Product A   Product A
    Product B   Product B
    Product C   Product C
    
  5. 将脏表导入为“产品”,将清洁表导入为“产品清洁”。
  6. 在项目“产品”中使用来转换“名称”列

      

    value.cross(“产品名称”,“名称”).cells [“ name_new”]。value [0]

  7. 将列“ id”重命名为“ old_id”

  8. 使用

    根据“名称”添加新列
      

    value.cross(“产品清理”,“名称”).cells [“ id”]。value [0]

    ,并将其另存为“ id”。现在,“产品”表具有所需的结构。

我希望这会有所帮助。

答案 1 :(得分:0)

集群功能仅限于一列,以在该列中查找相似的字符串。

OpenRefine尚未以用例表示的方式在2个或多个表或项目(模糊连接)中具有字符串相似性功能。您将不得不为此使用其他工具。我见过人们使用的一种通用工具,并且对Fuzzy Joining表示满意,它是MS PowerBI(台式机是免费的,但是对关系和导出有限制,但是Pro版本每月仅10美元,并且可以随时取消),但是如果您想要完全免费的东西那么一些R软件包可以做到这一点,其中一个是https://www.rdocumentation.org/packages/fuzzyjoin/versions/0.1.4

在OpenRefine中,我们完全希望将来允许跨项目/数据集进行模糊联接,并且它已列入我们的问题清单中,但是我们只是没有资金来实现此功能以及我们知道用户想要的大量其他功能看。