import cbtc_Pipe as Pipe # eine von Kristall c-base Berlin entwickelte Software zur Analyse deutscher Texte.
from pprint import pp as pprint
from pprint import pp
w=300
from brat_widget import BratWidget
from brat_widget.cbtc_utils import cbtc_to_brat
Satz_1 = "Die nach § 20 Abs. 2 Nr. 1 gespeicherten Daten dürfen zur Erfüllung aller Zwecke des Verfassungsschutzes genutzt und übermittelt werden."
Erg_1 = Pipe.analysiere(Satz_1) # Erg ist Analyse-Erg-ebnis
Enthält Satz_1 eine oder zwei Verbphrasen (VP)? Und können beide Antworten gleichzeitig wahr sein oder handelt es sich um ein exklusives Oder?
Nehmen wir zuerst einmal an, es handele sich um zwei VP die durch das 'und' konnektiert sind. Da müssten sich beide VP sich Hilfs- (VA) und Modelverb (VM) teilen.
Aus diesem Grund wird der Konnektor 'und' Teil der VP_0, damit in der weiteren Analyse klar wird, das die konnektierten Verbphrasen sich VA und/oder VM teilen. Dies findet relativ früh in der Analyse statt.
for VP in Erg_1['Verbphrasen']:
print(VP)
pp(Erg_1['Verbphrasen'][VP]['Phrase'], width=300)
print("===="* 50)
VP_0
[{'Lexem': 'dürfen', 'Span': (47, 53), 'Num': 10, 'pTag': 'VMFIN', 'Lemma': ['dürfen'], 'cTag': 'VP_0', 'sNum': 0, 'Flex': {'3PGKM', '3PGIM'}, 'sR': set()},
{'Lexem': 'genutzt', 'Span': (105, 112), 'Num': 17, 'pTag': 'VVPP', 'Lemma': ['nutzen'], 'Flex': {'--P-I'}, 'cTag': 'VP_0', 'sNum': 0, 'sR': set()},
{'Lexem': 'und', 'Span': (113, 116), 'Num': 18, 'pTag': 'KONN', 'Lemma': ['und'], 'cTag': 'VP_0', 'sNum': 0, 'sR': set()}]
========================================================================================================================================================================================================
VP_1
[{'Lexem': 'übermittelt', 'Span': (117, 128), 'Num': 19, 'pTag': 'VVPP', 'Lemma': ['übermitteln'], 'Flex': {'--P-I'}, 'cTag': 'VP_1', 'sNum': 0, 'sR': set()},
{'Lexem': 'werden', 'Span': (129, 135), 'Num': 20, 'pTag': 'VAINF', 'Lemma': ['werden'], 'cTag': 'VP_1', 'sNum': 0, 'Flex': {'----I'}, 'sR': set()}]
========================================================================================================================================================================================================
Die sich gemeinsamen Teile der VP werden aber nicht direkt in der VP annotiert, sondern sind Teil der Syntaxanalyse, welche relativ spät in der Analyse stattfindet. Daher stehen diese in den Objekten und nicht den Verbprhasen.
for VP in Erg_1['Objekte']:
print(VP)
pp(Erg_1['Objekte'][VP]['Konn'], width=w)
VP_0
[{'Lexem': 'werden', 'Span': (129, 135), 'Num': 20, 'pTag': 'VAINF', 'Lemma': ['werden'], 'cTag': 'VP_1', 'sNum': 0, 'Flex': {'----I'}, 'sR': set()}]
VP_1
[{'Lexem': 'dürfen', 'Span': (47, 53), 'Num': 10, 'pTag': 'VMFIN', 'Lemma': ['dürfen'], 'cTag': 'VP_0', 'sNum': 0, 'Flex': {'3PGKM', '3PGIM'}, 'sR': set()}]
In der VP_0 muss also 'werden' ergänzt werden und in der VP_1 muss 'dürfen' ergänzt werden. Satz_1 enthielte demnach die (modifizierte) VP_0 "dürfen genutzt werden" und die (modifizierte) VP_1 "dürfen übermittelt werden". Diese haben dann das selbe Nominativobjekt (NO) und verbgebundenes Präposionalobjekt (POV).
pp(Erg_1['Objekte'], width=w)
{'VP_0': {'NO': [{'Lexem': 'Die', 'Span': (0, 3), 'Num': 0, 'pTag': 'ARTB+', 'sNum': 0, 'Flex': {'NPN'}, 'cTag': 'NP_54_0', 'Lemma': ['d'], 'sR': {'NO(VP_0)', 'NO(VP_1)'}},
{'Lexem': 'gespeicherten', 'Span': (27, 40), 'Num': 8, 'pTag': 'ADJPP', 'cTag': 'NP_54_0', 'Flex': {'NPNw'}, 'Lemma': ['gespeichert'], 'sNum': 0, 'sR': {'NO(VP_0)', 'NO(VP_1)'}},
{'Lexem': 'Daten', 'Span': (41, 46), 'Num': 9, 'pTag': 'NN', 'cTag': 'NP_54_0', 'Lemma': ['Daten'], 'sNum': 0, 'Flex': {'NPN'}, 'sR': {'NO(VP_0)', 'NO(VP_1)'}}],
'POV': [[{'Lexem': 'zur', 'Span': (54, 57), 'Num': 11, 'pTag': 'APPRART', 'cTag': 'PP_0', 'Lemma': ['zur'], 'sNum': 0, 'Flex': {'DSF'}, 'sR': {'POV(VP_1)', 'POV(VP_0)'}},
{'Lexem': 'Erfüllung', 'Span': (58, 67), 'Num': 12, 'pTag': 'NN', 'cTag': 'PNP_107_1', 'Lemma': ['Erfüllung'], 'sNum': 0, 'Flex': {'DSF'}, 'sR': {'POV(VP_1)', 'POV(VP_0)'}}]],
'Konn': [{'Lexem': 'werden', 'Span': (129, 135), 'Num': 20, 'pTag': 'VAINF', 'Lemma': ['werden'], 'cTag': 'VP_1', 'sNum': 0, 'Flex': {'----I'}, 'sR': set()}]},
'VP_1': {'NO': [{'Lexem': 'Die', 'Span': (0, 3), 'Num': 0, 'pTag': 'ARTB+', 'sNum': 0, 'Flex': {'NPN'}, 'cTag': 'NP_54_0', 'Lemma': ['d'], 'sR': {'NO(VP_0)', 'NO(VP_1)'}},
{'Lexem': 'gespeicherten', 'Span': (27, 40), 'Num': 8, 'pTag': 'ADJPP', 'cTag': 'NP_54_0', 'Flex': {'NPNw'}, 'Lemma': ['gespeichert'], 'sNum': 0, 'sR': {'NO(VP_0)', 'NO(VP_1)'}},
{'Lexem': 'Daten', 'Span': (41, 46), 'Num': 9, 'pTag': 'NN', 'cTag': 'NP_54_0', 'Lemma': ['Daten'], 'sNum': 0, 'Flex': {'NPN'}, 'sR': {'NO(VP_0)', 'NO(VP_1)'}}],
'POV': [[{'Lexem': 'zur', 'Span': (54, 57), 'Num': 11, 'pTag': 'APPRART', 'cTag': 'PP_0', 'Lemma': ['zur'], 'sNum': 0, 'Flex': {'DSF'}, 'sR': {'POV(VP_1)', 'POV(VP_0)'}},
{'Lexem': 'Erfüllung', 'Span': (58, 67), 'Num': 12, 'pTag': 'NN', 'cTag': 'PNP_107_1', 'Lemma': ['Erfüllung'], 'sNum': 0, 'Flex': {'DSF'}, 'sR': {'POV(VP_1)', 'POV(VP_0)'}}]],
'Konn': [{'Lexem': 'dürfen', 'Span': (47, 53), 'Num': 10, 'pTag': 'VMFIN', 'Lemma': ['dürfen'], 'cTag': 'VP_0', 'sNum': 0, 'Flex': {'3PGKM', '3PGIM'}, 'sR': set()}]}}
Die syntaktischen Abhängigkeiten der Phrasen, lässt sich dann wie folgt visualisieren:
BratWidget(**(cbtc_to_brat(Erg_1, options={'entity_stack_order': ['phrases']}))).render()
!! # Graphik ist interaktiv => mit der Maus über einen String hovern
# PEAdj => Präpositonale Ergänzung eines Adjektivs
# VPE => Ergänzungselement einer VP
# GO => Genitivobjekt
# P$PPK => Präpositionale Paragraphenkette
# NP => Nominalphrase PNP => NP mit Präposition, restlichen Abk. bereits eingeführt
Betrachten wir nun den Fall, dass der Satz_1 nur eine VP enthält.
Erreichen können wir dies einfach indem dem Chunker folgende Regel hingefügt wird:
Pipe.Chunker.Chunkregeln.append((['ADJPP|VV#', 'KONN#', 'ADJPP|VV#'], 'AZPPP'))
Vereinfacht gesagt, bewirkt diese Regel, dass 'genutzt und übermittelt' als Aufzählungsphrase von Partizipien markiert wird, und somit das 'und' als Konnektor "verbraucht" wurde und nicht mehr für die VP zur Verfügung steht.
Variante_1 = Pipe.analysiere(Satz_1)
BratWidget(**(cbtc_to_brat(Variante_1, options={'entity_stack_order': ['phrases']}))).render()
for VP in Variante_1['Verbphrasen']:
print(VP)
pp(Variante_1['Verbphrasen'][VP]['Phrase'], width=300)
print("===="* 50)
VP_0
[{'Lexem': 'dürfen', 'Span': (47, 53), 'Num': 10, 'pTag': 'VMFIN', 'Lemma': ['dürfen'], 'cTag': 'VP_0', 'sNum': 0, 'Flex': {'3PGKM', '3PGIM'}, 'sR': set()},
{'Lexem': 'genutzt', 'Span': (105, 112), 'Num': 17, 'pTag': 'VVPP', 'cTag': 'VP_0', 'Lemma': ['nutzen'], 'Flex': {'--P-I'}, 'sNum': 0, 'sR': set()},
{'Lexem': 'übermittelt', 'Span': (117, 128), 'Num': 19, 'pTag': 'VVPP', 'cTag': 'VP_0', 'Lemma': ['übermitteln'], 'Flex': {'--P-I'}, 'sNum': 0, 'sR': set()},
{'Lexem': 'werden', 'Span': (129, 135), 'Num': 20, 'pTag': 'VAINF', 'Lemma': ['werden'], 'cTag': 'VP_0', 'sNum': 0, 'Flex': {'----I'}, 'sR': set()}]
========================================================================================================================================================================================================
Auch wenn es vielleicht etwas konterintuitiv ist, so ist das 'und' nicht mehr Teil der VP (da keine Elemente mehr geteilt werden).
Außerdem ist das Objekte-Dict kleiner.
pp(Variante_1['Objekte'], width=w)
{'VP_0': {'NO': [{'Lexem': 'Die', 'Span': (0, 3), 'Num': 0, 'pTag': 'ARTB+', 'sNum': 0, 'Flex': {'NPN'}, 'cTag': 'NP_54_0', 'Lemma': ['d'], 'sR': {'NO(VP_0)'}},
{'Lexem': 'gespeicherten', 'Span': (27, 40), 'Num': 8, 'pTag': 'ADJPP', 'cTag': 'NP_54_0', 'Flex': {'NPNw'}, 'Lemma': ['gespeichert'], 'sNum': 0, 'sR': {'NO(VP_0)'}},
{'Lexem': 'Daten', 'Span': (41, 46), 'Num': 9, 'pTag': 'NN', 'cTag': 'NP_54_0', 'Lemma': ['Daten'], 'sNum': 0, 'Flex': {'NPN'}, 'sR': {'NO(VP_0)'}}],
'POV': [[{'Lexem': 'zur', 'Span': (54, 57), 'Num': 11, 'pTag': 'APPRART', 'cTag': 'PP_0', 'Lemma': ['zur'], 'sNum': 0, 'Flex': {'DSF'}, 'sR': {'POV(VP_0)'}},
{'Lexem': 'Erfüllung', 'Span': (58, 67), 'Num': 12, 'pTag': 'NN', 'cTag': 'PNP_107_1', 'Lemma': ['Erfüllung'], 'sNum': 0, 'Flex': {'DSF'}, 'sR': {'POV(VP_0)'}}]]}}
Allerdings müsste man nun noch sicherstellen, dass die Handlungsoptionenaufzählung (dieser Modalpassivkonstruktion) entspechend weiterverarbeitet wird um sicherzustellen, dass im Ergebnis die semantische Abbildung gleich bleibt.
Mit Blick auf Sätze wie Satz_2 ist dies aber ohnehin nötig:
Satz_2 = "Sie dürfen nur noch mit Einwilligung der betroffenen Person genutzt, verändert, übermittelt und gelöscht werden."
Wir können also feststellen, dass man sowohl eine als auch zwei VP begründen und parsen kann. Mit Blick auf Satz_2 mag die Antwort es sei eine näherliegen, denn sonst wären es ja 4 in Satz_2, aber Satz_3 zeigt ein Beispiel in dem der erste Weg besser ist.
Satz_3 = "Der Grundsatz der Wirtschaftlichkeit rechtfertigt es dabei nicht, dass Grundprinzipien der Ordnungsmäßigkeit verletzt und die Zwecke der Buchführung erheblich gefährdet werden."
Zur Vollständigkeit noch die Tabellen der Analysergbnisse:
print(Erg_1)
Num: 0 sNum: 0 Lex: Die Lem: d PTK: pTag: ARTB+ cTag: NP_54_0 sR: {'NO(VP_0)', 'NO(VP_1)'} Flex: {'NPN'}
Num: 1 sNum: 0 Lex: nach Lem: nach PTK: pTag: APPR cTag: PP_1 sR: {'PEAdj(t_8)'} Flex: {'DSM'}
Num: 2 sNum: 0 Lex: § Lem: PTK: pTag: $P cTag: P$PPK_0 sR: {'PEAdj(t_8)'} Flex: {'DSM'}
Num: 3 sNum: 0 Lex: 20 Lem: PTK: pTag: CARD cTag: P$PPK_0 sR: {'PEAdj(t_8)'} Flex:
Num: 4 sNum: 0 Lex: Abs. Lem: PTK: pTag: $P cTag: P$PPK_0 sR: {'PEAdj(t_8)'} Flex: {'NSM', 'GSM', 'DSM', 'ASM'}
Num: 5 sNum: 0 Lex: 2 Lem: PTK: pTag: CARD cTag: P$PPK_0 sR: {'PEAdj(t_8)'} Flex:
Num: 6 sNum: 0 Lex: Nr. Lem: PTK: pTag: $P cTag: P$PPK_0 sR: {'PEAdj(t_8)'} Flex: {'NSM', 'GSM', 'DSM', 'ASM'}
Num: 7 sNum: 0 Lex: 1 Lem: PTK: pTag: CARD cTag: P$PPK_0 sR: {'PEAdj(t_8)'} Flex:
Num: 8 sNum: 0 Lex: gespeicherten Lem: gespeichert PTK: pTag: ADJPP cTag: NP_54_0 sR: {'NO(VP_0)', 'NO(VP_1)'} Flex: {'NPNw'}
Num: 9 sNum: 0 Lex: Daten Lem: Daten PTK: pTag: NN cTag: NP_54_0 sR: {'NO(VP_0)', 'NO(VP_1)'} Flex: {'NPN'}
Num: 10 sNum: 0 Lex: dürfen Lem: dürfen PTK: pTag: VMFIN cTag: VP_0 sR: set() Flex: {'3PGKM', '3PGIM'}
Num: 11 sNum: 0 Lex: zur Lem: zur PTK: pTag: APPRART cTag: PP_0 sR: {'POV(VP_1)', 'POV(VP_0)'} Flex: {'DSF'}
Num: 12 sNum: 0 Lex: Erfüllung Lem: Erfüllung PTK: pTag: NN cTag: PNP_107_1 sR: {'POV(VP_1)', 'POV(VP_0)'} Flex: {'DSF'}
Num: 13 sNum: 0 Lex: aller Lem: aller PTK: pTag: PIDAT cTag: NP_101_2 sR: {'GO(PNP_107_1)'} Flex: {'GPM', 'GSF'}
Num: 14 sNum: 0 Lex: Zwecke Lem: Zweck|Zwecke PTK: pTag: NN cTag: NP_101_2 sR: {'GO(PNP_107_1)'} Flex: {'GPM', 'GSF'}
Num: 15 sNum: 0 Lex: des Lem: d PTK: pTag: ARTB cTag: NP_81_3 sR: {'GO(NP_101_2)'} Flex: {'GSM'}
Num: 16 sNum: 0 Lex: Verfassungsschutzes Lem: Verfassungsschutz PTK: pTag: NN cTag: NP_81_3 sR: {'GO(NP_101_2)'} Flex: {'GSM'}
Num: 17 sNum: 0 Lex: genutzt Lem: nutzen PTK: pTag: VVPP cTag: VP_0 sR: set() Flex: {'--P-I'}
Num: 18 sNum: 0 Lex: und Lem: und PTK: pTag: KONN cTag: VP_0 sR: set() Flex:
Num: 19 sNum: 0 Lex: übermittelt Lem: übermitteln PTK: pTag: VVPP cTag: VP_1 sR: set() Flex: {'--P-I'}
Num: 20 sNum: 0 Lex: werden Lem: werden PTK: pTag: VAINF cTag: VP_1 sR: set() Flex: {'----I'}
Num: 21 sNum: 0 Lex: . Lem: PTK: pTag: $. cTag: $. sR: set() Flex:
========================================================================================================================================================================================================
Num: 10 sNum: 0 Lex: dürfen Lem: dürfen PTK: pTag: VMFIN cTag: VP_0 sR: set() Flex: {'3PGKM', '3PGIM'}
Num: 17 sNum: 0 Lex: genutzt Lem: nutzen PTK: pTag: VVPP cTag: VP_0 sR: set() Flex: {'--P-I'}
Num: 18 sNum: 0 Lex: und Lem: und PTK: pTag: KONN cTag: VP_0 sR: set() Flex:
----------------------------------------------------------------------------------------------------------------------------------------------------------------
{'NO': [{'Lexem': 'Die', 'Span': (0, 3), 'Num': 0, 'pTag': 'ARTB+', 'sNum': 0, 'Flex': {'NPN'}, 'cTag': 'NP_54_0', 'Lemma': ['d'], 'sR': {'NO(VP_0)', 'NO(VP_1)'}},
{'Lexem': 'gespeicherten', 'Span': (27, 40), 'Num': 8, 'pTag': 'ADJPP', 'cTag': 'NP_54_0', 'Flex': {'NPNw'}, 'Lemma': ['gespeichert'], 'sNum': 0, 'sR': {'NO(VP_0)', 'NO(VP_1)'}},
{'Lexem': 'Daten', 'Span': (41, 46), 'Num': 9, 'pTag': 'NN', 'cTag': 'NP_54_0', 'Lemma': ['Daten'], 'sNum': 0, 'Flex': {'NPN'}, 'sR': {'NO(VP_0)', 'NO(VP_1)'}}],
'POV': [[{'Lexem': 'zur', 'Span': (54, 57), 'Num': 11, 'pTag': 'APPRART', 'cTag': 'PP_0', 'Lemma': ['zur'], 'sNum': 0, 'Flex': {'DSF'}, 'sR': {'POV(VP_1)', 'POV(VP_0)'}},
{'Lexem': 'Erfüllung', 'Span': (58, 67), 'Num': 12, 'pTag': 'NN', 'cTag': 'PNP_107_1', 'Lemma': ['Erfüllung'], 'sNum': 0, 'Flex': {'DSF'}, 'sR': {'POV(VP_1)', 'POV(VP_0)'}}]],
'Konn': [{'Lexem': 'werden', 'Span': (129, 135), 'Num': 20, 'pTag': 'VAINF', 'Lemma': ['werden'], 'cTag': 'VP_1', 'sNum': 0, 'Flex': {'----I'}, 'sR': set()}]}
================================================================================================================================================================
Num: 19 sNum: 0 Lex: übermittelt Lem: übermitteln PTK: pTag: VVPP cTag: VP_1 sR: set() Flex: {'--P-I'}
Num: 20 sNum: 0 Lex: werden Lem: werden PTK: pTag: VAINF cTag: VP_1 sR: set() Flex: {'----I'}
----------------------------------------------------------------------------------------------------------------------------------------------------------------
{'NO': [{'Lexem': 'Die', 'Span': (0, 3), 'Num': 0, 'pTag': 'ARTB+', 'sNum': 0, 'Flex': {'NPN'}, 'cTag': 'NP_54_0', 'Lemma': ['d'], 'sR': {'NO(VP_0)', 'NO(VP_1)'}},
{'Lexem': 'gespeicherten', 'Span': (27, 40), 'Num': 8, 'pTag': 'ADJPP', 'cTag': 'NP_54_0', 'Flex': {'NPNw'}, 'Lemma': ['gespeichert'], 'sNum': 0, 'sR': {'NO(VP_0)', 'NO(VP_1)'}},
{'Lexem': 'Daten', 'Span': (41, 46), 'Num': 9, 'pTag': 'NN', 'cTag': 'NP_54_0', 'Lemma': ['Daten'], 'sNum': 0, 'Flex': {'NPN'}, 'sR': {'NO(VP_0)', 'NO(VP_1)'}}],
'POV': [[{'Lexem': 'zur', 'Span': (54, 57), 'Num': 11, 'pTag': 'APPRART', 'cTag': 'PP_0', 'Lemma': ['zur'], 'sNum': 0, 'Flex': {'DSF'}, 'sR': {'POV(VP_1)', 'POV(VP_0)'}},
{'Lexem': 'Erfüllung', 'Span': (58, 67), 'Num': 12, 'pTag': 'NN', 'cTag': 'PNP_107_1', 'Lemma': ['Erfüllung'], 'sNum': 0, 'Flex': {'DSF'}, 'sR': {'POV(VP_1)', 'POV(VP_0)'}}]],
'Konn': [{'Lexem': 'dürfen', 'Span': (47, 53), 'Num': 10, 'pTag': 'VMFIN', 'Lemma': ['dürfen'], 'cTag': 'VP_0', 'sNum': 0, 'Flex': {'3PGKM', '3PGIM'}, 'sR': set()}]}
========================================================================================================================================================================================================
[(21, '$.')]
========================================================================================================================================================================================================
print(Variante_1)
Num: 0 sNum: 0 Lex: Die Lem: d PTK: pTag: ARTB+ cTag: NP_54_0 sR: {'NO(VP_0)'} Flex: {'NPN'}
Num: 1 sNum: 0 Lex: nach Lem: nach PTK: pTag: APPR cTag: PP_1 sR: {'PEAdj(t_8)'} Flex: {'DSM'}
Num: 2 sNum: 0 Lex: § Lem: PTK: pTag: $P cTag: P$PPK_0 sR: {'PEAdj(t_8)'} Flex: {'DSM'}
Num: 3 sNum: 0 Lex: 20 Lem: PTK: pTag: CARD cTag: P$PPK_0 sR: {'PEAdj(t_8)'} Flex:
Num: 4 sNum: 0 Lex: Abs. Lem: PTK: pTag: $P cTag: P$PPK_0 sR: {'PEAdj(t_8)'} Flex: {'NSM', 'GSM', 'DSM', 'ASM'}
Num: 5 sNum: 0 Lex: 2 Lem: PTK: pTag: CARD cTag: P$PPK_0 sR: {'PEAdj(t_8)'} Flex:
Num: 6 sNum: 0 Lex: Nr. Lem: PTK: pTag: $P cTag: P$PPK_0 sR: {'PEAdj(t_8)'} Flex: {'NSM', 'GSM', 'DSM', 'ASM'}
Num: 7 sNum: 0 Lex: 1 Lem: PTK: pTag: CARD cTag: P$PPK_0 sR: {'PEAdj(t_8)'} Flex:
Num: 8 sNum: 0 Lex: gespeicherten Lem: gespeichert PTK: pTag: ADJPP cTag: NP_54_0 sR: {'NO(VP_0)'} Flex: {'NPNw'}
Num: 9 sNum: 0 Lex: Daten Lem: Daten PTK: pTag: NN cTag: NP_54_0 sR: {'NO(VP_0)'} Flex: {'NPN'}
Num: 10 sNum: 0 Lex: dürfen Lem: dürfen PTK: pTag: VMFIN cTag: VP_0 sR: set() Flex: {'3PGKM', '3PGIM'}
Num: 11 sNum: 0 Lex: zur Lem: zur PTK: pTag: APPRART cTag: PP_0 sR: {'POV(VP_0)'} Flex: {'DSF'}
Num: 12 sNum: 0 Lex: Erfüllung Lem: Erfüllung PTK: pTag: NN cTag: PNP_107_1 sR: {'POV(VP_0)'} Flex: {'DSF'}
Num: 13 sNum: 0 Lex: aller Lem: aller PTK: pTag: PIDAT cTag: NP_101_2 sR: {'GO(PNP_107_1)'} Flex: {'GPM', 'GSF'}
Num: 14 sNum: 0 Lex: Zwecke Lem: Zweck|Zwecke PTK: pTag: NN cTag: NP_101_2 sR: {'GO(PNP_107_1)'} Flex: {'GPM', 'GSF'}
Num: 15 sNum: 0 Lex: des Lem: d PTK: pTag: ARTB cTag: NP_81_3 sR: {'GO(NP_101_2)'} Flex: {'GSM'}
Num: 16 sNum: 0 Lex: Verfassungsschutzes Lem: Verfassungsschutz PTK: pTag: NN cTag: NP_81_3 sR: {'GO(NP_101_2)'} Flex: {'GSM'}
Num: 17 sNum: 0 Lex: genutzt Lem: nutzen PTK: pTag: VVPP cTag: VP_0 sR: set() Flex: {'--P-I'}
Num: 18 sNum: 0 Lex: und Lem: und PTK: pTag: KONN cTag: KONNAZ sR: set() Flex:
Num: 19 sNum: 0 Lex: übermittelt Lem: übermitteln PTK: pTag: VVPP cTag: VP_0 sR: set() Flex: {'--P-I'}
Num: 20 sNum: 0 Lex: werden Lem: werden PTK: pTag: VAINF cTag: VP_0 sR: set() Flex: {'----I'}
Num: 21 sNum: 0 Lex: . Lem: PTK: pTag: $. cTag: $. sR: set() Flex:
========================================================================================================================================================================================================
Num: 10 sNum: 0 Lex: dürfen Lem: dürfen PTK: pTag: VMFIN cTag: VP_0 sR: set() Flex: {'3PGKM', '3PGIM'}
Num: 17 sNum: 0 Lex: genutzt Lem: nutzen PTK: pTag: VVPP cTag: VP_0 sR: set() Flex: {'--P-I'}
Num: 19 sNum: 0 Lex: übermittelt Lem: übermitteln PTK: pTag: VVPP cTag: VP_0 sR: set() Flex: {'--P-I'}
Num: 20 sNum: 0 Lex: werden Lem: werden PTK: pTag: VAINF cTag: VP_0 sR: set() Flex: {'----I'}
----------------------------------------------------------------------------------------------------------------------------------------------------------------
{'NO': [{'Lexem': 'Die', 'Span': (0, 3), 'Num': 0, 'pTag': 'ARTB+', 'sNum': 0, 'Flex': {'NPN'}, 'cTag': 'NP_54_0', 'Lemma': ['d'], 'sR': {'NO(VP_0)'}},
{'Lexem': 'gespeicherten', 'Span': (27, 40), 'Num': 8, 'pTag': 'ADJPP', 'cTag': 'NP_54_0', 'Flex': {'NPNw'}, 'Lemma': ['gespeichert'], 'sNum': 0, 'sR': {'NO(VP_0)'}},
{'Lexem': 'Daten', 'Span': (41, 46), 'Num': 9, 'pTag': 'NN', 'cTag': 'NP_54_0', 'Lemma': ['Daten'], 'sNum': 0, 'Flex': {'NPN'}, 'sR': {'NO(VP_0)'}}],
'POV': [[{'Lexem': 'zur', 'Span': (54, 57), 'Num': 11, 'pTag': 'APPRART', 'cTag': 'PP_0', 'Lemma': ['zur'], 'sNum': 0, 'Flex': {'DSF'}, 'sR': {'POV(VP_0)'}},
{'Lexem': 'Erfüllung', 'Span': (58, 67), 'Num': 12, 'pTag': 'NN', 'cTag': 'PNP_107_1', 'Lemma': ['Erfüllung'], 'sNum': 0, 'Flex': {'DSF'}, 'sR': {'POV(VP_0)'}}]]}
========================================================================================================================================================================================================
[(21, '$.')]
========================================================================================================================================================================================================