Le prototype s'appuie sur une plate-forme matérielle et logicielle existante utilisant la numérisation d'image et un OCR. Ces données doivent être formatées suivant un format de catalogage fourni par l'utilisateur, et les erreurs produites par l'OCR doivent être détectées et corrigées. La sortie du système se conforme au format UNIMARC et éventuellement à d'autres formats de sortie.
Il a d'abord fallu analyser les caractéristiques des catalogues sur fiches de différentes bibliothèques, chacune ayant des traditions de catalogage et des règles spécifiques pour la représentation des informations sur les fiches. Cette analyse préalable a pour but de fournir des spécifications permettant le formatage automatique des copies numériques de ces fiches, en écrivant des grammaires correspondant à chaque type de fiche.
Le prototype applique aussi des procédures automatiques ou semi-automatiques de correction des erreurs dues aussi bien au bruit des images numérisées qu'aux erreurs de reconnaissances dues à l'OCR. Les contrôles sont appliqués à la sortie de l'OCR ; ils peuvent consister à remplacer des mots souvent erronés par leur vraie valeur, comme par exemple edltor par editor, Ber1in par Berlin, etc.).
Puis, il convertit le flux corrigé dans le format bibliographique demandé par l'utilisateur (UNIMARC principalement). Ceci passe par l'utilisation d'outils d'aide à l'écriture de grammaires adaptées.
Les divers élément d'information bibliographique contenus dans les fiches et aussi leur structure physique (topologie, ponctuation, mots spécifiques, etc.) sont décrits dans un grammaire servant à analyser les fiches. C'est en gros une réécriture des règles de catalogages appliquée lors de la production des fiches, à ceci près qu'elle doit plutôt représenter les pratiques des catalogueurs que les règles qu'ils sont supposés appliquer.
La figure 1.8 montre un exemple d'une telle grammaire. L'utilisation de grammaires se justifie par le fait que les catalogues de fiches cartonnées ont une structure « plate » (peu profonde) et une séquence de champs figée.
Card := LocMark Heading MainArea Notes Heading := AuthorHeading | SubjectHeading | TitleHeading AuthorHeading := LastName "," FirstName MainArea := Title AuthorshipStatement Imprint PhysDescript Title := MainTitle [":" SubTitle] ["=" ParallelTitle] AuthorshipStatement := "/" FirstName LastName Imprint := PlaceOfPublication [Publisher] YearOfPublication PhysDescript := Pagination Illustration Size LocMark := "disp. 84-85" | ... LastName := "Meuser" | "Smith" | ... FirstName := "Michael" | "William" | "Johannes" | ... MainTitle := CapitalLetterWord {Word} SubTitle := CapitalLetterWord {Word} ParallelTitle := CapitalLetterWord {Word} PlaceOfPublication := "Bonn" | "Berlin" | "London" | ... YearOfPublication := Digit Digit Digit Digit Word := CapitalLetter{SmallLetter} Word := SmallLetter{SmallLetter} Word := CapitalLetter{CapitalLetter} CapitalLetterWord := CapitalLetter{SmallLetter} CapitalLetter := "A" | "B" | "C" | "D" | ... SmallLetter := "a" | "b" | "c" | "d" | ... Digit := "0" | "1" | "2" | "3" | "4" | "5" | ... |
Ce système, qui a le mérite de traiter la chaîne de traitement des notices sur fiches cartonnées, nécessite beaucoup de travail, spécifique à chaque type de fiche. En effet, non content de devoir écrire une grammaire par type de fiche, il faut en plus vérifier continuellement les résultats du système, chercher d'où viennent les erreurs, et soit corriger la grammaire correspondante, soit augmenter les dictionnaires de corrections d'erreurs de l'OCR.