Algoritmo, intelligenza artificiale o suggerimenti di agenti intelligenti per l'importazione di dati non formattati e variabili da tipi di documenti diversi

4

Grazie per la ricerca!

Sfondo

Mi è stato assegnato il compito di scrivere un programma per normalizzare e importare dati da varie fonti in un database comune.

Per semplicità, diciamo che il programma è per un sistema di librerie pubbliche e che vogliono mantenere un database di tutti i libri attualmente prestati dalle loro varie filiali. Supponiamo inoltre che i rami non siano collegati a una rete o database comune (sciocco, lo so, ma per favore portami con me).

L'attività consiste nell'accettare i dati inviati dai vari responsabili di filiale e quindi automatizzare il processo di normalizzazione di tali dati e di memorizzarli nel database comune.

Formati di dati non elaborati variabili

I dati grezzi possono essere inviati sotto forma di un file MS Excel, un .csv, un file delimitato da tabulazioni, un file di testo semplice, forse anche solo una semplice email, un campo delimitato file, ecc.

Contenuti dati vagamente correlati

Il contenuto dei file di dati non elaborati generalmente contiene questi campi:

  1. ID libro
  2. Titolo libro
  3. Autore
  4. È selezionato?
  5. Giorni scaduti
  6. ISBN
  7. Data di scadenza

. . .e così via. Il problema è che alcuni dei file di dati inviati avranno questi campi nelle intestazioni di colonna e altri no (quindi sarà necessario dedurre dai dati quale sia il campo).

Inoltre, i nomi dei campi non saranno sempre coerenti. Un ramo di libreria può chiamare il campo booleano per verificare se un libro è stato ritirato "OnLoan", mentre un altro ramo lo chiama "IsCheckedOut".

repository di dati comuni

Tutti questi dati verranno ingeriti in un database comune con dati normalizzati che sono stati ripuliti durante il processo di acquisizione.

Quindi, si spera, abbiamo qualcosa di simile nel DB finale:

  1. BranchId
  2. BookID
  3. Titolo
  4. CheckedOut
  5. ISBN
  6. DueDate
  7. DaysOverdue

. . .e così via.

Automazione del processo di importazione

Supponiamo che ci siano migliaia di filiali e che ognuna di esse debba rilasciare questo rapporto al quartier generale della biblioteca una volta al mese.

Ovviamente, il mio cliente può assumere un gruppo di persone con accesso ai dati per svolgere questo lavoro (infatti, è così che viene fatto oggi). La richiesta da parte loro, tuttavia, è quella di automatizzare quanto più possibile per ridurre i costi di immissione dei dati.

Quindi ecco il mio piano, per favore suggerire o criticare via:

  1. Standardizza la procedura di invio dei file. Questa operazione verrà gestita creando una pagina Web con una finestra di dialogo per il caricamento dei file, FATTO!
  2. Determina il tipo di file. Userò C # (non che la lingua sia importante) e ha un modo abbastanza semplice per ottenere il tipo di file, ma a volte otterrò semplicemente un .txt che risulta essere delimitato da tabulazioni o pipe, quindi ho bisogno di un algoritmo per rilevare questo . Sto pensando di utilizzare un Bayes Classifier o Rete neurale artificiale per questo.
  3. Tentativo di analizzare i dati nella memoria. Ora ho sperato di stabilire se ho un file excel, un separatore di tabulazioni, un csv, ecc. Farò funzionare il file attraverso il parser corretto per farlo entrare memoria, ma ora è necessario determinare se il file ha intestazioni o se posso dedurre cosa dovrebbero essere le intestazioni in base al valore . Per questo spero di usare ancora un sistema di classificazione Bayes e magari di calcolare una distanza di Levenshtein dal valore agli elementi in una matrice di nomi di intestazione noti / standardizzati. Ma per quanto riguarda l'inferenza di intestazione dai dati? Come posso identificare una colonna come contenente le date di scadenza e una come contenente i numeri ISBN?
  4. Spigola, pulisci e invia i valori in ogni colonna. Se sono abbastanza fortunato da essere arrivato a questo punto (so quali sono le intestazioni), allora ho bisogno di scorrere i valori in ogni colonna e pulire / normalizzali. Ad esempio, alcune filiali di biblioteche possono inserire un valore ISBN come "ISBN12-345-67-89" mentre un altro ramo inserisce "123456789". Ho bisogno di cogliere questa differenza e normalizzarla. È un caso solo per un semplice sistema esperto o if. . .then ? C'è un modo migliore?
  5. Invia dati normalizzati al database. Questo passaggio non è così banale come sembra, perché alcune filiali di biblioteche potrebbero riportare il titolo di un libro come "Algorithms for Dummies" mentre un altro lo segnala come "Algorithms for Dummies, 1st Edition" . Supponiamo per un secondo che non abbia un codice ISBN per legare insieme i due libri (anche se sono uguali), quale metodo potrebbe essere adatto per dedurre che questi libri sono uguali e assegnare loro una chiave primaria comune int la tabella Books relativa ?

