首页 > 解决方案 > 使用 OpenRefine 从其他两个表创建映射表

问题描述

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

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

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

id  name
1   Product A
2   Product B
3   Product C

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

id  name        old_id
1   Product A    51
1   Product A    52
2   Product B    53
2   Product B    54
3   Product C    55
3   Product C    56

但我不能完全让 OpenRefine 做我想做的事。关于如何实现这一目标的任何建议?

标签: openrefine

解决方案


正如已经指出的那样,没有直接的方法可以实现这一点,但是通过帮助支持表和交叉函数,您可以获得所需的结果:

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

    名称 name_new
    产品 A 产品 A
    产品-a 产品 A
    产品B 产品B
    产品b 产品B
    产品 产品 C
    产品c 产品C
    产品 A 产品 A
    产品B 产品B
    产品C 产品C
    
  5. 将脏表导入为“产品”,将干净表导入为“产品清洁”。
  6. 在项目“产品”中使用转换列“名称”

    value.cross("产品名称","name").cells["name_new"].value[0]

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

  8. 使用添加基于“名称”的新列

    value.cross("products clean","name").cells["id"].value[0]

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

我希望这有帮助。


推荐阅读