Стандартизація записів


Я вовком би вигриз бюрократизм!
Володимир Маяковський


Розглянемо в цій статті проблему стандартизації записів. Стандартизація, насамперед, потрібна при імпорті мільйонів записів, накопичених за десятиліття. Дані, що мають різну кодування сторінок з різних автоматизованих систем, збираються в єдину базу інформаційної системи. В такому випадку, звернення до функцій читання рядків за ascii, типу QRchar себе не виправдовує, оскільки формат Unicode від запису до запису відрізняється. До того ж кирилиця у словах часто буває перемішана з цифрами і латиницею (наприклад, коли замість 'ч' пишеться '4'). При цьому пряма циклічна заміна цифр і латиниці на кирилицю в рядку неможлива, так як цифри з латиницею зустрічаються і в позначеннях.

Користувацькі довідники дозволяють відслідковувати та фіксувати закономірності неправильного написання тих чи інших фрагментів, вказуючи, що їх змінювати в загальному циклі. За довідником закінчень можна розпізнати частина мови, а з частини мови визначити алгоритм пересування слова в рядку для приведення до шаблонного увазі.



З подібною проблемою мені часто доводиться стикатися при систематизації тисяч записів, які я отримую після сканування.



Якщо не позбутися від недопрацьованого формату записів, неповноцінна сортування сповільнить роботу в кілька разів.

Якщо дані повинні залишатися в недоторканому вигляді, пропоную використовувати утиліту, яка міняє тільки відображення записів.



В проміжні таблиці на базі MS Access, як варіант, із застосуванням технології ADO поміщаємо одні і ті ж дані двох видів. Записи переміщуємо з отриманого в роботу звіту ApEx в резервну проміжну попередньо очищену таблицю ADOTableReserve при виконанні запиту або циклічним перебором, який описаний нижче. Резервуємо в одній таблиці ADOTableReserve дані в незайманому вигляді. Визначаємо кількість рядків i_RecordCount і стовпців i_ColumnCount, а так само і номер стовпця i_String, який містить підлягають стандартизації запису звіту ApEx:

openDialog := TOpenDialog.Create(self);
openDialog.Filter := '*.xls;*.xlsx|*.xls;*.xlsx';
if openDialog.Execute then
begin
ApEx := CreateOleObject ('Excel.Application');
try
ApEx.Workbooks.Open(openDialog.FileName,0, 'true');
ApEx.DisplayAlerts := false;
openDialog.Free;
except
showmessage ('Файл для обробки даних не визначено!');
end;
ApEx.Workbooks.Close;
ApEx.Application.quit;
ApEx := Unassigned;
openDialog.Free;
end;
for i := 1 to i_ RecordCount do
begin
begin ADOTableReserve.Append;
for c:=1 to do i_ColumnCount
begin
ADOTableReserve.FieldByName('a'+inttostr(ColumnCount)).AsString:=
Ap.ActiveSheet.Cells[i, ColumnCount];
end;
ADOTableReserve.Post;
end;


NB: FieldByName передає інформацію про номер стовпця в звіті MS Excel.
В іншій таблиці ADOTableDebug наводимо ці записи до шаблонного написання. Дані з ADOTableReserve переміщуються в попередньо очищену налагоджувальну таблицю ADOTableDebug за тим же принципом, але вже з зверненням до функції Pattern():

ADOTableDebug.FieldByName('a'+inttostr(ColumnCount)).AsString:= Trim(AnsiUpperCase(ADOTableReserve.FieldByName('a'+inttostr(ColumnCount)).AsString));

if ColumnCount = i_String then Pattern ();


NB: функція Pattern () звертається до ряду користувальницьких довідників і призводить запису до шаблонного увазі.
Якщо ситуація вимагає порівнювати записи з їх шаблонним написанням, то утиліта забезпечується відповідної проміжної таблиці перелік шаблонів в утиліті, що зберігає ці шаблони:



В іншому випадку визначаємо іменники за довідником закінчень і ставимо їх вперед. Міняємо в іменниках цифри і латиницю на кирилицю. Інші слова в записах наводимо до верхнього регістру. Відображаємо в екранній формі обидві таблиці. Здійснюємо можливість сортування записів у гріді натиснувши на заголовок стовпця. Використовуємо функцію індексного пошуку активної записи в одній таблиці для швидкого переходу до запису в інший. Аналізуємо дані, формуємо для подальшої роботи з даними звіт формату MS Excel, усвідомлюємо роботу з записами шаблонного виду. Звіт доповнюється коментарями в робочих стовпцях. При необхідності внести коментарі в базу Інформаційної системи за описаним вище алгоритмом в таблиці ADOTableDebug знаходимо рядки, які відповідають записам звіту формату MS Excel. Ідентифікатори рядків проміжних таблиць ADOTableReserve і ADOTableDebug збігаються. Оновлюємо таблицю ADOTableReserve коментарями з таблиці ADOTableDebug. Повернувшись до початкового вигляду записів, формуємо звіт формату MS Excel для імпорту коментарів в базу Інформаційної системи. Якщо доповнений коментарями в робочих стовпцях звіт формату MS Excel може містити ідентифікатори рядків Інформаційної Системи, то записи до початкового вигляду не наводимо. Тоді для імпорту коментарів в базу Інформаційної системи передаємо звіт з шаблонним написанням слів.



Коли вдається досягти погодження на заміну всіх записів в єдиній для всіх базі даних, яка оновлюється в режимі клієнт-сервер одночасно, тоді і починається найцікавіше – колективна доопрацювання користувальницьких довідників, які використовуються функцією Pattern (), що дозволяє стандартизувати запису.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.