Skip to content

Commit

Permalink
Merge branch 'master' of github.com:mideind/GreynirPackage
Browse files Browse the repository at this point in the history
  • Loading branch information
vthorsteinsson committed Jan 29, 2021
2 parents c000107 + 2d64d89 commit c0d2491
Show file tree
Hide file tree
Showing 7 changed files with 278 additions and 14 deletions.
42 changes: 39 additions & 3 deletions src/reynir/Greynir.grammar
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,9 @@ Forskeyti →
| "sem:st" 'segja:so'_lhþt_sb_hk_nf_et ":" # sem sagt
| 'aðferð:kvk'_nf_et ":"
| 'með_öðrum_orðum:ao' ":" | 'með:fs'_þgf 'annar:lo'_hk_þgf_ft 'orð:hk'_þgf_ft ":"
| 'að:fs'_þgf 'lok:hk'_ft_þgf ":"
| GreinarForskeyti
| NhLiður "," | NhLiður ":" # Að veiða eða sleppa, hver er skoðun þín?

GreinarForskeyti →
Greinarnúmer ":"
Expand Down Expand Up @@ -202,6 +204,7 @@ SögnSegja/tala/pers →
| 'staðhæfa:so'_0_gm_fh/tala/pers
| 'ítreka:so'_0_gm_fh/tala/pers
| 'viðurkenna:so'_0_gm_fh/tala/pers
| 'álíta:so'_0_gm_fh/tala/pers

AðSögn →
# , að sögn fulltrúa lögregluyfirvalda
Expand Down Expand Up @@ -430,6 +433,7 @@ Tilgangssetning →
Viðurkenningarsetning →
Viðurkenningartenging BeygingarliðurÁnUmröðunar
| Viðurkenningartenging BeygingarliðurÁnF
| Enda BeygingarliðurMeðUmröðun

Afleiðingarsetning →
Afleiðingartenging BeygingarliðurÁnUmröðunar
Expand Down Expand Up @@ -482,6 +486,7 @@ SkýringarBotn →
| SetningUmAðRæða # Ég taldi að um hefði verið að ræða mistök af hans hálfu
| SetningSoÞað # Ég taldi að farið hefði verið ofan í saumana á málinu
| AtvSkýring # Ég taldi að hér væri vandamál á ferðinni
| SetningÁnF # Ég taldi að sést hefði til himins

# AtvSkýring er eins og BeygingarliðurMeðUmröðun nema hvað forskeytis er krafist,
# það er ekki valfrjálst eins og BeygingarliðMeðUmröðun
Expand Down Expand Up @@ -632,6 +637,10 @@ Viðurkenningartenging →
| "jafnvel:ao"? "þó:st" "svo:ao"? "að:st"
| VillaÞóAð
| 'þrátt_fyrir:ao' 'það:pfn'_hk_þf_et? "að:st"
| Enda

Enda →
"enda:st"

$score(+6) Viðurkenningartenging

Expand Down Expand Up @@ -1608,11 +1617,14 @@ OgSögn_mm_sagnb →

OgSögn_sagnb/tala/kyn →
# (hefur staðið) keikur í brúnni og mótmælt yfirgangi Rússa
LoTengtSögn_nf/tala/kyn? FsAtv? Aðaltenging FsAtv? EinSögn_sagnb/tala/kyn
LoTengtSögn_nf/tala/kyn? FsAtv? ÁframOgSögn_sagnb/tala/kyn* Aðaltenging FsAtv? EinSögn_sagnb/tala/kyn
| LoTengtSögn_nf/tala/kyn? FsAtv? "," Aðaltenging FsAtv? EinSögn_sagnb/tala/kyn FsAtvKomma?

$score(+6) OgSögn_sagnb/tala/kyn # Enn sterkari plús fyrir runu sagnb

ÁframOgSögn_sagnb/tala/kyn →
","? EinSögn_sagnb/tala/kyn LoTengtSögn_nf/tala/kyn? FsAtv?

OgSögn_nh/tala/kyn →
SagnInnskot? Aðaltenging FsAtv? EinSögn_nh/tala/kyn
| SagnInnskot? ViðurkenningarNh
Expand Down Expand Up @@ -2284,16 +2296,27 @@ Sögn_2_nh →

Andlög/fall/afall →
NlÓbeintAndlag/fall AndlögBotn/fall/afall
| UmsnúinAndlög/fall/afall # Konurnar aðlöguðu skóinn sér

Andlög/fall/afall/tala/kyn →
NlÓbeintAndlag/fall LoTengtSögn_nf/tala/kyn? AndlögBotn/fall/afall
| UmsnúinAndlög/fall/afall

