Какими способами можно сопоставить и нормализовать связанные данные? - PullRequest
0 голосов
/ 10 июля 2009

Допустим, вам нужно объединить случайные связанные данные, предоставленные вам, в более сжатые категории.

Пример. Вам даны следующие данные. ПРИМЕЧАНИЕ - может быть любое количество других связанных столбцовых данных:

 Customer      Product                Category
==========    =========    =================================
Customer A    Product A                 Cat 1
 CustomerA    Product B               Category 1
  Cust-A      Product C    Totally Lame & Unrelated Grouping

Задача - объединить и нормализовать вышесказанное в чистые, заранее определенные группировки:

CustomerA
  Category1
    ProductA
    ProductB
    ProductC

Пожалуйста, не беспокойтесь о том, как сохранятся готовые данные. Но лучше сконцентрируйтесь на том, как вы будете упорствовать и будете управлять правилами группировки.

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

Так, каковы доступные варианты? Оставайтесь технологически независимыми:

XML

Конфиг файлов?

Файл настроек (скомпилирован или нет)?

Ini File?

код

и т.д.

Список плюсов и минусов для каждого ответа. И хотя это действительно большой опыт, это реальная проблема. Поэтому предположим, что ваш клиент / работодатель поручил вам это.

Ответы [ 3 ]

0 голосов
/ 10 июля 2009

Это похоже на упражнение по очистке данных, совершенство практически невозможно. Вопросы:

1). Вы можете заранее указать категории или вывести их из данных?

2). Какие правила мы можем использовать, чтобы принять эквивалентность?

«Кошка 1» - это то же самое, что и «Категория 1»? а "категория первая"?

это

"Кот 1." als "Кот 1"? как насчет "Cat 1?" ? и "Кот 12"?

Просто получить хороший набор правил в испытании.

3). Как бы вы захватили эти правила? Код или конфиг? Если конфиг, как бы вы выразили это? Вы в конечном итоге просто пишете новый специализированный язык программирования?

0 голосов
/ 10 июля 2009
  1. Словарь сопоставления для каждого значения. 'Cat1' => 'Category1', 'Category 2' => 'Category2'. Это легко хранить и не имеет непредвиденных последствий. Недостатком является то, что создание всех этих отображений вручную является реальной работой.
  2. Серия регулярных выражений. Таким образом, вы можете захватить почти все правила, используя относительно мало работы. Недостатком является то, что регулярные выражения «пропускают» относительно легко, и порядок оценки имеет значение (т. Е. Когда значения соответствуют более чем одному «правилу».

А как их сохранить? Я не могу думать о более неинтересном вопросе. Вы просто используете то, что проще всего на предпочитаемом вами языке программирования.

0 голосов
/ 10 июля 2009

Это похоже на упражнение по очистке данных, совершенство практически невозможно. Вопросы:

1). Вы можете заранее указать категории или вывести их из данных?

2). Какие правила мы можем использовать, чтобы принять эквивалентность?

«Кошка 1» - это то же самое, что и «Категория 1»? а "категория первая"?

это

"Кот 1." als "Кот 1"? как насчет "Cat 1?" ? и "Кот 12"?

Просто получить хороший набор правил в испытании.

2). Как бы вы захватили эти правила? Код или конфиг? Если конфиг, как бы вы выразили это? Вы в конечном итоге просто пишете новый специализированный язык программирования?

...