@@ -2245,6 +2245,178 @@ def test_aukafall(r):
22452245 assert s and s .tree
22462246
22472247
2248+ def test_impersonal_passive_prep (r ):
2249+ """The 'vera* bent á' ambiguous phrase must retain the preposition
2250+ meaning of 'á', so that 'er bent á' + Nl parses"""
2251+ s = r .parse_single ("Í skýrslunni er bent á kostina." )
2252+ assert s and s .tree
2253+ assert (
2254+ s .tree .flat_with_all_variants
2255+ == "S0 S-MAIN IP PP P fs_þgf /P NP no_et_gr_kvk_þgf /NP /PP "
2256+ "VP VP-AUX so_et_fh_gm_nt_p3 /VP-AUX VP so_gm_sagnb /VP "
2257+ "PP P fs_þf /P NP no_ft_gr_kk_þf /NP /PP /VP /IP /S-MAIN p /S0"
2258+ )
2259+ s = r .parse_single ("Í skýrslunni er bent á kosti og galla upptöku evru." )
2260+ assert s and s .tree
2261+ # 'bent á' followed by a subordinate clause must still work
2262+ s = r .parse_single ("Í skýrslunni er bent á að vandinn sé mikill." )
2263+ assert s and s .tree
2264+ s = r .parse_single (
2265+ "Í nýrri ársskýrslu sjóðsins um Ísland er bent á kosti og galla "
2266+ "upptöku evru og varað við því að verðtrygging í íslensku "
2267+ "efnahagslífi geti viðhaldið verðbólgu."
2268+ )
2269+ assert s and s .tree
2270+
2271+
2272+ def test_uninflected_genitive_names (r ):
2273+ """Non-inflecting (foreign) person names, i.e. names having identical
2274+ forms in nf/þf/þgf, should also be accepted in genitive contexts"""
2275+ s = r .parse_single ("Samtök Paul Watson mótmæltu hvalveiðum." )
2276+ assert s and s .tree
2277+ assert (
2278+ s .tree .flat_with_all_variants
2279+ == "S0 S-MAIN IP NP-SUBJ no_ft_hk_nf NP-POSS person_ef_kk person_ef_kk "
2280+ "/NP-POSS /NP-SUBJ VP VP so_1_þgf_fh_ft_gm_p3_þt /VP "
2281+ "NP-OBJ no_ft_kvk_þgf /NP-OBJ /VP /IP /S-MAIN p /S0"
2282+ )
2283+ s = r .parse_single ("Ég las bók John Lennon." )
2284+ assert s and s .tree
2285+ s = r .parse_single (
2286+ "Samtök Paul Watson leiða líkur að því að þau hafi með aðgerðum "
2287+ "sínum frá því að hvalveiðitímabilið hófst bjargað lífi "
2288+ "allt að þrjátíu langreyða."
2289+ )
2290+ assert s and s .tree
2291+ # Inflecting Icelandic names must not gain a genitive interpretation
2292+ s = r .parse_single ("Samtök Guðmundur Jónsson eru góð." )
2293+ assert s .tree is None
2294+ # Token-level check of person name cases
2295+ from reynir .bintokenizer import tokenize
2296+
2297+ toks = [t for t in tokenize ("Samtök Paul Watson mótmæltu hvalveiðum." )]
2298+ pw = next (t for t in toks if t .txt == "Paul Watson" )
2299+ assert set (pn .case for pn in pw .person_names ) == {"nf" , "þf" , "þgf" , "ef" }
2300+ toks = [t for t in tokenize ("Þarna gengur Jón." )]
2301+ jon = next (t for t in toks if t .txt == "Jón" )
2302+ assert "ef" not in set (pn .case for pn in jon .person_names )
2303+
2304+
2305+ def test_sem_role_relative_clause (r ):
2306+ """A 'sem' + Nl_nf role complement ('starfar sem sérfræðingur')
2307+ must be allowed inside a subject-gap relative clause"""
2308+ s = r .parse_single ("Konan, sem starfar sem sérfræðingur hjá bankanum, er glöð." )
2309+ assert s and s .tree
2310+ assert (
2311+ s .tree .flat_with_all_variants
2312+ == "S0 S-MAIN IP NP-SUBJ no_et_gr_kvk_nf p CP-REL C stt /C "
2313+ "IP VP so_0_et_fh_gm_nt_p3 /VP CP-ADV-CMP C st /C NP no_et_kk_nf "
2314+ "PP P fs_þgf /P NP no_et_gr_kk_þgf /NP /PP /NP /CP-ADV-CMP /IP "
2315+ "/CP-REL p /NP-SUBJ VP VP-AUX so_et_fh_gm_nt_p3 /VP-AUX "
2316+ "NP-PRD lo_et_kvk_nf_sb /NP-PRD /VP /IP /S-MAIN p /S0"
2317+ )
2318+ s = r .parse_single (
2319+ "Doktor Stefán Ólafsson, sem starfar sem sérfræðingur hjá Eflingu, "
2320+ "gefur ekki mikið fyrir myljandi hagnað bankanna."
2321+ )
2322+ assert s and s .tree
2323+
2324+
2325+ def test_oblique_subject_infinitive (r ):
2326+ """Oblique subject + perfect infinitive ('hafa' + supine) in the
2327+ complement of segja/telja: 'segir Spáni hafa mistekist'"""
2328+ s = r .parse_single ("Hún segir Spáni hafa mistekist að vernda landamærin." )
2329+ assert s and s .tree
2330+ assert (
2331+ s .tree .flat_with_all_variants
2332+ == "S0 S-MAIN IP NP-SUBJ pfn_et_kvk_nf_p3 /NP-SUBJ VP VP "
2333+ "so_1_þf_et_fh_gm_nt_p3 /VP IP NP no_et_kk_þgf /NP VP so_0_gm_nh /VP "
2334+ "VP so_mm_sagnb /VP IP-INF TO nhm /TO VP VP so_1_þf_gm_nh /VP "
2335+ "NP-OBJ no_ft_gr_hk_þf /NP-OBJ /VP /IP-INF /IP /VP /IP /S-MAIN p /S0"
2336+ )
2337+ s = r .parse_single ("Hún segir mig hafa dreymt vel." )
2338+ assert s and s .tree
2339+ s = r .parse_single ("Hún telur Spáni hafa mistekist." )
2340+ assert s and s .tree
2341+ s = r .parse_single (
2342+ "Hún segir Spáni hafa mistekist að vernda ytri landamæri "
2343+ "Schengen-svæðisins gegn innrás."
2344+ )
2345+ assert s and s .tree
2346+
2347+
2348+ def test_postposed_vegna (r ):
2349+ """A genitive Nl preceding 'vegna' ('sýningarinnar vegna')
2350+ should parse as a prepositional phrase"""
2351+ s = r .parse_single ("Sýningarinnar vegna ákvað hann þetta." )
2352+ assert s and s .tree
2353+ assert (
2354+ s .tree .flat_with_all_variants
2355+ == "S0 S-MAIN IP PP NP no_ef_et_gr_kvk /NP P fs_ef /P /PP "
2356+ "VP VP so_1_þf_et_fh_gm_p3_þt /VP NP-SUBJ pfn_et_kk_nf_p3 /NP-SUBJ "
2357+ "NP-OBJ fn_et_hk_þf /NP-OBJ /VP /IP /S-MAIN p /S0"
2358+ )
2359+ s = r .parse_single ("Hann gerði þetta mín vegna." )
2360+ assert s and s .tree
2361+ s = r .parse_single ("Hann gerði þetta veðursins vegna." )
2362+ assert s and s .tree
2363+ # Normal (preposed) order must be unaffected
2364+ s = r .parse_single ("Hann gerði þetta vegna veðursins." )
2365+ assert s and s .tree
2366+ s = r .parse_single ("Trén standa beggja vegna vegarins." )
2367+ assert s and s .tree
2368+ s = r .parse_single (
2369+ "Umboðsmaður Boy George sagði að sýningarinnar vegna hefði hann "
2370+ "ákveðið að söngvarinn yrði ekki með í henni."
2371+ )
2372+ assert s and s .tree
2373+
2374+
2375+ def test_pronoun_postposed_adjective (r ):
2376+ """A personal pronoun followed by an agreeing adjective phrase
2377+ should form a noun phrase: '(með) hann fremstan (í fararbroddi)'"""
2378+ s = r .parse_single ("Með hann fremstan í fararbroddi vann liðið leikinn." )
2379+ assert s and s .tree
2380+ assert (
2381+ s .tree .flat_with_all_variants
2382+ == "S0 S-MAIN IP PP P fs_þf /P NP pfn_et_kk_p3_þf lo_esb_et_kk_þf "
2383+ "PP P fs_þgf /P NP no_et_kk_þgf /NP /PP /NP /PP "
2384+ "VP VP so_1_þf_et_fh_gm_p3_þt /VP NP-SUBJ no_et_gr_hk_nf /NP-SUBJ "
2385+ "NP-OBJ no_et_gr_kk_þf /NP-OBJ /VP /IP /S-MAIN p /S0"
2386+ )
2387+ s = r .parse_single ("Ég hitti hana glaða." )
2388+ assert s and s .tree
2389+ s = r .parse_single (
2390+ "Með hann fremstan í fararbroddi tókst liði Levante "
2391+ "að bjarga sér frá falli."
2392+ )
2393+ assert s and s .tree
2394+
2395+
2396+ def test_designation_numeral (r ) -> None :
2397+ """An uninflected neuter nominative numeral used as a designation
2398+ after a noun: '(lögreglu)stöð tvö', 'stofa fimm'"""
2399+ s = r .parse_single ("Hann býr í umdæmi lögreglustöðvar tvö." )
2400+ assert s and s .tree
2401+ assert (
2402+ s .tree .flat_with_all_variants
2403+ == "S0 S-MAIN IP NP-SUBJ pfn_et_kk_nf_p3 /NP-SUBJ VP VP so_0_et_fh_gm_nt_p3 /VP "
2404+ "PP P fs_þgf /P NP no_et_hk_þgf NP-POSS no_ef_et_kvk to_ft_hk_nf "
2405+ "/NP-POSS /NP /PP /VP /IP /S-MAIN p /S0"
2406+ )
2407+ s = r .parse_single ("Hann býr í stofu fimm." )
2408+ assert s and s .tree
2409+ s = r .parse_single (
2410+ "Það átti sér stað í umdæmi lögreglustöðvar tvö, "
2411+ "sem sér um Hafnarfjörð og Garðabæ."
2412+ )
2413+ assert s and s .tree
2414+ # An agreeing numeral must still be preferred where possible
2415+ s = r .parse_single ("Ég sá mennina þrjá." )
2416+ assert s and s .tree
2417+ assert "to_ft_kk_þf" in s .tree .flat_with_all_variants
2418+
2419+
22482420if __name__ == "__main__" :
22492421 # When invoked as a main module, do a verbose test
22502422 from reynir import Greynir
@@ -2296,4 +2468,11 @@ def test_aukafall(r):
22962468 print (e )
22972469 test_foreign (g )
22982470 test_aukafall (g )
2471+ test_impersonal_passive_prep (g )
2472+ test_uninflected_genitive_names (g )
2473+ test_sem_role_relative_clause (g )
2474+ test_oblique_subject_infinitive (g )
2475+ test_postposed_vegna (g )
2476+ test_pronoun_postposed_adjective (g )
2477+ test_designation_numeral (g )
22992478 g .__class__ .cleanup ()
0 commit comments