0

有没有办法告诉 uniques() 忽略大小写?

我有一个运行的 GREL

forEach(value.split(","),v,v.trim()).uniques().join(",")

这采用逗号分隔的单元格中的每个值,然后吐出该单元格中的唯一值。效果很好,但是如果我有一个包含 Paul, PAUL 的单元格,它将返回两者,而不仅仅是“Paul”。

是否可以将所有值暂时转换为大写进行比较,然后返回您拥有的唯一拼写?

4

2 回答 2

1

根据您的数据,您可能还需要通过进入记录模式并执行“拆分多值单元格”而不是长 GREL join() 表达式来解决问题......从而创建额外的记录行每个值。

|Col1                       |Split      |
|Paul, PAUL, Edward, edward |Paul       |
|                           |PAUL       |
|                           |Edward     |
|                           |edward     |

从那里您可以对拆分列进行操作,或者根据唯一性、其他 Grel 表达式等创建一个新列。您可以在 Col1 上执行 Fill Down,以便进一步的操作不会丢失他们的关键记录 'Paul, Paul, Edward ,爱德华”。

请记住,OpenRefine 具有出色的 GREL 操作,但很多功能来自记录模式、Facets 和 Row 操作……不仅仅是 Column 和 Cell 操作。所以不要把自己限制在长完整的 Grel 语法上。尝试使用 OpenRefine 的所有操作和模式来解决问题。

有关“拆分多值单元格”和其他操作的更多信息,请参阅我们的 wiki 部分:https ://github.com/OpenRefine/OpenRefine/wiki/Cell-Editing#splitting-multiple-values-within-cells-to-生产记录

于 2016-10-20T03:08:35.327 回答
1

检查我理解问题 - 例如,如果您从以下内容开始:

保罗,保罗,爱德华,爱德华

我是否正确地假设你想要结束:

保罗,爱德华

假设我已经理解了这一点,那么我认为我解决这个问题的方法是创建忽略大小写的唯一值,然后回顾原始值并提取与特定键匹配的第一个值。

类似于:使用“编辑列->基于此列添加列”和 GREL 转换将数据复制到一个名为“键”的新列中:

forEach(value.split(","),v,v.trim().toLowercase()).uniques().join(",")

现在你有:

| Col1                    | keys        |
|-------------------------|-------------|
| Paul,PAUL,Edward,edward | paul,edward |

您现在可以遍历键列中的值,并找到 Col1 中的第一个值,该值将使用相同的转换转换为该键:。要在“键”列上执行此操作,您可以使用转换:

forEach(value.split(","),v,filter(cells["Col1"].value.split(","),w,w.trim().toLowercase()==v)[0]).join(",")

那应该留给你

| Col1                    | keys        |
|-------------------------|-------------|
| Paul,PAUL,Edward,edward | Paul,Edward |

当然值得注意的是,如果您的原始数据的顺序不同,您将得到不同的最终值 - 例如,“PAUL,Paul,Edward,edward”最终会变成“PAUL,Edward”。可以做更多的工作来改善这一点,但会有限制。

于 2016-10-19T17:28:34.223 回答