1

我正在使用 Open Refine 来做一些我知道 Python 可以做的事情。我正在使用它将 csv 转换为 XML 元数据文档。我可以弄清楚其中的大部分内容,但让我感到困惑的一件事是这条 GREL 行:

{{forEach(cells["subjectTopicsLocal"].value.split('; '), v, '<subject authority="local"><topic>'+v.escape("xml")+'</topic></subject>')}}

这对我来说很漂亮。我的 Excel 电子表格中有一个“主题”字段。我的志愿者输入关键字,用“;”分隔。我不知道他们会想出多少个关键词,有时只有一个。该 GREL 行为创建的<subject authority="local"><topic></topic></subject>每个术语创建一个新术语,当然会将其滑入该字段。

我知道必须有一个 Python 表达式可以做到这一点。有人可以为此推荐最佳做法吗?我会很感激的!

4

2 回答 2

1

基本上,您想在 Python 中使用“拆分”将字符串从主题字段转换为 Python 列表,然后您可以遍历列表。

因此,假设您已经从 csv/excel 文档中的一行中读取了“主题”字段的内容并将其分配给字符串变量“主题”,您可以执行以下操作:

subjList = subj.split(";")
for subject in subjList:
  #do what you need to do to output 'subject' in an xml element here
于 2019-12-06T11:17:07.867 回答
0

此 Python 表达式等同于您的 GREL 表达式:

['<subject authority="local"><topic>'+escape(v)+'</topic></subject>') for v in split(value,'; ')]

它将创建一个包含您的主题的 XML 片段数组。它假定您已经创建或导入了适当的escape函数,例如

from xml.sax.saxutils import escape
于 2019-12-11T19:59:55.323 回答