OpenRefine 自定义文本分面
OpenRefine custom text faceting
我有一列姓名,例如:
- 夸利亚,皮埃特罗·保罗
- Bernard,来自 Clairvaux、Saint 或
- .E., Calvin F.
- Swingle、M Abate、Agostino、Assereto
- 阿巴蒂,安东尼奥
- 10-NA)\u, Ferraro, Giuseppe, ed, Biblioteca comunale ariostea。小姐(埃斯特里
我想用 openrefine 创建一个自定义文本分面,用一个逗号标记为 "true" 名称,所有其他逗号标记为 "false",这样我就可以使用最后一个 (".E ., Calvin F。”这不是问题,我稍后会处理)。
我正在尝试使用 "Custom text facet" 和这个表达式:
if(value.match(/([^,]+),([^,]+)/), "true", "false")
但是结果都是假的。哪里错了?
我会使用先行断言来检查是否只有 1 个“,”可以从行首到行尾找到。
^(?=[^\,]+,[^\,]+$).*
https://regex101.com/r/iG4hX6/2
您可以使用 'split' 代替使用 'match' 将字符串拆分为一个数组,使用逗号作为拆分字符。如果您测量结果数组的长度,它将为您提供字符串中逗号的数量(即逗号数量 = length-1)。
因此您的自定义文本分面表达式变为:
value.split(",").length()==2
这会给你 true/false
如果您想根据出现的逗号数分解数据,您可以省略“==2”以获得仅给出结果数组长度的分面。
您使用的表达方式:
if(value.match(/([^,]+),([^,]+)/), "true", "false")
的计算结果始终为 false,因为 'match' 函数的输出要么是一个数组,要么是 null。当由 'if' 计算时,数组和 'null' 都不计算为真。
您可以将匹配函数包装在 'isNonBlank' 或类似函数中以获得布尔值 true/false,这将导致 'if' 函数按您的意愿工作。但是,一旦得到布尔值 true/false 结果,'if' 就变得多余了,因为它的唯一功能是将布尔值 true/false 转换为字符串 "true" 或 "false" -不会对自定义文本方面的值函数产生任何影响。
所以:
isNonBlank(value.match(/([^,]+),([^,]+)/))
应该使用 match
给你想要的结果
我有一列姓名,例如:
- 夸利亚,皮埃特罗·保罗
- Bernard,来自 Clairvaux、Saint 或
- .E., Calvin F.
- Swingle、M Abate、Agostino、Assereto
- 阿巴蒂,安东尼奥
- 10-NA)\u, Ferraro, Giuseppe, ed, Biblioteca comunale ariostea。小姐(埃斯特里
我想用 openrefine 创建一个自定义文本分面,用一个逗号标记为 "true" 名称,所有其他逗号标记为 "false",这样我就可以使用最后一个 (".E ., Calvin F。”这不是问题,我稍后会处理)。
我正在尝试使用 "Custom text facet" 和这个表达式:
if(value.match(/([^,]+),([^,]+)/), "true", "false")
但是结果都是假的。哪里错了?
我会使用先行断言来检查是否只有 1 个“,”可以从行首到行尾找到。
^(?=[^\,]+,[^\,]+$).*
https://regex101.com/r/iG4hX6/2
您可以使用 'split' 代替使用 'match' 将字符串拆分为一个数组,使用逗号作为拆分字符。如果您测量结果数组的长度,它将为您提供字符串中逗号的数量(即逗号数量 = length-1)。
因此您的自定义文本分面表达式变为:
value.split(",").length()==2
这会给你 true/false
如果您想根据出现的逗号数分解数据,您可以省略“==2”以获得仅给出结果数组长度的分面。
您使用的表达方式:
if(value.match(/([^,]+),([^,]+)/), "true", "false")
的计算结果始终为 false,因为 'match' 函数的输出要么是一个数组,要么是 null。当由 'if' 计算时,数组和 'null' 都不计算为真。
您可以将匹配函数包装在 'isNonBlank' 或类似函数中以获得布尔值 true/false,这将导致 'if' 函数按您的意愿工作。但是,一旦得到布尔值 true/false 结果,'if' 就变得多余了,因为它的唯一功能是将布尔值 true/false 转换为字符串 "true" 或 "false" -不会对自定义文本方面的值函数产生任何影响。
所以:
isNonBlank(value.match(/([^,]+),([^,]+)/))
应该使用 match
给你想要的结果