【问题标题】:OpenRefine beginners question converting text documentOpenRefine初学者问题转换文本文档
【发布时间】:2020-07-21 00:33:45
【问题描述】:

在荷兰国家摄影博物馆,我们遇到了一个我们自己无法解决的小进口问题。

该列表是来自藏书者的一种数据库,其中包含书籍信息,是在我的藏书者无法使用数据库程序的时代制作的。它有近7000本书在列表中。它将被打印以作为打印输出到图书市场,并决定这本书是否已经为收藏家所拥有。对于人类来说,它的格式是很清楚的,但是由于它的不一致,我们很难将它转换为表格(然后我们可以将其导入库数据库)。

-笑脸标志是新纪录的开始, 黑色标志说,是的,我有 白色标志说,不,还没有(想法是用笔可以在印刷品上着色) 徽标当然可以更改为我们以后可以过滤的任何字母组合。

第一个字段是标题,(有时)在第一列的第二行和/或更多行中继续

第一行右边是出版年份

有些字段通常前面有一个字段名:

  • 国际标准书号
  • Trefwood(是关键字)
  • 使用。 (是出版商)
  • Tekst(是作者)
  • 红色。 (是编辑)

-然后我们有参与摄影师的名字,这使得格式相当混乱。通常摄影师在第二列和第三列。它可以是从一位摄影师到最多 30 个左右的名字,并且它们的格式与书中使用的一致(因此有时使用全名,有时仅使用字母)。
但是,
我们经常在第一列也有摄影师。然后它们位于标题(或 Tekst 字段内容)和 ISBN 之间。

幸运的是,收集器使用了 [. ] 作为分隔符。您将如何在 OpenRefine 中进行操作?最好我想首先拆分记录并将它们组合在一起,然后开始为每个内容制作列,前面有一个字段名。把第二列和第三列放在最后的很多字段中,称为摄影师1,直到摄影师XX。然后手动清理第一列的烂摊子。这是要走的路吗?并且在这里有更多经验的人,请您解释一下我们的工作方式,让我们先手。

【问题讨论】:

  • 您好,欢迎来到 StackOverflow;你能发布一个简短的数据样本吗?我认为如果不启动 Open Refine 并加载一些数据,没有人能够在他/她的脑海中解决这样的问题。 ;)
  • 对不起,我试过了,但不知道怎么做。我确实附上了一张图片,但知道这还不够。抱歉,我对此很陌生。
  • 您可以尝试将您的示例放在 Google 电子表格之类的东西上,然后通过编辑您的问题来添加链接。
  • 谢谢您,Ettore Rizza,我已尝试将示例添加到 Google 文档中。不幸的是,我还没有把它做成电子表格,excel文件的格式是一场噩梦。最好的!

标签: text openrefine


【解决方案1】:

您可能是 OpenRefine 的新手,但您的问题非常难,需要对该工具有深入的了解。 :)

在我看来,除了大量使用正则表达式之外,无法提取您想要的信息。

让您了解如何进行:

1° 将您的文本文件导入为“基于行的文本文件”,以便内容位于单个列中。

2° 在这一列中,通过对该字符使用文本过滤器来识别以 ☻ 开头的行。从过滤的列中,使用“编辑列,基于此列添加列”创建一个新列。命名此新列记录并删除文本过滤器。 将新列移到开头。

结果应该是这样的:

现在将“编辑单元格,加入多值单元格”应用到第 1 列,使用空格作为分隔符,以便得到:

3° 然后您可以开始从您的两列中提取信息。

  • 从新的“记录”列中,您可以在“基于此列添加列”窗口中使用此 GREL 公式提取日期:

    value.find(/\d+[\.\]]?$/)[0].replace(/\D/, '')

  • 您可以从主列 1 中提取“Trefwood”:

    value.find(/Trefwoord:.+?\./)[0].split(":")[1]

  • ISBN 等也是如此。

  • 标题将更难提取,因为有必要将适合一行的标题和继续下一行的标题分开。这将需要更复杂的 GREL 公式。

  • 提取摄影师姓名有几种可能的策略。

  • 继续清洁,直到您觉得质量正确,知道它可能不会 100% 完美。

【讨论】:

  • 哇,Ettore Rizza,我知道这很复杂,但你帮了我们很多。非常感谢!我会尽量配合你的解释,并随时通知你。我们没有必要用 OpenRefine 做所有事情,但这将使手工编辑的工作量变得更加可行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多