Question

Je suis à la recherche direction et en essayant de étiquette ce problème:

Je cherche à construire simple moteur d'inférence (est-il un meilleur nom?) En Python qui prendra une chaîne et -

1 - créer une liste de jetons en créant simplement une liste d'espaces blancs champs séparés

2 - classer ces jetons, en utilisant des expressions régulières

3 - Utilisez un ensemble de niveau supérieur des règles pour prendre des décisions sur la base des catégorisations

Exemple:

« 90001 » - un jeton, correspond à la regex codepostal, il existe une règle pour une chaîne contenant juste un code postal provoque un certain comportement à se produire

« 30 + 14 » - trois jetons, regexs pour valeur numérique et correspondent aux opérateurs mathématiques, une règle existe pour une valeur numérique suivie d'un opérateur mathématique suivie d'une autre valeur numérique provoque un certain comportement produire

Je suis aux prises avec la meilleure façon de faire l'étape 3, le niveau supérieur ensemble de règles. Je suis sûr que certains cadre doit exister. Des idées? En outre, comment décririez-vous ce problème? système fondé sur des règles, système expert, le moteur d'inférence, quelque chose d'autre?

Merci!

Était-ce utile?

La solution

Je suis très surpris de constater que l'étape 3 est celui qui vous trouble ...

En supposant que vous pouvez étiqueter / classer correctement chaque jeton (et avant que vous pouvez Catégorisation trouver les jetons appropriés, car il peut y avoir de nombreux cas ambigus ...), le problème « Étape # 3 » semble qui pourrait facilement être abordé avec une grammaire libre de contexte où chacune des actions souhaitées (telles que le code postal recherche ou calcul d'expression mathématique ...) serait symboles avec leur règle de production se fait des catégories de jetons possibles. Pour illustrer cela en notation BNF, nous pourrions avoir quelque chose comme

<SimpleMathOperation> ::= <NumericalValue><Operator><NumericalValue>

Peut-être votre préoccupation est que quand les choses se compliquent, il deviendra difficile d'exprimer toute l'exigence en termes de règles de grammaire non conflictuelles. Ou peut-être votre préoccupation est que l'on pourrait ajouter des règles de façon dynamique, ce qui oblige donc la grammaire logique « compilation » être intégré au programme? Quelle que soit la préoccupation, je pense que cette 3e étape sera relativement trivial.

D'autre part, et à moins que les différentes catégories (et le texte d'entrée sous-jacente) sont tels qu'ils peuvent être décrits avec une langue régulière ainsi (que vous semblez faire allusion dans la question), un analyseur de texte et classificateur (étapes # 1 et # 2 ...) est généralement une affaire triviale moins ..

Quelques exemples de bibliothèques Python qui simplifient l'écriture et l'évaluation des grammaires:

Autres conseils

On dirait que vous recherchez pour la bibliothèque "inférence de grammaire" (induction de la grammaire).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top