-2

我有大约 30 万个非结构化数据,如下面的屏幕所示。我正在尝试使用 Google 优化或 OpenRefine 来解决这个问题。但是,我无法找到正确的方法来做到这一点。我是这个工具的新手。任何人的帮助将不胜感激。此外,此工具处理 300k 记录的速度很慢。如果我正在尝试一些东西,它需要花费大量时间来处理并给出输出。

或者请建议任何其他开源工具和技术来做到这一点?

在此处输入图像描述

4

1 回答 1

0

正如欧文在评论中所说,您的问题可能过于广泛,无法得到可接受的答案。我们可以为您提供一个一般程序来遵循。

在 Open Refine 中,您需要根据杂乱的列创建一个列,并应用转换来删除不需要的字符。您必须使用正则表达式。但为此,有必要能够识别模式。我不清楚为什么“Nat.secu ST”的“ST”。很重要,但不是“Massy Intertech US”中的“美国”。甚至“Plowk 36”中的“36”(谷歌不知道这个词,所以我不确定是组织名称)。

然而,根据你的十五行,我们似乎区分了一些清晰的模式。例如,看起来您必须删除包含 # 的字符串末尾的标记(不带空格的字符组)。为此,Open Refine 中的 GREL 公式可能如下所示:

value.trim().replace(/\b\w+#\w+\b$/,'')

如果您不清楚,这是一个截屏视频。

在此处输入图像描述

但有时公司名称可能包含 #,在这种情况下,您将需要创建更复杂的规则。例如,仅当字符串包含两个以上单词时才删除标记。

if(value.split(' ').length() > 2, value.replace(/\b\w+#\w+\b$/, ''), value)

对于您会发现的其他模式,依此类推(例如,末尾包含超过 4 个数字和一个 - 在它们之间的任何数字序列)

如有疑问,请随时查看Open Refine 文档

于 2018-03-29T09:37:55.113 回答