【问题标题】:Is it possible to add column based on keywords in an existing column?是否可以根据现有列中的关键字添加列?
【发布时间】:2014-10-15 16:00:09
【问题描述】:

一般来说,这就是我要做的事情:解析电子表格的一个单元格中的字符串,然后如果在解析的单元格中找到某些关键字,则将关键字添加到该行中的另一个单元格。

我正在使用 OpenRefine(技术上是 Google Refine 2.5)尝试使用“基于此列添加列”功能来执行此操作,但我还没有在新列中实际显示任何内容。

这是我正在使用的 GREL 表达式的当前迭代:

if (contains(cells["dates and codes"].value,"beef"), cells["protein"].value +=" beef", "")

它抛出以下错误:

偏移 77 处的解析错误:缺少数字、字符串、标识符、正则表达式或带括号的表达式

我是这个软件和 GREL 的新手,但我的搜索还没有出现这种字符串函数。 (我想我现在对如何引用特定单元格有了更好的了解,但我想这也可能是问题所在。)

A.这可能吗?和
B. 有没有比编写一堆 if(contains()) 语句更有效的方法?

【问题讨论】:

  • 或者,有没有办法根据手动文本过滤器将关键字连接到新列中的文本上?即,搜索“牛肉”,然后将“牛肉”连接到这些行的列中?到目前为止,我的努力导致仅连接第二列中已有数据的行,而不是该文本过滤器中的行。

标签: regex string openrefine


【解决方案1】:

您的 GREL 表达式是有道理的,看起来您在偏移 77 处有一个额外的等号。

if (contains(cells["dates and codes"].value,"beef"), cells["protein"].value +" beef", "")

在任何情况下,您都需要定义您的包含逻辑,以便您可以将所有内容包装在超长的 GREL 表达式中。或者,您可以单独执行每个 if(contains()) 。为了获得一些时间,我将执行以下操作:

  1. 写一个表达式
  2. 将其导出到记事本
  3. 使用搜索和替换功能更新它
  4. 将新表达式重新应用于您的项目。

您可以在this blog post 中找到有关此过程的更多详细信息。

【讨论】:

  • 感谢您的帮助!对不起,如果这是一个愚蠢的问题,但这是我的第一个 Refine 项目。 “定义我的包含逻辑”是什么意思?如果我的代码说明了我的想法,那我已经做到了,对吧?调用带有所有参数的函数?我的代码仍然无法正常工作(它要么复制整个字符串,要么为空),我正在尝试找出是否还有其他我遗漏的内容。
猜你喜欢
  • 2021-04-19
  • 2023-01-23
  • 1970-01-01
  • 2018-07-08
  • 1970-01-01
  • 2019-09-29
  • 1970-01-01
  • 1970-01-01
  • 2019-08-20
相关资源
最近更新 更多