openrefine - 使用 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 做我想做的事。关于如何实现这一目标的任何建议?
解决方案
正如已经指出的那样,没有直接的方法可以实现这一点,但是通过帮助支持表和交叉函数,您可以获得所需的结果:
- 你从脏表和干净表中取出列“名称”,并将它们组合起来。此时不要担心 id。
- 将它们导入 OpenRefine(例如作为项目“产品名称”)
- 复制列“name”(迄今为止唯一的列)并将新列命名为“name_new”。
将列“name_new”聚类并用正确的新名称替换所有旧名称。此时可能需要进行一些手动调整。您的结果现在应该如下所示:
名称 name_new 产品 A 产品 A 产品-a 产品 A 产品B 产品B 产品b 产品B 产品 产品 C 产品c 产品C 产品 A 产品 A 产品B 产品B 产品C 产品C
- 将脏表导入为“产品”,将干净表导入为“产品清洁”。
在项目“产品”中使用转换列“名称”
value.cross("产品名称","name").cells["name_new"].value[0]
将列“id”重命名为“old_id”
使用添加基于“名称”的新列
value.cross("products clean","name").cells["id"].value[0]
并将其保存为“id”。表“产品”现在具有所需的结构。
我希望这有帮助。
推荐阅读
- javascript - 为什么我的对象显示为未定义,但它存在!反应原生
- java - testng.xml 正在跳过测试?
- visual-studio - 无法解析引用(Xamarin 构建 iOS)
- javascript - 将两个 gulp 任务合并到一个 JS 文件中
- javascript - 如何仅选择第一个“if”以在javascript中设置标记可见为真
- sql - Impala - 在 Impala SQL 中 Stuff 和 'For Xml Path' 如何工作
- typescript - 初始化器类型 ArrayBufferLike 不可分配给变量类型 ArrayBuffer
- html - CSS \\ HTML \\ 表格内的中心按钮
- javascript - 事件发生时获取 HTML5 画布图形 (Arc) 的尺寸
- java - 在组合框 Java 中复制文本