Molte, molte grazie per i tuoi suggerimenti !!!

    
posta Matt Cashatt 24.05.2013 - 01:56
fonte

1 risposta

1

L'elaborazione regolare in batch o in blocco di fonti di dati divergenti è una pratica comprovata che segue una strategia comune.

Per l'esempio fornito, sembra esserci un strong intento di effettuare molte analisi dinamiche dei dati in corso che probabilmente non sono necessarie come attività in corso per questo tipo di processo e aggiungeranno una grande quantità di complessità non necessaria a il sistema di esempio.

Tuttavia, alcune delle tecniche menzionate potrebbero essere utili per la scoperta, l'analisi e la definizione del formato iniziale in cui un layout non può essere fornito da ciascuna fonte in modo tempestivo o accurato. Ogni submission avrà caratteristiche che lo renderanno unico sia da altre submission che da altri submitter. Quelle caratteristiche sono marcatori. Durante il trasferimento o l'upload dell'invio, possiamo acquisire alcune di queste informazioni. Il resto delle informazioni utilizzate come indicatori verrà da particolari punti di ispezione del contenuto della submission.

Una volta determinato un formato (e convalidato periodicamente), dovremo solo individuare i marcatori necessari nelle successive presentazioni per determinare quale formato seguirà l'invio. Dopo aver individuato il formato che segue l'invio, possiamo scegliere un adattatore appropriato da applicare durante il batch del lavoro.

Per quanto riguarda i punti quattro e cinque, è leggermente meno che banale, ma non terribilmente complesso. Proprio come con le date, le singole porzioni di dati possono assumere diverse forme o formati. Ogni fonte sarà probabilmente coerente sul formato che scelgono nella loro presentazione.

Diventa quindi una questione di corrispondenza con formati noti e determina quali dettagli dobbiamo includere, quali dettagli possiamo scartare e quali dettagli possiamo dedurre (in base ad altre informazioni disconnesse ma correlate). Se non possiamo dedurre i dati mancanti per un formato, i dati sono semplicemente in uno stato incompleto che potrebbe suggerire l'inserimento manuale o il rifiuto. Potrebbero anche esserci formati ben noti che contrassegnano automaticamente un record o una serie di record come immissione manuale o rifiutata.

Occasionalmente, le presentazioni non seguiranno il formato creato. Forse l'intera submission, o forse solo alcuni record, non seguono il formato. In entrambi i casi, determinare il motivo è più importante della determinazione di come e di cosa sarà il prossimo. Perché non può essere determinato da alcun software se non in casi triviali e previsti. Perché è un valore aziendale a cui non daremo risposta in una soluzione tecnica semplice. Quindi è una domanda che verrà posta al di fuori del ciclo. Potrebbe benissimo ricondurci a un come e a cosa, ma le prime cose dovrebbero chiarire perché è cambiato e perché è rotto.

    
risposta data 25.05.2013 - 01:30
fonte

Leggi altre domande sui tag