diff --git a/src/reynir_correct/pattern.py b/src/reynir_correct/pattern.py index 283cb3b7..7842fc49 100644 --- a/src/reynir_correct/pattern.py +++ b/src/reynir_correct/pattern.py @@ -78,7 +78,7 @@ class IcelandicPlaces: # "fjörður": "á", # Skip this since 'í *firði' is also common "eyri": "á", "vogur": "í", - "brekka": "í", + "brekka": "í", # Ath. algeng ending á bæjarheitum sem taka með sér 'á' "staðir": "á", # "höfn": "á", # Skip this since 'í *höfn' is also common "eyjar": "í", @@ -125,6 +125,39 @@ def includes(cls, place: str) -> bool: return place in cls.ICELOC_PREP +class Countries: + + """Wraps a dictionary of country names with their + associated prepositions""" + + COUNTRIES_PREP: Optional[Dict[str, str]] = None + COUNTRIES_PREP_JSONPATH = os.path.join(os.path.dirname(__file__), "resources", "countries_prep.json") + + @classmethod + def _load_json(cls) -> None: + """Load the place name dictionary from a JSON file into memory""" + with open(cls.COUNTRIES_PREP_JSONPATH, encoding="utf-8") as f: + cls.COUNTRIES_PREP = json.load(f) + + @classmethod + def lookup_preposition(cls, place: str) -> Optional[str]: + """Look up the correct preposition to use with a placename, + or None if the placename is not known""" + if cls.COUNTRIES_PREP is None: + cls._load_json() + assert cls.COUNTRIES_PREP is not None + prep = cls.COUNTRIES_PREP.get(place) + return prep + + @classmethod + def includes(cls, place: str) -> bool: + """Return True if the given place is found in the dictionary""" + if cls.COUNTRIES_PREP is None: + cls._load_json() + assert cls.COUNTRIES_PREP is not None + return place in cls.COUNTRIES_PREP + + class PatternMatcher: """Class to match parse trees with patterns to find probable usage errors""" @@ -188,6 +221,20 @@ def get_wordform(word: str, lemma: str, cat: str, variants: Iterable[str]) -> st # Can be many possible word forms; we want the first one in most cases return wordforms[0].bmynd + def get_wordform(self, lemma, cat, variants): + """Get correct wordform from BinPackage, + given a set of variants""" + + # Get rid of argument variants in verbs: + realvars = [x for x in variants if not x.isdigit() and x not in SKIPVARS] + + wordforms = BIN.lookup_variants(lemma, cat, realvars) + if not wordforms: + return "" + else: + # Can be many possible word forms, want the first one in most cases + return wordforms[0].bmynd + def wrong_preposition_af(self, match: SimpleTree) -> None: """Handle a match of a suspect preposition pattern""" # Find the offending verb phrase @@ -1104,8 +1151,10 @@ def check_pp_with_place(self, match: SimpleTree) -> None: place = match.NP.lemma correct_preposition = IcelandicPlaces.lookup_preposition(place) if correct_preposition is None: - # This is not a known or likely place name - return + correct_preposition = Countries.lookup_preposition(place) + if correct_preposition is None: + # This is not a known or likely place name + return preposition = match.P.lemma if correct_preposition == preposition: # Correct: return diff --git a/src/reynir_correct/resources/countries_prep.json b/src/reynir_correct/resources/countries_prep.json new file mode 100644 index 00000000..cc5af5fb --- /dev/null +++ b/src/reynir_correct/resources/countries_prep.json @@ -0,0 +1,314 @@ +{ +"Afganistan":"í", +"Albanía":"í", +"Alsír":"í", +"Andorra":"í", +"Angvilla":"í", +"Angóla":"í", +"Antigva":"á", +"Antigúa":"á", +"Antígva":"á", +"Antígva og Barbúda":"á", +"Argentína":"í", +"Armenía":"í", +"Arúba":"í", +"Aserbaídsjan":"í", +"Aserbaísjan":"í", +"Aserbædjan":"í", +"Austur-Kongó":"í", +"Austur-Tímor":"í", +"Austurríki":"í", +"Azerbaijan":"í", +"Bahamaeyjar":"á", +"Bahrain":"í", +"Bandaríkin":"í", +"Bandaríki Norður-Ameríku":"í", +"Bandaríska Samóa":"í", +"Bandarísku Jómfrúaeyjar":"á", +"Bangladess":"í", +"Barbados":"á", +"Barbadoseyjar":"á", +"Barein":"í", +"Belgía":"í", +"Belís":"í", +"Benín":"í", +"Bermúdaeyjar":"á", +"Bosnía":"í", +"Bosnía og Hersegóvína":"í", +"Botsvana":"í", +"Bouveteyja":"í", +"Brasilía":"í", +"Bresku Indlandshafseyjar":"á", +"Bresku Jómfrúaeyjar":"á", +"Bretland":"í", +"Brúnei":"í", +"Burma":"í", +"Bólivía":"í", +"Búlgaría":"í", +"Búrkína Fasó":"í", +"Búrma":"í", +"Búrúndí":"í", +"Bútan":"í", +"Caicoseyjar":"á", +"Caymaneyjar":"á", +"Chile":"í", +"Cooks-eyjar":"á", +"Cookseyjar":"á", +"Curacao":"í", +"Danmörk":"í", +"Djíbútí":"í", +"Dóminíka":"á", +"Dóminíska lýðveldið":"í", +"Egiftaland":"í", +"Egiptaland":"í", +"Egyptaland":"í", +"Eistland":"í", +"Ekvador":"í", +"El Salvador":"í", +"England":"í", +"Erítrea":"í", +"Eþíópía":"í", +"Falklandseyjar":"á", +"Filippseyjar":"á", +"Finnland":"í", +"Frakkland":"í", +"Franska Gvæjana":"í", +"Franska Pólýnesía":"í", +"Frönsku suðlægu landsvæðin":"á", +"Færeyjar":"í", +"Fídjieyjar":"á", +"Fídjíeyjar":"á", +"Fílabeinsströndin":"í", +"Gabon":"í", +"Gambía":"í", +"Gana":"í", +"Georgía":"í", +"Ghana":"í", +"Grenada":"á", +"Grenadíneyjar":"á", +"Grikkland":"í", +"Grænhöfðaeyjar":"á", +"Grænland":"á", +"Guatemala":"í", +"Guernsey":"á", +"Gvadelúpeyjar":"á", +"Gvam":"í", +"Gvatemala":"í", +"Gvæjana":"í", +"Gíbraltar":"í", +"Gínea":"í", +"Gínea-Bissá":"í", +"Haítí":"á", +"Heard og McDonaldseyjar":"í", +"Hersegóvína":"í", +"Holland":"í", +"Hondúras":"í", +"Hong Kong":"í", +"Hvíta-Rússland":"í", +"Indland":"í", +"Indónesía":"í", +"Jamaíka":"á", +"Japan":"í", +"Jemen":"í", +"Jersey":"á", +"Jólaey":"á", +"Jómfrúaeyjar":"í", +"Jórdanía":"í", +"Kambódía":"í", +"Kamerún":"í", +"Kanada":"í", +"Kanaríeyjar":"á", +"Karíbahafshluti Hollands":"í", +"Kasakstan":"í", +"Katar":"í", +"Kenía":"í", +"Kenýa":"í", +"Kirgisistan":"í", +"Kirgistan":"í", +"Kongó":"í", +"Kongó-Brazzaville":"í", +"Kongó-Kinshasa":"í", +"Kosovo":"í", +"Kostaríka":"í", +"Króatía":"í", +"Kína":"í", +"Kípur":"á", +"Kíribatí":"í", +"Kíríbatí":"í", +"Kókoseyjar":"á", +"Kólumbía":"í", +"Kómoreyjar":"á", +"Kórea":"í", +"Kúba":"á", +"Kúveit":"í", +"Kýpur":"á", +"Laos":"í", +"Lesótó":"í", +"Lettland":"í", +"Liechtenstein":"í", +"Litháen":"í", +"Líbanon":"í", +"Líbería":"í", +"Líbía":"í", +"Líbýa":"í", +"Lúxemborg":"í", +"Lýbía":"í", +"Madagaskar":"á", +"Makaó":"í", +"Malasía":"í", +"Malaví":"í", +"Malawi":"í", +"Maldíveyjar":"á", +"Malta":"á", +"Malí":"í", +"Marokkó":"í", +"Marshalleyjar":"á", +"Martiník":"á", +"Mayotte":"í", +"Mexíkó":"í", +"Mikrónesía":"í", +"Mið-Afríkulýðveldið":"í", +"Miðbaugs-Gínea":"í", +"Mjanmar":"í", +"Moldavía":"í", +"Moldóva":"í", +"Mongólía":"í", +"Montserrat":"í", +"Myanmar":"í", +"Máritanía":"í", +"Máritíus":"í", +"Míkrónesía":"í", +"Mónakó":"í", +"Mósambík":"í", +"Mön":"á", +"Namibía":"í", +"Nepal":"í", +"Nevis":"í", +"Nikaragva":"í", +"Nikaragúa":"í", +"Niue":"í", +"Noregur":"í", +"Norfolkeyja":"á", +"Norður-Kórea":"í", +"Norður-Makedónía":"í", +"Norður-Maríanaeyjar":"á", +"Norður-Írland":"í", +"Nárú":"á", +"Níger":"í", +"Nígería":"í", +"Níkaragva":"í", +"Nýja-Kaledónía":"í", +"Nýja-Sjáland":"á", +"Pakistan":"í", +"Palestína":"í", +"Palá":"í", +"Panama":"í", +"Papúa":"í", +"Papúa Nýja-Gínea":"í", +"Paragvæ":"í", +"Perú":"í", +"Pitcairn-eyjar":"á", +"Portúgal":"í", +"Páfagarður":"í", +"Páfaríki":"í", +"Páfastóll":"í", +"Pólland":"í", +"Púertó Ríkó":"í", +"Réunion":"í", +"Rúanda":"í", +"Rúmenía":"í", +"Rússland":"í", +"Saint-Martin":"á", +"Salvador":"í", +"Salómonseyjar":"á", +"Sambía":"í", +"Sameinuðu arabísku furstadæmin":"í", +"Samóa":"í", +"San Marínó":"í", +"Sankti Bartólómeusareyjar":"á", +"Sankti Helena":"á", +"Sankti Kitts og Nevis":"í", +"Sankti Lúsía":"á", +"Sankti Martin":"á", +"Sankti Pierre og Miquelon":"á", +"Sankti Vinsent og Grenadíneyjar":"á", +"Saó Tóme og Prinsípe":"í", +"Senegal":"í", +"Serbía":"í", +"Seychelles-eyjar":"á", +"Seychelleseyjar":"á", +"Simbabve":"í", +"Singapúr":"í", +"Skotland":"í", +"Slóvakía":"í", +"Slóvenía":"í", +"Smáeyjar Bandaríkjanna":"í", +"Spánn":"á", +"Sri Lanka":"á", +"Srí Lanka":"á", +"Stóra-Bretland":"í", +"Suður-Afríka":"í", +"Suður-Georgía og Suður-Sandvíkureyjar":"á", +"Suður-Kórea":"í", +"Suður-Súdan":"í", +"Suðurskautslandið":"á", +"Svalbarði og Jan Mayen":"á", +"Svartfjallaland":"í", +"Svasíland":"í", +"Sviss":"í", +"Svíþjóð":"í", +"Sádi-Arabía":"í", +"Síerra Leóne":"í", +"Síle":"í", +"Sómalía":"í", +"Súdan":"í", +"Súrínam":"í", +"Sýrland":"í", +"Tadsjikistan":"í", +"Tansanía":"í", +"Taíland":"í", +"Taívan":"í", +"Tonga":"í", +"Trínidad":"í", +"Trínidad og Tóbagó":"í", +"Tsjad":"í", +"Turks- og Caicoseyjar":"á", +"Tyrkland":"í", +"Tæland":"í", +"Tékkland":"í", +"Tímor-Leste":"í", +"Tóbagó":"í", +"Tógó":"í", +"Tókelá":"í", +"Túnis":"í", +"Túrkmenistan":"í", +"Túvalú":"í", +"Ungverjaland":"í", +"Vanúatú":"á", +"Vatikan":"í", +"Vatikanið":"í", +"Vatikanríki":"í", +"Vatíkan":"í", +"Vatíkanið":"í", +"Vatíkanríki":"í", +"Venesúela":"í", +"Vestur-Kongó":"í", +"Vestur-Sahara":"í", +"Víetnam":"í", +"Wales":"í", +"Wallis- og Fútúnaeyjar":"á", +"Álandseyjar":"á", +"Ástralía":"í", +"Írak":"í", +"Íran":"í", +"Írland":"á", +"Ísland":"á", +"Ísrael":"í", +"Ítalía":"á", +"Óman":"í", +"Úganda":"í", +"Úkraína":"í", +"Úrúgvæ":"í", +"Úsbekistan":"í", +"Þýskaland":"í" +} \ No newline at end of file diff --git a/src/reynir_correct/resources/iceloc_prep.json b/src/reynir_correct/resources/iceloc_prep.json index 7e25651b..fcdeb176 100644 --- a/src/reynir_correct/resources/iceloc_prep.json +++ b/src/reynir_correct/resources/iceloc_prep.json @@ -29,6 +29,7 @@ "Auðnir": "á", "Auðshaugur": "á", "Auðsholt": "í", + "Austurstræti": "í", "Bakkagerði": "í", "Bakki": "á", "Bár": "í", @@ -108,6 +109,7 @@ "Ferjubakki": "á", "Finnmörk": "á", "Fitjar": "á", + "Fjarðabyggð": "í", "Fjarðarhorn": "í", "Fjósatunga": "í", "Flaga": "í", @@ -137,6 +139,7 @@ "Gilsbakki": "á", "Gjögur": "á", "Glóra": "í", + "Grafarvogur": "í", "Grænavatn": "á", "Grenivík": "í", "Grenjaðarstaður": "á", @@ -238,6 +241,7 @@ "Hveragerði": "í", "Hveravellir": "á", "Hvoll": "á", + "Hvolsvöllur": "á", "Ingjaldshóll": "á", "Ingunnarstaðir": "á", "Jaðar": "á", @@ -253,6 +257,7 @@ "Kirkjubær": "í", "Kirkjuból": "á", "Kjálki": "á", + "Kjarardalur": "í", "Kjarnholt": "í", "Klængshóll": "á", "Klaustur": "á", @@ -275,6 +280,7 @@ "Kvennabrekka": "á", "Kvígindisdalur": "í", "Kvísker": "á", + "Lækjarbakki": "á", "Lækur": "á", "Lambafell": "á", "Lambavatn": "á", @@ -433,6 +439,7 @@ "Vatnshorn": "í", "Vellir": "á", "Vestmannaeyjar": "í", + "Vesturlönd": "á", "Viðey": "í", "Vík": "í", "Víkingavatn": "á",