OpenRefine текстовое преобразование unique () без учета регистра

Есть ли способ указать uniques () игнорировать регистр?

У меня есть GREL, который работает как

forEach(value.split(","),v,v.trim()).uniques().join(",")

Он берет каждое значение в ячейке, разделенное запятыми, а затем выводит уникальное значение / значения в этой ячейке. Однако отлично работает, если у меня есть ячейка, содержащая Paul, PAUL, она вернет оба, а не просто «Paul».

Можно ли временно преобразовать все значения в верхний регистр для сравнения, а затем вернуть первое написание уникального значения?


person Paul M    schedule 19.10.2016    source источник
comment
Можете ли вы привести пример начального набора данных и того, что вы хотите получить в результате?   -  person Owen Stephens    schedule 19.10.2016


Ответы (2)


Проверяя, я понимаю проблему - например, если вы начинаете с:

Пол, ПОЛ, Эдвард, Эдвард

Правильно ли я предполагаю, что вы хотите получить:

Пол, Эдвард

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

Примерно так: скопируйте данные в новый столбец под названием «ключи», используя «Редактировать столбец-> Добавить столбец на основе этого столбца» с преобразованием GREL:

forEach(value.split(","),v,v.trim().toLowercase()).uniques().join(",")

Теперь у вас есть:

| Col1                    | keys        |
|-------------------------|-------------|
| Paul,PAUL,Edward,edward | paul,edward |

Теперь вы можете перебирать значения в столбце ключей и находить первое значение в столбце Col1, которое преобразуется в этот ключ с помощью того же преобразования: Для этого в ключевом столбце вы можете использовать преобразование:

forEach(value.split(","),v,filter(cells["Col1"].value.split(","),w,w.trim().toLowercase()==v)[0]).join(",")

Это должно оставить вас с

| Col1                    | keys        |
|-------------------------|-------------|
| Paul,PAUL,Edward,edward | Paul,Edward |

Конечно, стоит отметить, что если ваши исходные данные находятся в другом порядке, вы получите другое окончательное значение - например, «ПОЛ, Пол, Эдвард, Эдвард» в итоге превратилось бы в «ПОЛ, Эдвард». Можно проделать еще немного работы, чтобы улучшить это, но есть ограничения.

person Owen Stephens    schedule 19.10.2016

У вас также может возникнуть необходимость, в зависимости от ваших данных, решить проблему, перейдя в режим записей и выполнив «Разделение многозначных ячеек» вместо вашего длинного выражения GREL join () ... тем самым создав дополнительные строки записи для каждое значение.

|Col1                       |Split      |
|Paul, PAUL, Edward, edward |Paul       |
|                           |PAUL       |
|                           |Edward     |
|                           |edward     |

Оттуда вы можете работать со столбцом Split или создать новый столбец на основе уникальных методов, других выражений Grel и т.д. , Эдвард '.

Помните, что OpenRefine имеет отличные операции GREL, но большая часть возможностей обеспечивается за счет режима записи, операций фасетов и строк ... а не только операций с столбцами и ячейками. Так что не ограничивайте себя только длинным полным синтаксисом Grel. Попытайтесь разбить проблемы, используя все операции и режимы OpenRefine.

Для получения дополнительной информации о «Разделении многозначных ячеек» и других операциях см. Наш раздел вики: https://github.com/OpenRefine/OpenRefine/wiki/Cell-Editing#splitting-multiple-values-within-cells-to-produce-records

person Thad Guidry    schedule 20.10.2016
comment
Спасибо, что режим записи помог мне в другой проблеме. - person Paul M; 21.10.2016