UmsnúinAndlög/fall/afall →
NlBeintAndlag/afall UmsnúinAndlögBotn/fall

UmsnúinAndlögBotn/fall →
NlÓbeintAndlag/fall
| LoAtviksliður* lo_mst/fall/tala/kyn NlÓbeintAndlag/fall/tala/pers/kyn SamanburðarNafnliður

AndlögBotn/fall/afall →
# (gefa Páli) [stóra] gjöf
NlBeintAndlag/afall
# (gefa Páli) [talsvert] stærri gjöf/flottari bíl en mér/Sigríði
| LoAtviksliður* lo_mst/afall/tala/kyn NlBeintAndlag/afall/tala/pers/kyn SamanburðarNafnliður

$score(-10) UmsnúinAndlög/fall/afall

So_2_nh_þf_nf → so_2_þf_nf_nh
So_2_nh_þf_þf → so_2_þf_þf_nh
So_2_nh_þf_þgf → so_2_þf_þgf_nh
Expand Down Expand Up @@ -2374,6 +2397,7 @@ So_1_þf_nh/tala/pers →
| 'sjá:so'_1_þf_gm/tala/pers
| 'kveða:so'_1_þf_gm/tala/pers
| 'sýna:so'_1_þf_gm/tala/pers
| 'finna:so'_1_þf_gm/tala/pers
| SoHorfaÁ/tala/pers

SoHorfaÁ/tala/pers →
Expand Down Expand Up @@ -3222,7 +3246,8 @@ NlBeintAndlag_nf_et_p3 → NlSpurnaraukasetning | NlSkýringarsetning
NlBeintAndlag_þf_et_p3 → NlSpurnaraukasetning | NlSkýringarsetning
NlBeintAndlag_þgf_et_p3 → NlSpurnaraukasetning | NlSkýringarsetning
NlBeintAndlag_ef_et_p3 → NlSpurnaraukasetning | NlSkýringarsetning
NlÓbeintAndlag/fall → Nl/fall | NlSkýringarsetning
NlÓbeintAndlag/fall → Nl/fall | NlSkýringarsetning | NlSpurnaraukasetning
NlÓbeintAndlag/fall/tala/pers/kyn → Nl/fall/tala/pers/kyn | NlSpurnaraukasetning # Mér finnst óeðlilegt hvernig málin þróuðust
NlSagnfylling/fall → Nl/fall | NlSkýringarsetning
NlSagnfylling/fall/tala/pers/kyn → Nl/fall/tala/pers/kyn
NlSagnfylling_nf_et_p3_hk → NlSkýringarsetning
Expand Down Expand Up @@ -3957,6 +3982,8 @@ Tala_hk_nf → to_et_hk_nf | to_ft_hk_nf
NlStak_et_p3/fall/kyn →
NlStak_p3_et/fall/kyn VeikSögnLhÞt_et/fall/kyn? FsRunaEftirNl? # fulltrúi bankans í nefndinni
| NlStak_et_p3/fall/kyn Eða NlStak_p3_et/fall # Þingnefnd eða hluti Alþingismanna getur lagt fram frumvarp
| AnnaðhvortSt Nl/fall Eða Nl/fall/kyn # Hér er annaðhvort snjór eða sól
| AnnaðhvortSt Nl/fall/kyn Eða Nl/fall # Hér er annaðhvort snjór eða sól
| 'hver:fn'_et/fall/kyn Og 'einn:fn'_et/fall/kyn FsRunaEftirNl? # 'hver og einn [í sinni sveit] (ber ábyrgð)'
| EinnAf_et_p3/fall/kyn # einn af drengjunum [sem tóku þátt] (vann keppnina)

Expand Down Expand Up @@ -5445,6 +5472,7 @@ LoKommaTengdSögn/tala/fall/kyn →
LoTengtSögn_nf/tala/kyn →
LoSamanb_nf/tala/kyn
| AtviksliðurEinkunn* LoFornafn_nf/tala/kyn # (Hann komst) sjálfur (út úr flakinu)
| AtviksliðurEinkunn* RaðTala_nf/tala/kyn # (Hann varð) fjórði (í hlaupinu)
| LoTengtSögn_nf/tala/kyn LoKommaTengdSögn_nf/tala/kyn* KommaOgEðaEn LoSamanb_nf/tala/kyn

