2017-11-12 1 views
1

Ich bin neu bei UIMA RUTA (aber ich habe Erfahrung in einfachen UIMA und uimaFIT) und ich würde gerne wissen, was der beste Ansatz (Performance weise) Geld Werte zu finden. Wenn die Anwendung einen regulären Ausdruck in dem Satz oder Erstellen einer neuen Regel (und wie es aussehen würde)Der beste Weg, um Geldwerte in UIMA RUTA zu kommentieren

Meine Werte würde wie folgt aussehen:

1.000,00 1000,00 1.100.000,00 100 , 00 oder sogar 1000000,00 möglich ist

I

(NUM{BEFORE(PERIOD)})*(NUM{AFTER(COMMA)}) {-> MARK(Value, 1, 2);

(und selbst dann eine Regel wie

erstellt wird, kann ich das nicht richtig manchmal an der Arbeit, und tut Abdeckung eines lle meine Fälle)

Was wäre einfacher und weniger Ressourcenverbrauch zu tun?

Antwort

1

Ein regulärer Ausdruck ist wahrscheinlich die schnellste Option, wenn Sie nur auf Zeichenebene arbeiten können und keine Anmerkungen benötigen.

Mit normalen Übereinstimmungsregeln in UIMA Ruta hängt es davon ab, wie flexibel sie sein sollten. Sollten sie auch andere Gebietsschemas wie Englisch oder Französisch erkennen? Schließlich hängt die Laufzeit auch davon ab, wie viele Zahlen das Dokument enthält und so weiter, und ob ruta für den Anwendungsfall optimiert ist (Lexer, interne Indexierung, ...)

Ihre Regel wird nicht wie erwartet funktionieren, da optional Elemente am Anfang einer Regel sind nicht optional (falls kein manueller Anker vorhanden ist) und die Bedingung BEFORE schließt mindestens die erste Zahl aus.

Diese Regel sollte das tun, was Sie wollen, aber es ist sicherlich nicht die schnellste:

(NUM{-PARTOF(Value)} (PERIOD NUM{REGEXP("...")})* COMMA NUM{REGEXP("..")}){-> Value}; 

HAFTUNGSAUSSCHLUSS: Ich bin Entwickler von UIMA Ruta

+0

Interessante Lösung, während ich auf diese ich hatte keine Antwort Ich habe ein Papier von dir gefunden, ich glaube, das enthält eine Regel, um mit Uima RUTA Geld zu finden, mit diesem Beitrag konnte ich meinen einstellen, dass ich keine Annotation innerhalb eines anderen erstellen würde. Wie für Regex kann ich es nicht für das Leben von mir arbeiten, habe ich etwas wie diese versucht 'Nachricht {REGEXP (" \\ d {1,3} (\\. \\ d {3}) * (, \\ d {2})? ") -> Wert};' Der Wert ist innerhalb meiner Nachricht, aber ich bekomme keine Fehler, auch keine Anmerkungen –

+0

REGEXP ist eine Bedingung, die die angegebene Regex auf den abgedeckten Text der Matched Annotation, dh mit Java Pattern Matches(). Dies bedeutet, dass es nicht übereinstimmt, wenn der übereinstimmende Text nicht der Nummer entspricht. Versuchen Sie etwas wie "Nachricht -> {" \\ d {1,3} (\\. \\ d {3}) * (, \\ d {2})? " -> Value;}; eine einfache Regex-Regel als inline-Aktionsregel im Fenster einer Nachricht. –

Verwandte Themen