When we remove a mention that is a singleton, the given cluster/entity id will disappear from the output file. This is a problem if the entity is the target of a bridging relation, or it is a part of a split antecedent of another entity. What is the proper way of finding all such relations and either removing them, or redirecting them to another cluster?
# sent_id = ln95045-097-p2s3
# text = Zaujala je zejména kosmetika k denní péči o pleť dětí i dospělých, která byla vyrobena výhradně z přírodních materiálů, a podobně vyráběné čisticí a prací prostředky, které nedráždí citlivou pleť alergiků.
# orig_file_sentence ln95045_097#5
1 Zaujala zaujmout VERB VpQW----R-AAP-- Aspect=Perf|Gender=Fem,Neut|Number=Plur,Sing|Polarity=Pos|Tense=Past|VerbForm=Part|Voice=Act 0 root 0:root LGloss=(upoutat_pozornost)
2 je on PRON PEXP4--3------- Case=Acc|Number=Plur|Person=3|PrepCase=Npr|PronType=Prs 1 obj 1:obj LId=on-1|ClusterId=ln95045097c7|MentionMisc=gstype:spec|MentionSpan=2|MentionText=je
3 zejména zejména PART TT------------- _ 4 advmod:emph 4:advmod:emph LId=zejména-2
4 kosmetika kosmetika NOUN NNFS1-----A---- Case=Nom|Gender=Fem|Number=Sing|Polarity=Pos 1 nsubj 1:nsubj LGloss=(věda)|ClusterId=ln95045097c10|MentionSpan=4-34|MentionText=kosmetika k denní péči o pleť dětí i dospělých, která byla vyrobena výhradně z přírodních materiálů, a podobně vyráběné čisticí a prací prostředky, které nedráždí citlivou pleť alergiků
5 k k ADP RR--3---------- AdpType=Prep|Case=Dat 7 case 7:case LId=k-1
6 denní denní ADJ AAFS3----1A---- Case=Dat|Degree=Pos|Gender=Fem|Number=Sing|Polarity=Pos 7 amod 7:amod _
7 péči péče NOUN NNFS3-----A---- Case=Dat|Gender=Fem|Number=Sing|Polarity=Pos 4 nmod 4:nmod:k:dat _
8 o o ADP RR--4---------- AdpType=Prep|Case=Acc 9 case 9:case LId=o-1
9 pleť pleť NOUN NNFS4-----A---- Case=Acc|Gender=Fem|Number=Sing|Polarity=Pos 7 nmod 7:nmod:o:acc _
10 dětí dítě NOUN NNFP2-----A---- Case=Gen|Gender=Fem|Number=Plur|Polarity=Pos 9 nmod 9:nmod:gen LId=dítě-2
11 i i CCONJ J^------------- _ 12 cc 12:cc LId=i-1
12 dospělých dospělý NOUN NNMP2-----A---- Animacy=Anim|Case=Gen|Gender=Masc|Number=Plur|Polarity=Pos 10 conj 9:nmod:gen|10:conj SpaceAfter=No|LId=dospělý-2
13 , , PUNCT Z:------------- _ 16 punct 16:punct _
14 která který DET P4FS1---------- Case=Nom|Gender=Fem|Number=Sing|PronType=Int,Rel 16 nsubj:pass 16:nsubj:pass ClusterId=ln95045097c10|MentionSpan=14|MentionText=která
15 byla být AUX VpQW----R-AAI-- Aspect=Imp|Gender=Fem,Neut|Number=Plur,Sing|Polarity=Pos|Tense=Past|VerbForm=Part|Voice=Act 16 aux:pass 16:aux:pass _
16 vyrobena vyrobený ADJ VsQW----X-APP-- Aspect=Perf|Gender=Fem,Neut|Number=Plur,Sing|Polarity=Pos|Variant=Short|VerbForm=Part|Voice=Pass 4 amod 4:amod LDeriv=vyrobit
17 výhradně výhradně ADV Dg-------1A---- Degree=Pos|Polarity=Pos 16 advmod 16:advmod LDeriv=výhradný
18 z z ADP RR--2---------- AdpType=Prep|Case=Gen 20 case 20:case LId=z-1
19 přírodních přírodní ADJ AAIP2----1A---- Animacy=Inan|Case=Gen|Degree=Pos|Gender=Masc|Number=Plur|Polarity=Pos 20 amod 20:amod _
20 materiálů materiál NOUN NNIP2-----A---- Animacy=Inan|Case=Gen|Gender=Masc|Number=Plur|Polarity=Pos 16 obl:arg 16:obl:arg:z:gen SpaceAfter=No
21 , , PUNCT Z:------------- _ 16 punct 16:punct _
22 a a CCONJ J^------------- _ 28 cc 28:cc LId=a-1|ClusterId=ln95045097c13|MentionSpan=4-34|MentionText=kosmetika k denní péči o pleť dětí i dospělých, která byla vyrobena výhradně z přírodních materiálů, a podobně vyráběné čisticí a prací prostředky, které nedráždí citlivou pleť alergiků
23 podobně podobně ADV Dg-------1A---- Degree=Pos|Polarity=Pos 24 advmod 24:advmod LDeriv=podobný
24 vyráběné vyráběný ADJ AAIP1----1A---- Animacy=Inan|Case=Nom|Degree=Pos|Gender=Masc|Number=Plur|Polarity=Pos 28 amod 28:amod LDeriv=vyrábět
25 čisticí čisticí ADJ AAIP1----1A---- Animacy=Inan|Case=Nom|Degree=Pos|Gender=Masc|Number=Plur|Polarity=Pos 28 amod 28:amod _
26 a a CCONJ J^------------- _ 27 cc 27:cc LId=a-1|ClusterId=ln95045097c11|MentionSpan=23-34|MentionText=podobně vyráběné čisticí a prací prostředky, které nedráždí citlivou pleť alergiků
27 prací prací ADJ AAIP1----1A---- Animacy=Inan|Case=Nom|Degree=Pos|Gender=Masc|Number=Plur|Polarity=Pos 25 conj 25:conj|28:amod _
28 prostředky prostředek NOUN NNIP1-----A---- Animacy=Inan|Case=Nom|Gender=Masc|Number=Plur|Polarity=Pos 4 conj 1:nsubj|4:conj|31:nsubj SpaceAfter=No|LGloss=(střed,způsob,_nástroj)
29 , , PUNCT Z:------------- _ 31 punct 31:punct _
30 které který DET P4IP1---------- Animacy=Inan|Case=Nom|Gender=Masc|Number=Plur|PronType=Int,Rel 31 nsubj 28:ref ClusterId=ln95045097c11|MentionSpan=30|MentionText=které
31 nedráždí dráždit VERB VB-P---3P-NAI-- Aspect=Imp|Mood=Ind|Number=Plur|Person=3|Polarity=Neg|Tense=Pres|VerbForm=Fin|Voice=Act 28 acl:relcl 28:acl:relcl _
32 citlivou citlivý ADJ AAFS4----1A---- Case=Acc|Degree=Pos|Gender=Fem|Number=Sing|Polarity=Pos 33 amod 33:amod _
33 pleť pleť NOUN NNFS4-----A---- Case=Acc|Gender=Fem|Number=Sing|Polarity=Pos 31 obj 31:obj _
34 alergiků alergik NOUN NNMP2-----A---- Animacy=Anim|Case=Gen|Gender=Masc|Number=Plur|Polarity=Pos 33 nmod 33:nmod:gen SpaceAfter=No|ClusterId=ln95045097c2|MentionMisc=gstype:gen|MentionSpan=34|MentionText=alergiků
35 . . PUNCT Z:------------- _ 1 punct 1:punct _
# sent_id = ln95045-097-p2s4
# text = Některé takové výrobky jsou k dostání v lékárnách.
# orig_file_sentence ln95045_097#6
1 Některé některý DET PZIP1---------- Animacy=Inan|Case=Nom|Gender=Masc|Number=Plur|PronType=Ind 3 det 3:det _
2 takové takový DET PDIP1---------- Animacy=Inan|Case=Nom|Gender=Masc|Number=Plur|PronType=Dem 3 det 3:det _
3 výrobky výrobek NOUN NNIP1-----A---- Animacy=Inan|Case=Nom|Gender=Masc|Number=Plur|Polarity=Pos 4 nsubj 4:nsubj ClusterId=ln95045097c12|Bridging=ln95045097c13:anaf|MentionSpan=1-3|MentionText=Některé takové výrobky
4 jsou být VERB VB-P---3P-AAI-- Aspect=Imp|Mood=Ind|Number=Plur|Person=3|Polarity=Pos|Tense=Pres|VerbForm=Fin|Voice=Act 0 root 0:root _
5 k k ADP RR--3---------- AdpType=Prep|Case=Dat 6 case 6:case LId=k-1
6 dostání dostání NOUN NNNS3-----A---- Case=Dat|Gender=Neut|Number=Sing|Polarity=Pos 4 obl 4:obl:k:dat LDeriv=dostat
7 v v ADP RR--6---------- AdpType=Prep|Case=Loc 8 case 8:case LId=v-1
8 lékárnách lékárna NOUN NNFP6-----A---- Case=Loc|Gender=Fem|Number=Plur|Polarity=Pos 4 obl 4:obl:v:loc SpaceAfter=No
9 . . PUNCT Z:------------- _ 4 punct 4:punct _
In the first sentence, nodes 4 and 22 both define a mention with the span 4-34, but node 4 says it is cluster c10, while node 22 says it is c13. (The ultimate cause is a missing is_member() in the second conjunct in the original t-tree. The second conjunct is then considered a shared modifier of the coordination, hence it is included in the span of the first conjunct.)
The block corefud.MergeSameSpan sees that the two mentions have identical spans and decides to remove the mention belonging to c13. Unfortunately, c13 is a singleton whose only reason for existence is that it is the target of a bridging relation from the next sentence. If we remove the mention without taking care of bridging, Udapi will crash when we try to write the file:
2022-02-15 22:01:46,335 [ INFO] execute - ---- ROUND ----
2022-02-15 22:01:46,335 [ INFO] execute - Executing block read.OldCorefUD
2022-02-15 22:01:46,340 [ INFO] execute - Executing block corefud.MergeSameSpan
2022-02-15 22:01:46,341 [WARNING] process_tree - Merging same-span mentions that belong to different entities: 'ln95045097c10' vs. 'ln95045097c13'.
2022-02-15 22:01:46,341 [ INFO] execute - Executing block write.Conllu
Traceback (most recent call last):
File "/home/zeman/nastroje/udapi-python/bin/udapy", line 114, in <module>
runner.execute()
File "/home/zeman/nastroje/udapi-python/udapi/core/run.py", line 159, in execute
block.apply_on_document(document)
File "/home/zeman/nastroje/udapi-python/udapi/core/block.py", line 51, in apply_on_document
self.before_process_document(document)
File "/home/zeman/nastroje/udapi-python/udapi/block/write/conllu.py", line 148, in before_process_document
super().before_process_document(document)
File "/home/zeman/nastroje/udapi-python/udapi/core/basewriter.py", line 49, in before_process_document
udapi.core.coref.store_coref_to_misc(document)
File "/home/zeman/nastroje/udapi-python/udapi/core/coref.py", line 835, in store_coref_to_misc
str_bridge = str(mention._bridging)
File "/home/zeman/nastroje/udapi-python/udapi/core/coref.py", line 456, in __str__
return ','.join(f'{l.target.eid_or_grp}<{self.src_mention.cluster.eid_or_grp}{":" + l.relation if l.relation not in (None, "_", "") else ""}' for l in sorted(self._data))
File "/home/zeman/nastroje/udapi-python/udapi/core/coref.py", line 456, in <genexpr>
return ','.join(f'{l.target.eid_or_grp}<{self.src_mention.cluster.eid_or_grp}{":" + l.relation if l.relation not in (None, "_", "") else ""}' for l in sorted(self._data))
File "/home/zeman/nastroje/udapi-python/udapi/core/coref.py", line 291, in eid_or_grp
root = self._mentions[0].head.root
IndexError: list index out of range
When we remove a mention that is a singleton, the given cluster/entity id will disappear from the output file. This is a problem if the entity is the target of a bridging relation, or it is a part of a split antecedent of another entity. What is the proper way of finding all such relations and either removing them, or redirecting them to another cluster?
Example:
cat in.conllu | udapy -s read.OldCorefUD corefud.MergeSameSpan > out.conllu
In the first sentence, nodes 4 and 22 both define a mention with the span 4-34, but node 4 says it is cluster c10, while node 22 says it is c13. (The ultimate cause is a missing
is_member()
in the second conjunct in the original t-tree. The second conjunct is then considered a shared modifier of the coordination, hence it is included in the span of the first conjunct.)The block
corefud.MergeSameSpan
sees that the two mentions have identical spans and decides to remove the mention belonging to c13. Unfortunately, c13 is a singleton whose only reason for existence is that it is the target of a bridging relation from the next sentence. If we remove the mention without taking care of bridging, Udapi will crash when we try to write the file: