2016-12-19 4 views
1

Ich werde Phrasen abrufen, die durch Leerzeichen, Pausen und andere Interpunktionszeichen getrennt sind.UIMA Ruta. Rufen Sie Phrasen auf, die durch WS getrennt sind (Leerzeichen, Unterbrechungen usw.)

Ich habe viel Zeit damit verbracht, herauszufinden, wie das am besten funktioniert.

Option 1. Der einfachste Weg.

DECLARE T1, T2; 
"cool rules" -> T1; 
"cool rule" -> T2; 

Eingang: "123cool Regeln". Ergebnis: T1 und T2 werden ausgelöst;

Option 2. Verwendung von WORDLIST und WORDTABLE.

Let 1.txt Wortliste enthält 2 Reihen:

cool rules 
cool 

Code für Extraktion ist die folgende

WORDLIST WList = '1.txt'; 
DECLARE W1; 
Document{-> MARKFAST(W1, WList, true, 2)}; 

Eingang "COOL-Regeln". Ergebnis: nur die erste Zeile wird extrahiert. Ich vermute, dass in diesem Fall geschnittene Regeln nicht ausgelöst werden.

Option 3. Mark Kombination von zwei Token

DECLARE T1; 
("cool" "rule") {-> T1}; 

Eingang: "cool Regeln kühlen Regel 1cool Regel" Ergebnis: 2 Anmerkungen: cool Regel + 1cool Regel. Verlust der Extraktionsgeschwindigkeit in 10 Zeiten.

Option 4. REGEXP passend Vielleicht ist es möglich, solche Muster „cool \\ srule“ passen, aber ich habe keine Ahnung, wie die Art Ausdruck zu definieren. SW * {REGEXP ("cool \\ srule") -> T1} liefert keine Ergebnisse.

Wie Sie sehen, versuche ich eine sehr einfache Aufgabe zu lösen, ist aber noch nicht gelungen. Die Option 3 ist ein wirklich guter Weg, aber der Extraktionsprozess wird 10 Mal langsamer.

+0

Ich muss zugeben, dass ich nicht ganz verstehen, was Sie tun wollen. Der Text des Satzes wichtig? Wie sollte aufgeteilt werden? Der Titel sagt "getrennt durch WS", aber das Beispiel enthält ein Leerzeichen. Kannst du ein Beispiel hinzufügen, unabhängig davon, was du probiert hast? –

+0

Peter, danke für die Antwort. Laut Typhierarchie ist SPACE Kindtyp von WS, oder? – Mike

+0

Ich möchte nur die Reihenfolge der Token extrahieren. Zum Beispiel sollte die Phrase "cool rule" in Texten gefunden werden: "cool rule 1", "etwas coole Regel", "etwas coole Regel!". Aber sollte nicht bei "cool rules" und "1cool rule" gefunden werden. Ist es möglich? Vielen Dank! – Mike

Antwort

0

Wenn Sie bestimmte Phrasen identifizieren möchten, sollten Sie eine Wörterbuchsuche verwenden, nicht direkt Regeln.

Daher würde ich die MARKFAST Option empfehlen 2. Es gibt jedoch zwei Probleme: (a) nur längsten Spiele werden unterstützt und (b) benötigen Sie entweder die Segmentierung (tokenization) oder tun ändern etwas Nachbearbeitung.

(a) Dies kann nicht gelöst werden. Wenn dies wirklich erforderlich ist, sollte ein anderer Wörterbuchannotator verwendet werden. Siehe beispielsweise die UIMA-Mailinglisten.

(b) Der MARKFAST funktioniert auf RutaBasic-Annotationen, die automatisch für jedes kleinste Teil erstellt werden. Aufgrund der Standard-Sämaschine besteht das Token "1cool" aus zwei RutaBasics, einer für die NUM, einer für die SW.Wenn Sie möchten, um die Vorverarbeitung nicht ändern, können Sie einfach eine Regel anwenden, dass btw

RETAINTYPE(WS); 
ANY{-PARTOF(WS)} t:@T1{-> UNMARK(t)}; 

wie

feste Option 4 wird nicht funktionieren, weil die REGEXP Bedingungsprüfungen auf dem überdachten Text der angepassten Anmerkung SW die stellt nur ein Token dar. Wenn Sie etwas wie (SW+){REGEXP("cool\\srule")->T1} tun, wird die Regel nicht übereinstimmen, wenn es eine andere SW danach gibt.

HAFTUNGSAUSSCHLUSS: Ich bin ein Entwickler von UIMA Ruta

Verwandte Themen