2010-10-28 28 views
1

J'ai un ensemble de documents qui ont un format semi-régulier. Les lignes sont généralement séparées par de nouveaux caractères de ligne, et les composants principaux de chaque ligne sont séparés par des espaces. Quelques exemples sont un ensemble d'instructions d'assemblage de meubles, un ensemble de table des matières, un ensemble de recettes et un ensemble de relevés bancaires. Le problème est que chaque spécimen dans chaque ensemble est différent de ses pairs d'une manière qui rend impossible l'analyse syntaxique RegEx: la quantité d'un élément peut venir avant ou après le nom de l'élément, les mêmes éléments peuvent avoir des noms différents entre les spécimens J'ai utilisé des classificateurs (Neural Nets, Bayesian, GA et GP) pour traiter des documents entiers ou des ensembles de données, mais pas pour extraire des documents et les classer. dans un contexte. Cela peut-il être fait? Y a-t-il une approche plus faisable?Analyse de données semi-structurées - puis-je utiliser des classificateurs?

Répondre

2

Si vos données ont une structure, vous pouvez sans doute utiliser une grammaire pour décrire une partie de cette structure. (Classiquement, vous utilisez des grammaires pour reconnaître ce qu'elles peuvent, souvent trop, et des vérifications extra-grammaticales pour élaguer ce que les grammaires ne peuvent pas éliminer).

Si vous utilisez une grammaire qui peut exécuter des analyses de potentiels parallèles, ce qui élimine les analyses lorsqu'elles deviennent irréalisables, vous pouvez analyser des ordonnances différentes directement. (Un analyseur GLR peut le faire bien).

Création d'image NUMBERS décrivant des montants, NOMS décrivant divers objets et VERBES pour des actions. Ensuite, une grammaire qui peut accepter des ordres différents d'articles pourrait être:

G = SENTENCE '.' ; 
SENTENCE = VERB NOUN NUMBER ; 
SENTENCE = NOUN VERB NUMBER; 
VERB = 'ORDER' | 'SAW' ; 
NUMBER = '1' | '2' | '10' ; 
NOUN = 'JOE' | 'TABLE' | 'SAW' ; 

Cet échantillon est extrêmement simple, mais il se chargera:

JOE ORDERED 10. 
JOE SAW 1. 
ORDER 2 SAW. 

Il sera également accepter:

SAW SAW 10. 

Vous pouvez éliminer cela en ajoutant une contrainte externe selon laquelle les acteurs doivent être des personnes.

+0

Merci Ira - cela efface beaucoup. Avez-vous des pointeurs pour générer des analyseurs GLR ou pour en savoir plus sur les "externals" (par exemple, les contraintes externes ou les vérifications grammaticales externes)? – codekaizen

+0

Bison générera des analyseurs GLR. Vous pourriez être en mesure d'utiliser Elkhound http://scottmcpeak.com/elkhound. Vous pouvez en apprendre plus à partir de http://en.wikipedia.org/wiki/GLR_parser en tant qu'arrière-plan général. Concernant les contraintes externes: souvent une règle de grammaire a comme action sémantique associée. Nous avons roulé notre propre analyseur GLR il y a une quinzaine d'années pour répondre à nos besoins, l'un d'entre eux étant que l'action sémantique puisse objecter (et ainsi nier la réduction). Vous pouvez attacher des contraintes à cela, par exemple en insistant pour la 2ème règle SENTENCE que le NOUN doit être un acteur, ce qui n'est pas le cas d'une SAW. –

0

Il existe de nombreuses méthodes pour cela. C'est un domaine de recherche actif appelé: information extraction. En particulier l'extraction d'informations à partir de sources semi-structurées.