Ich suche nach einer Richtung und versuche, dieses Problem zu beschriften :
Ich versuche eine einfache Inferenz-Engine (gibt es einen besseren Namen?) in Python zu erstellen, die eine Zeichenfolge und -
braucht1 - Erstellen Sie eine Liste von Token, indem Sie einfach eine Liste von durch Leerraum getrennten Werten erstellen
2 - kategorisieren Sie diese Token mit regulären Ausdrücken
3 - Verwenden Sie eine höhere Ebene von Regeln, um Entscheidungen basierend auf den Kategorisierungen zu treffen
Beispiel:
"90001" - ein Token entspricht der Postleitzahl Regex, eine Regel existiert für eine Zeichenfolge, die nur eine Postleitzahl enthält bewirkt, dass ein bestimmtes Verhalten auftritt
"30 + 14" - drei Token, Regex für numerischen Wert und mathematische Operatoren passen zusammen, eine Regel existiert für ein numerischer Wert gefolgt von einem mathematischen Operator gefolgt von einem anderen numerischen Wert verursacht ein bestimmtes Verhalten auftreten
Ich habe Probleme damit, wie ich Schritt 3, das höhere Regelwerk, am besten durchführe. Ich bin sicher, dass ein Framework existieren muss. Irgendwelche Ideen? Wie würden Sie dieses Problem charakterisieren? Regelbasiertes System, Expertensystem, Inferenz-Engine, noch etwas?
Danke!
Ich bin sehr überrascht, dass Schritt # 3 derjenige ist, der dir Probleme bereitet ...
Vorausgesetzt, Sie können jedes Token korrekt beschriften / kategorisieren (und vor der Kategorisierung können Sie die richtigen Token finden, da es viele mehrdeutige Fälle geben kann ...), scheint das "Schritt # 3" -Problem zu sein könnte leicht mit einer kontextfreien Grammatik bewältigt werden, wobei jede der gewünschten Aktionen (z. B. Postleitzahlensuche oder Berechnung mathematischer Ausdrücke ...) Symbole wären, deren Erzeugungsregel selbst aus den möglichen Tokenkategorien besteht. Um dies in BNF-Notation zu veranschaulichen, könnten wir etwas wie
haben %Vor%Vielleicht ist es Ihre Sorge, dass es schwierig werden wird, die gesamte Anforderung in Bezug auf nicht konfligierende Grammatikregeln auszudrücken, wenn die Dinge kompliziert werden. Oder besteht Ihre Sorge darin, dass man Regeln dynamisch hinzufügen könnte, wodurch die Grammatik "Kompilierungs" -Logik in das Programm integriert werden muss? Was auch immer die Sorge ist, ich denke, dass dieser dritte Schritt vergleichsweise trivial sein wird.
Wenn andererseits die verschiedenen Kategorien (und der zugrundeliegende Eingabetext) so beschaffen sind, dass sie auch mit einer regulären Sprache beschrieben werden können (wie Sie in der Frage anzudeuten scheinen), werden ein Textparser und Klassifizierer (Steps # 1 und # 2 ...) ist in der Regel eine weniger als triviale Angelegenheit.
Einige Beispiel-Python-Bibliotheken, die das Schreiben und Auswerten von Grammatiken vereinfachen:
Tags und Links python parsing rule-engine expert-system