Использование OpenRefine для создания таблицы сопоставления из двух других таблиц

У меня есть следующий вариант использования, для решения которого, похоже, подходит OpenRefine. В моей базе данных есть "грязная" таблица продуктов, которая выглядит следующим образом:

id  name
51  Product A
52  product-a
53  product B
54  productb
55  produtc
56  productc

У меня есть новая, "чистая" таблица продуктов, которая выглядит так:

id  name
1   Product A
2   Product B
3   Product C

Я хотел бы использовать кластеризацию OpenRefine для создания файла сопоставления, чтобы помочь мне сопоставить продукты из старой таблицы с новой таблицей:

id  name        old_id
1   Product A    51
1   Product A    52
2   Product B    53
2   Product B    54
3   Product C    55
3   Product C    56

Но я не могу заставить OpenRefine делать то, что я хочу. Любой совет, как этого добиться?


person blindsnowmobile    schedule 11.06.2019    source источник
comment
Как вы перешли от стола с грязными продуктами к столу с чистыми продуктами? Моя первоначальная реакция такова, что OpenRefine может это сделать, но кажется, что это повторение работы, которую вы уже проделали, если вы уже создали чистую таблицу?   -  person Owen Stephens    schedule 11.06.2019
comment
Новая таблица была создана из отдельного источника данных, а не из исходной таблицы. Между данными будет совпадение, но не 100%. Я хочу использовать нечеткое сопоставление из OpenRefine, чтобы сопоставить старые строки с новыми строками, используя имя продукта. Бывают случаи, когда старые продукты не будут сопоставляться ни с чем в новой таблице, и это нормально. Эти строки нужно будет либо вручную сопоставить с чем-то в новой таблице, включить в новую таблицу как отдельный продукт или полностью удалить. Я хочу свести к минимуму ручные усилия с этой очисткой. @OwenStephens   -  person blindsnowmobile    schedule 11.06.2019
comment
Я думаю, что ответ @Frog23 охватывает подход, который вам нужно принять, хотя я также оставил комментарий к ответу Thad-Guiry для альтернативы   -  person Owen Stephens    schedule 13.06.2019


Ответы (2)


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

  1. вы берете столбец «имя» из грязной таблицы и чистой таблицы и объединяете их. На этом этапе не беспокойтесь об идентификаторах.
  2. импортировать их в OpenRefine (например, как «названия продуктов» проекта)
  3. продублируйте столбец «name» (пока единственный столбец) и назовите новый «name_new».
  4. Сгруппируйте столбец «name_new» и замените все старые имена правильными новыми. На этом этапе могут потребоваться некоторые ручные настройки. Теперь ваш результат должен выглядеть так:

    name        name_new
    Product A   Product A
    product-a   Product A
    product B   Product B
    productb    Product B
    produtc     Product C
    productc    Product C
    Product A   Product A
    Product B   Product B
    Product C   Product C
    
  5. импортируйте грязную таблицу как «продукты» и чистую таблицу как «чистые продукты».
  6. # P3 #
    # P4 #
  7. переименуйте столбец "id" в "old_id"

  8. # P6 #
    # P7 #
    # P8 #

Надеюсь, это поможет.

person Frog23    schedule 12.06.2019
comment
Спасибо, это помогло! - person blindsnowmobile; 13.06.2019

Функция кластеризации ограничена одним столбцом, чтобы найти похожие строки в этом столбце.

OpenRefine еще не имеет функций схожести строк в 2 или более таблицах или проектах (нечеткие соединения) в том виде, в котором они представлены в вашем сценарии использования. Для этого вам придется использовать другие инструменты. Обычным инструментом, который, как я видел, люди используют и выражают удовлетворение нечетким объединением, является MS PowerBI (Desktop является бесплатным, но имеет ограничения на отношения и экспорт, но версия Pro стоит всего 10 долларов в месяц и может быть отменена в любое время), но если вам нужно что-то совершенно бесплатное то это делают несколько пакетов R, один из которых - https://www.rdocumentation.org/packages/fuzzyjoin/versions/0.1.4

В OpenRefine мы полностью хотим разрешить нечеткие соединения для проектов / наборов данных в будущем, и это в нашем списке проблем, но у нас просто не было средств для реализации этого вместе с множеством других функций, которые, как мы знаем, пользователи хотели бы видеть.

person Thad Guidry    schedule 12.06.2019
comment
Вариант нечеткого поиска по двум наборам данных с помощью OpenRefine заключается в использовании программного обеспечения CSV Reconcile okfnlabs.org/reconcile -csv, чтобы загрузить ваш «чистый» файл данных и попытаться выполнить согласование с этим файлом (используя встроенное средство согласования OpenRefine). - person Owen Stephens; 13.06.2019
comment
Спасибо за обновления. Мне удалось объединить данные в один файл. Я использовал подход Frog23, но также интересно выглядит согласование. - person blindsnowmobile; 13.06.2019