使用多值字段中的选定子字符串创建新列

Create New Column using selected substring(s) from multi-value field

我有一个相当大的(800 行)OpenRefine 数据集。一个单元格包含多个不同的值,但具有一致的结构(参见下面的示例),数据以逗号分隔,类似于 json 数组。我想创建一个新的多值列,它只包含来自特定类别(例如 Creator 或 Subject)的元素。在下面的示例中,我想创建一个名为 Item Creator 的新列,其中将仅包含 Dana M. Ashley 和 John Smith,这两个是在文本中找到的。到目前为止,我已经尝试了表达式 forEach(value.split(","), v, v.contains("Creator:")) 并得到了一个数组,该数组可以识别包含 Creator 的段,但我还不明白如何将该字符串文本提取到新列中。将不胜感激。

Publisher: American Federation of Teachers, Creator: Dana M. Ashley, Creator: John Smith, Subject: Prosocial behavior, Subject: Program development, Subject: Behavior problems, Subject: Classroom techniques, Subject: Student behavior, Subject: School culture, Subject: Educational environment, Subject: Positive Behavior Supports, Resource Type: Text, Language: English, Audience: Educator, Format: pdf

要将此值放入新列中,请使用当前列(包含组合数据)中的下拉菜单并选择 "Edit Column -> Add column based on this column"

如果您将 GREL 公式中的 'forEach' 表达式替换为 'filter' 表达式,您将获得此处的创建者列表(在数组中)。要将这些存储在一个单元格中,您可以将数组连接成一个字符串:

filter(value.split(","), v, v.contains("Creator:")).join("|")

这应该会为您提供包含创建者列表的新专栏 - 需要进行更多整理以删除 "Creator: " 位以仅获取名称列表