LoTengtSögn_nf_ft/kyn →
Expand Down Expand Up @@ -5484,6 +5512,7 @@ FsMeðFallstjórn →
| 'bera:so'_lhþt_sb_hk_nf_et "saman:ao" 'við:fs'_þf Nl_þf # borið saman við (fyrra ár)
| "fyrir:ao" "nú:ao"? 'utan:fs'_þf Nl_þf
| "innan:ao" "sem:st" 'utan:fs'_ef Nl_ef
| ÁMóti
| "hvað:ao" FsHvaðVarðar
# allt frá hruni, allt frá börnum til fullorðinna
| Allt 'frá:fs'_þgf Nl_þgf
Expand Down Expand Up @@ -5574,6 +5603,13 @@ FsMilli →

$score(+6) FsMilli

# Sérregla fyrir "á móti" til að koma í veg fyrir að greinist
# sem forsetningarliður
ÁMóti →
"á:ao" 'móti:fs'_þgf Nl_þgf

$score(+24) ÁMóti

# Sérregla fyrir "út frá" vegna þess að "út frá því að S" er
# algengt mynstur sem annars þáttast sem Tíðarsetning
FsÚtFrá →
Expand Down Expand Up @@ -5634,7 +5670,7 @@ EinFsAtv →
Nema? FsMeðFallstjórn
| EinnAl
# '(hann tók á móti mér) hlæjandi'
| SögnLhNt
| SögnLhNt # Varðandi blákaldan raunveruleikann
| SamsettFsAtv
| AlTilv # Hún horfir þangað sem hann stóð

Expand Down
51 changes: 42 additions & 9 deletions src/reynir/bintokenizer.py
Original file line number Diff line number Diff line change
Expand Up @@ -338,7 +338,10 @@ def all_except_suffix(s):
# Set of foreign middle names that start with a lower case letter
# ('Louis de Broglie', 'Jan van Eyck')
# 'of' was also here but caused problems
FOREIGN_MIDDLE_NAME_SET = frozenset(("van", "de", "den", "der", "el", "al"))
FOREIGN_MIDDLE_NAME_SET = frozenset(("van", "de", "den", "der", "el", "al", "von", "la"))

ENTITY_MIDDLE_NAME_SET = frozenset(("in", "a", "an", "for", "and", "the", "for", "on", "of"))


