Openrefine: key collision-fingerprint clustering + diacritics

Я думаю, что есть ошибка (или очень удивительная особенность...) в том, как openrefine управляет диакритическими знаками в кластеризации "столкновение ключей":

ряд 1: школа ряд 2: школа школа

-> кластеризация -> 0 кластеров

та же проблема с

строка 1: школа строка 2: школа школа -> 0 кластер

Но этот случай работает хорошо:

ряд 1: школа ряд 2: школа и школа -> 1 кластер

1 ответ

Решение

Не слишком удивительно. При кластеризации отпечатков пальцев применяется только fingerprint() функции для каждой ячейки, а затем сравнивает их эквивалентность один за другим. Теперь вот результат fingerprint в трех случаях вы упоминаете:

1

row value               value.fingerprint()
1.  école               ecole
2.  école école ecole   ecole ecole

2

row value               value.fingerprint()
1.  école               ecole
2.  école école ecole   ecole ecole

3

row value               value.fingerprint()
1.  ecole               ecole
2.  école école école   ecole

Почему эта разница в третьем случае? Поскольку алгоритм отпечатка пальца фактически выполняет следующие операции, в строгом порядке.

1. удалить начальные и конечные пробелы

"école école école" -> "école école école"

2. изменить все символы в их строчное представление

"éCole écoLe école" -> "école école école"

3. удалить все знаки препинания и управляющие символы

"école-école, école" -> "école école école"

4. разбить строку на разделенные пробелами токены

"école école école" -> ["école", "école", "école"]

5. сортировать токены и удалять дубликаты

["école", "école", "école"] -> ["école"]

6. соедините токены вместе

["école"] -> "école"

7. нормализуйте расширенные западные символы к их представлению ASCII

"école" -> "ecole"

Можно задаться вопросом, не следует ли делать операцию 7 раньше. Но в вашем примере ошибка, если таковая имеется, может быть в 3-м случае. Строка "école" очень отличается от строки "ecole école école", по моему мнению, их не следует объединять. Ни одно из названий "Джон-Джон" не эквивалентно "Джону".

РЕДАКТИРОВАТЬ: Один из разработчиков согласен с вами.

Другие вопросы по тегам