如何根据值的 MD5 哈希在 Openrefine 中创建 UUID

How to create UUID in Openrefine based on the MD5 hash of the values

我正在尝试基于 OpenRefine 中单元格值的 md5 散列(使用 Jython)创建 UUID,但我在将值传递给函数时遇到问题。
我可以使用以下表达式创建 UUID:

import uuid;
return str(uuid.uuid4());

但我想使用单元格值的 md5 散列,所以我尝试遵循公式

uuid.uuid3(namespace, name)

但是,我无法将值传递给函数。尝试次数:

import uuid;
return str(uuid.uuid3(uuid.NAMESPACE_DNS, value));

收到以下错误:

Error: Traceback (most recent call last): File "", line 3, in temp_448166737 File "/Applications/OpenRefine 3.2b.app/Contents/Resources/webapp/extensions/jython/module/MOD-INF/lib/jython-standalone-2.7.1.jar/Lib/uuid.py", line 528, in uuid3 UnicodeDecodeError: 'ascii' codec can't decode byte 0xa7 in position 1: ordinal not in range(128)

在不使用单元格值的情况下,表达式效果很好。范例

    import uuid;
    return str(uuid.uuid3(uuid.NAMESPACE_DNS, 'example'));

使用字符串 "example" 并计算每个单元格的 UUID c5e5f349-28ef-3f5a-98d6-0b32ee4d1743。然而,这不是想要的结果。

关于如何将表达式中 OpenRefine 中单元格的值传递给 Jython 的任何想法?

您只需将 value 中的 unicode 字符串编码为 .encode('utf-8'),如 here:

所述
import uuid
return str(uuid.uuid3(uuid.NAMESPACE_DNS, value.encode('utf-8')))