Skip to content

Commit 81261d6

Browse files
Parse the raising construction "X er sagður/talinn hafa gert Y"
The past participles sagður, talinn, álitinn and látinn followed by an infinitive ("Maðurinn er sagður hafa stolið bílnum", "Hún er talin vera í haldi") only had an analysis for "sögð vera + predicate", so the common news pattern "er sagður hafa + supine" failed to parse ("sagður vera í haldi" happened to parse with 'vera' as a noun). Add three SögnErLoBotn alternatives after SögnLhÞtVera: 'hafa' + a supine verb phrase, a plain infinitive verb phrase, and vera/hafa verið + a past participle, each with an optional adverb ("var ekki talinn hafa misnotað aðstöðu sína"). Measured on the unparsed-sentence corpus: 241 of 369 sentences with such phrases now parse. On 1000 previously parsed news sentences, 6 trees change (3 ties, 3 improved: "voru talin skekkja ímynd", "var látinn vinna", "látin vita"), 0 lost. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 parent 7ba6ea3 commit 81261d6

2 files changed

Lines changed: 27 additions & 3 deletions

File tree

src/reynir/Greynir.grammar

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2031,6 +2031,12 @@ SögnErLoBotn/tala/kyn →
20312031
| SögnErLoMM
20322032
# (Hún er/var/hefur verið) talin/álitin/sögð vera lykillinn [að því að málið leystist]
20332033
| SögnLhÞtVera_nf/tala/kyn HjSögnVera NlSagnfylling_nf
2034+
# (Maðurinn er/var) sagður/talinn [ekki] hafa stolið bílnum / hafa verið vopnaður
2035+
| SögnLhÞtVera_nf/tala/kyn FsAtv? 'hafa:so'_nh HreinSögn_sagnb/tala/kyn
2036+
# (Maðurinn er) sagður/talinn [ekki] vera í haldi lögreglu / búa í Reykjavík
2037+
| SögnLhÞtVera_nf/tala/kyn FsAtv? HreinSögn_nh/tala/kyn
2038+
# (Maðurinn er) sagður/talinn [ekki] vera/hafa verið vopnaður
2039+
| SögnLhÞtVera_nf/tala/kyn FsAtv? HjSögnEkkiVera so_lhþt_sb_nf/tala/kyn
20342040

20352041
SögnErLoMM →
20362042
FsAtv? so_0_mm_sagnb

test/test_parse.py

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -249,9 +249,8 @@ def test_parse(r: Greynir, verbose: bool = False) -> None:
249249
"borða",
250250
]
251251
assert results[12].tree.verbs == ["horfa", "borða"]
252-
assert (results[32].tree.verbs == ["finna", "segja", "gefa", "hafa", "deyja"]) or (
253-
results[32].tree.verbs == ["finna", "gefa", "hafa", "deyja"]
254-
)
252+
# 'er sögð gefa í skyn' is a raising construction: vera + sögð + gefa
253+
assert results[32].tree.verbs == ["finna", "vera", "segja", "gefa", "hafa", "deyja"]
255254
# Test that the parser finds the correct word lemmas
256255
assert results[0].tree.lemmas == [
257256
"hér",
@@ -2763,6 +2762,24 @@ def test_thess_i_stad(r) -> None:
27632762
), sentence
27642763

27652764

2765+
def test_sagdur_hafa(r) -> None:
2766+
"""Raising construction: X er sagður/talinn (ekki) hafa gert Y / vera Z"""
2767+
for sentence, verbs in (
2768+
("Maðurinn er sagður hafa stolið bílnum.", ["vera", "segja", "hafa", "stela"]),
2769+
("Konan er sögð hafa stolið bílnum.", ["vera", "segja", "hafa", "stela"]),
2770+
("Mennirnir eru sagðir hafa stolið bílnum.", ["vera", "segja", "hafa", "stela"]),
2771+
("Maðurinn er talinn hafa stolið bílnum.", ["vera", "telja", "hafa", "stela"]),
2772+
("Því var hann ekki talinn hafa misnotað aðstöðu sína.", ["vera", "telja", "hafa", "misnota"]),
2773+
("Hann er sagður vera í haldi lögreglu.", ["vera", "segja", "vera"]),
2774+
("Hún er sögð hafa verið í haldi lögreglu.", ["vera", "segja", "hafa", "vera"]),
2775+
("Hann er sagður búa í Reykjavík.", ["vera", "segja", "búa"]),
2776+
):
2777+
s = r.parse_single(sentence)
2778+
assert s and s.tree, sentence
2779+
assert s.tree.verbs == verbs, (sentence, s.tree.verbs)
2780+
assert "lhþt" in s.tree.flat, sentence
2781+
2782+
27662783
if __name__ == "__main__":
27672784
# When invoked as a main module, do a verbose test
27682785
from reynir import Greynir
@@ -2831,4 +2848,5 @@ def test_thess_i_stad(r) -> None:
28312848
test_article_with_nominalized_adjective(g)
28322849
test_quoted_question_attribution(g)
28332850
test_thess_i_stad(g)
2851+
test_sagdur_hafa(g)
28342852
g.__class__.cleanup()

0 commit comments

Comments
 (0)