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", по моему мнению, их не следует объединять. Ни одно из названий "Джон-Джон" не эквивалентно "Джону".
РЕДАКТИРОВАТЬ: Один из разработчиков согласен с вами.