# Given names that can also be family names (and thus gender- and caseless as such)
BOTH_GIVEN_AND_FAMILY_NAMES = frozenset(("Hafstein",))
Expand Down Expand Up @@ -1327,7 +1330,7 @@ def eat_surnames(


def parse_phrases_3(
token_stream: Iterator[Tok], token_ctor: TokenConstructor
db: BIN_Db, token_stream: Iterator[Tok], token_ctor: TokenConstructor
) -> Iterator[Tok]:
""" Parse a stream of tokens looking for phrases and making substitutions.
Third pass: coalesce uppercase, otherwise unrecognized words with
Expand All @@ -1344,6 +1347,9 @@ def is_interesting(token) -> bool:
def can_concat(token) -> bool:
""" Return True if the token content can be concatenated onto
an existing entity name """
# Non-capitalized function words that can appear within entity names
if token.txt in ENTITY_MIDDLE_NAME_SET or token.txt in FOREIGN_MIDDLE_NAME_SET:
return True
if token.kind != TOK.ENTITY and token.kind != TOK.WORD:
return False
if not token.txt[0].isupper():
Expand Down Expand Up @@ -1377,12 +1383,38 @@ def not_in_bin(token) -> bool:
while True:

if not concatable and not is_interesting(token):
yield token
# Make sure that token is None if next() raises StopIteration
token = cast(Tok, None)
token = next(token_stream)
continue

if token.txt and " " in token.txt and token.txt.split(" ")[-1] in FOREIGN_MIDDLE_NAME_SET:
# Combined in parse_phrases_2() but no capitalized word follows
# Should be split up
split = token.txt.split()
first = split[:-1]
middle = ""
if first[-1] in FOREIGN_MIDDLE_NAME_SET:
# Allow one more check, in case of "de la"
middle = first[-1]
first = first[:-1]
if token.kind == TOK.PERSON:
token = token_ctor.Person(
" ".join(first),
[
PersonName(" ".join(first), pn.gender, pn.case)
for pn in token.val
],
)
else:
token = token_ctor.Entity(" ".join(first))
yield token
if middle:
w, m = db.lookup_word(middle)
yield token_ctor.Word(middle, m)
w, m = db.lookup_word(split[-1])
token = token_ctor.Word(split[-1], m)
else:
yield token
# Make sure that token is None if next() raises StopIteration
token = cast(Tok, None)
token = next(token_stream)
continue
next_token = next(token_stream)
concatable = False

Expand Down Expand Up @@ -1821,7 +1853,8 @@ def parse_phrases_2(self, stream: TokenIterator) -> TokenIterator:

def parse_phrases_3(self, stream: TokenIterator) -> TokenIterator:
""" Additional person and entity name logic """
return parse_phrases_3(stream, self._token_ctor)
assert self._db is not None
return parse_phrases_3(self._db, stream, self._token_ctor)

def fix_abbreviations(self, stream: TokenIterator) -> TokenIterator:
""" Fix sentence splitting relating to abbreviations """
Expand Down
2 changes: 0 additions & 2 deletions src/reynir/config/Phrases.conf
Original file line number Diff line number Diff line change
Expand Up @@ -1105,7 +1105,6 @@ meaning = ao frasi -
"alla tíð", "foveo nveo", "allur tíð"
"allar götur síðan", "fovfo nvfo aa", "allur gata síðan"
"að jafnaði", "aþ nkeþ", "að jafnaði"
"að lokum", "aþ nhfþ", "að lok"
"að endingu", "aþ nveþ", "að ending"
"að svo komnu máli", "aþ aa lheþvf nheþ", "að svo kominn mál"
"að svo stöddu", "aþ aa lheþsf", "að svo staddur"
Expand Down Expand Up @@ -1445,7 +1444,6 @@ meaning = ao frasi - # Ekki breyta þessu í fs!
"fyrir utan", "ao aa", "fyrir utan"
"fyrir vestan", "ao aa", "fyrir vestan"
"fyrir hönd", "ao nveo", "fyrir hönd"
"á móti", "aa aa", "á móti"
"á eftir", "aa aa", "á eftir"
"á undan", "aa aa", "á undan"
"á meðal", "aa aa", "á meðal"
Expand Down
4 changes: 4 additions & 0 deletions src/reynir/config/Verbs.conf
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,7 @@ axla þf # fast andlag 'ábyrgð'? 'skyldu sína' líka?
ágerast
ágirnast þf
ágæða þf
áhræra þf
ákalla þf
ákvarða þf
ákvarða þgf þf
Expand Down Expand Up @@ -1305,6 +1306,7 @@ fimmfaldast
fingra þf
finna /til þf /handa þgf /að þgf /við þf /fyrir þgf /til ef /upp þf
finna þf /á þgf
finna þf
finna þgf
finna þgf þf
finnast /á þgf /í þgf
Expand Down Expand Up @@ -2605,6 +2607,7 @@ hringa þf /um þf # 'hringa sig um e-ð'
hringast
hringbeygja þf
hringja /í þf /til ef /við þf
hringja þf # hringja símtöl
hringja þgf
hringla /í þgf /með þf
hringla þgf
Expand Down Expand Up @@ -3825,6 +3828,7 @@ mása
máta
máta þf /á þf
meðganga þf
meðhöndla þf
meðkenna þf
meðtaka þf
mega /við þgf
Expand Down
1 change: 1 addition & 0 deletions src/reynir/simpletree.py
Original file line number Diff line number Diff line change
Expand Up @@ -229,6 +229,7 @@
"Tíðartenging": "C",
"Tilgangstenging": "C",
"Viðurkenningartenging": "C",
"Enda": "C",
"Afleiðingartenging": "C",
"Orsakartenging": "C",
"OrsakartengingUmröðun": "C",
Expand Down
6 changes: 6 additions & 0 deletions test/test_parse.py
Original file line number Diff line number Diff line change
Expand Up @@ -2041,6 +2041,12 @@ def test_neutral_pronoun(r):
"C st /C IP VP VP so_gm_sagnb /VP VP so_et_fh_gm_p3_þt /VP PP P fs_þgf "
"/P NP no_et_kvk_þgf /NP /PP PP P fs_þf /P NP pfn_et_hk_p3_þf /NP /PP "
"/VP /IP /CP-THT /NP-OBJ /VP /IP /S-MAIN p /S0"
) or (
s.tree.flat_with_all_variants == "S0 S-MAIN IP NP-SUBJ pfn_et_hk_p3_þgf "
"/NP-SUBJ VP VP so_1_nf_subj_op_þgf_et_fh_gm_þt /VP NP-OBJ eo CP-THT "
"C st /C IP VP VP so_0_et_hk_lhþt_nf_sb /VP VP so_et_fh_gm_p3_þt /VP "
"/VP PP P fs_þgf /P NP no_et_kvk_þgf /NP /PP PP P fs_þf /P NP "
"pfn_et_hk_p3_þf /NP /PP /IP /CP-THT /NP-OBJ /VP /IP /S-MAIN p /S0"
)


Expand Down
Loading

0 comments on commit c0d2491

Please sign in to comment.