Как создать UUID в Openrefine на основе хеша MD5 значений - PullRequest
1 голос
/ 24 сентября 2019

Я пытаюсь создать UUID на основе хеша md5 значения ячейки в OpenRefine (используя Jython), но у меня возникают проблемы с передачей значения в функцию.
Я могу создать UUID с помощью выражения:

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

но я хочу использовать md5-хэш значения ячейки, поэтому я попытался следовать формуле

uuid.uuid3 (пространство имен, имя)

Однако я не могу передать значение функции.Попытка:

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

получает следующую ошибку:

Ошибка: обратная связь (последний вызов был последним): файл "", строка 3, в temp_448166737 Файл "/ Applications / OpenRefine 3.2b.app/Contents/Resources/webapp/extensions/jython/module/MOD-INF/lib/jython-standalone-2.7.1.jar/Lib/uuid.py", строка 528,в uuid3 UnicodeDecodeError: кодек «ascii» не может декодировать байт 0xa7 в позиции 1: порядковый номер не в диапазоне (128)

Без использования значения ячейки выражение работает достаточно хорошо.В примере

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

используется строка «пример» и вычисляется UUID c5e5f349-28ef-3f5a-98d6-0b32ee4d1743 для каждой ячейки.Однако это не желаемый результат.

Есть идеи, как передать в Jython значение ячейки, присутствующей в OpenRefine в выражении?

1 Ответ

1 голос
/ 24 сентября 2019

Вам просто нужно закодировать строки Unicode в value с помощью .encode('utf-8'), как объяснено здесь :

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