From 04ef5025bdd3894458e7569dee7bf4ac55699b8f Mon Sep 17 00:00:00 2001 From: ines Date: Mon, 8 May 2017 15:51:22 +0200 Subject: [PATCH] Reorganise Norwegian language data --- spacy/nb/__init__.py | 28 ++--- spacy/nb/morph_rules.py | 22 ++-- spacy/nb/stop_words.py | 28 +++-- spacy/nb/tokenizer_exceptions.py | 209 ++++++------------------------- 4 files changed, 77 insertions(+), 210 deletions(-) diff --git a/spacy/nb/__init__.py b/spacy/nb/__init__.py index fd0cf9db0..f6ac9fdbb 100644 --- a/spacy/nb/__init__.py +++ b/spacy/nb/__init__.py @@ -1,28 +1,26 @@ -# encoding: utf8 -from __future__ import unicode_literals, print_function +# coding: utf8 +from __future__ import unicode_literals -from os import path +from .tokenizer_exceptions import TOKENIZER_EXCEPTIONS +from .stop_words import STOP_WORDS +from .morph_rules import MORPH_RULES +from ..language_data import BASE_EXCEPTIONS from ..language import Language from ..attrs import LANG +from ..util import update_exc -# Import language-specific data -from .language_data import * - - -# create Language subclass class Norwegian(Language): - lang = 'nb' # ISO code + lang = 'nb' class Defaults(Language.Defaults): lex_attr_getters = dict(Language.Defaults.lex_attr_getters) lex_attr_getters[LANG] = lambda text: 'nb' - - # override defaults - tokenizer_exceptions = TOKENIZER_EXCEPTIONS - #tag_map = TAG_MAP - stop_words = STOP_WORDS + + tokenizer_exceptions = update_exc(BASE_EXCEPTIONS, TOKENIZER_EXCEPTIONS) + stop_words = set(STOP_WORDS) + morph_rules = dict(MORPH_RULES) -EXPORT = Norwegian \ No newline at end of file +__all__ = ['Norwegian'] diff --git a/spacy/nb/morph_rules.py b/spacy/nb/morph_rules.py index 38498513b..4cf8efee5 100644 --- a/spacy/nb/morph_rules.py +++ b/spacy/nb/morph_rules.py @@ -1,18 +1,18 @@ # encoding: utf8 -# norwegian bokmål from __future__ import unicode_literals - -from ..symbols import * -from ..language_data import PRON_LEMMA - + +from ..symbols import LEMMA +from ..deprecated import PRON_LEMMA + + # Used the table of pronouns at https://no.wiktionary.org/wiki/Tillegg:Pronomen_i_norsk - + MORPH_RULES = { "PRP": { "jeg": {LEMMA: PRON_LEMMA, "PronType": "Prs", "Person": "One", "Number": "Sing", "Case": "Nom"}, "meg": {LEMMA: PRON_LEMMA, "PronType": "Prs", "Person": "One", "Number": "Sing", "Case": "Acc"}, "du": {LEMMA: PRON_LEMMA, "PronType": "Prs", "Person": "Two", "Number": "Sing", "Case": "Nom"}, - "deg": {LEMMA: PRON_LEMMA, "PronType": "Prs", "Person": "Two", "Number": "Sing", "Case": "Acc"}, + "deg": {LEMMA: PRON_LEMMA, "PronType": "Prs", "Person": "Two", "Number": "Sing", "Case": "Acc"}, "han": {LEMMA: PRON_LEMMA, "PronType": "Prs", "Person": "Three", "Number": "Sing", "Gender": "Masc", "Case": "Nom"}, "ham": {LEMMA: PRON_LEMMA, "PronType": "Prs", "Person": "Three", "Number": "Sing", "Gender": "Masc", "Case": "Acc"}, "han": {LEMMA: PRON_LEMMA, "PronType": "Prs", "Person": "Three", "Number": "Sing", "Gender": "Masc", "Case": "Acc"}, @@ -27,7 +27,7 @@ MORPH_RULES = { "de": {LEMMA: PRON_LEMMA, "PronType": "Prs", "Person": "Three", "Number": "Plur", "Case": "Nom"}, "dem": {LEMMA: PRON_LEMMA, "PronType": "Prs", "Person": "Three", "Number": "Plur", "Case": "Acc"}, "seg": {LEMMA: PRON_LEMMA, "PronType": "Prs", "Person": "Three", "Number": "Plur", "Reflex": "Yes"}, - + "min": {LEMMA: PRON_LEMMA, "PronType": "Prs", "Person": "One", "Number": "Sing", "Poss": "Yes", "Gender": "Masc"}, "mi": {LEMMA: PRON_LEMMA, "PronType": "Prs", "Person": "One", "Number": "Sing", "Poss": "Yes", "Gender": "Fem"}, "mitt": {LEMMA: PRON_LEMMA, "PronType": "Prs", "Person": "One", "Number": "Sing", "Poss": "Yes", "Gender": "Neu"}, @@ -49,17 +49,17 @@ MORPH_RULES = { "sitt": {LEMMA: PRON_LEMMA, "PronType": "Prs", "Person": "One", "Number": "Sing", "Poss": "Yes", "Gender":"Neu", "Reflex":"Yes"}, "sine": {LEMMA: PRON_LEMMA, "PronType": "Prs", "Person": "One", "Number": "Plur", "Poss": "Yes", "Reflex":"Yes"}, }, - + "VBZ": { "er": {LEMMA: "be", "VerbForm": "Fin", "Person": "One", "Tense": "Pres", "Mood": "Ind"}, "er": {LEMMA: "be", "VerbForm": "Fin", "Person": "Two", "Tense": "Pres", "Mood": "Ind"}, "er": {LEMMA: "be", "VerbForm": "Fin", "Person": "Three", "Tense": "Pres", "Mood": "Ind"}, }, - + "VBP": { "er": {LEMMA: "be", "VerbForm": "Fin", "Tense": "Pres", "Mood": "Ind"} }, - + "VBD": { "var": {LEMMA: "be", "VerbForm": "Fin", "Tense": "Past", "Number": "Sing"}, "vært": {LEMMA: "be", "VerbForm": "Fin", "Tense": "Past", "Number": "Plur"} diff --git a/spacy/nb/stop_words.py b/spacy/nb/stop_words.py index 721ba2e47..afc158d09 100644 --- a/spacy/nb/stop_words.py +++ b/spacy/nb/stop_words.py @@ -4,27 +4,31 @@ from __future__ import unicode_literals STOP_WORDS = set(""" alle allerede alt and andre annen annet at av -bak bare bedre beste blant ble bli blir blitt bris by både +bak bare bedre beste blant ble bli blir blitt bris by både da dag de del dem den denne der dermed det dette disse drept du -eller en enn er et ett etter +eller en enn er et ett etter -fem fikk fire fjor flere folk for fortsatt fotball fra fram frankrike fredag funnet få får fått før først første +fem fikk fire fjor flere folk for fortsatt fotball fra fram frankrike fredag +funnet få får fått før først første -gang gi gikk gjennom gjorde gjort gjør gjøre god godt grunn gå går +gang gi gikk gjennom gjorde gjort gjør gjøre god godt grunn gå går -ha hadde ham han hans har hele helt henne hennes her hun hva hvor hvordan hvorfor +ha hadde ham han hans har hele helt henne hennes her hun hva hvor hvordan +hvorfor i ifølge igjen ikke ingen inn ja jeg -kamp kampen kan kl klart kom komme kommer kontakt kort kroner kunne kveld kvinner +kamp kampen kan kl klart kom komme kommer kontakt kort kroner kunne kveld +kvinner la laget land landet langt leder ligger like litt løpet lørdag -man mandag mange mannen mars med meg mellom men mener menn mennesker mens mer millioner minutter mot msci mye må mål måtte +man mandag mange mannen mars med meg mellom men mener menn mennesker mens mer +millioner minutter mot msci mye må mål måtte ned neste noe noen nok norge norsk norske ntb ny nye nå når @@ -34,16 +38,18 @@ personer plass poeng politidistrikt politiet president prosent på regjeringen runde rundt russland -sa saken samme sammen samtidig satt se seg seks selv senere september ser sett siden sier sin sine siste sitt skal skriver skulle slik som sted stedet stor store står sverige svært så søndag +sa saken samme sammen samtidig satt se seg seks selv senere september ser sett +siden sier sin sine siste sitt skal skriver skulle slik som sted stedet stor +store står sverige svært så søndag -ta tatt tid tidligere til tilbake tillegg tirsdag to tok torsdag tre tror tyskland +ta tatt tid tidligere til tilbake tillegg tirsdag to tok torsdag tre tror +tyskland -under usa ut uten utenfor +under usa ut uten utenfor vant var ved veldig vi videre viktig vil ville viser vår være vært å år ønsker - """.split()) diff --git a/spacy/nb/tokenizer_exceptions.py b/spacy/nb/tokenizer_exceptions.py index ea7658c87..e87aefd46 100644 --- a/spacy/nb/tokenizer_exceptions.py +++ b/spacy/nb/tokenizer_exceptions.py @@ -1,175 +1,38 @@ # encoding: utf8 -# Norwegian bokmaål from __future__ import unicode_literals - -from ..symbols import * -from ..language_data import PRON_LEMMA - - -TOKENIZER_EXCEPTIONS = { - "jan.": [ - {ORTH: "jan.", LEMMA: "januar"} - ], - - "feb.": [ - {ORTH: "feb.", LEMMA: "februar"} - ], - - "jul.": [ - {ORTH: "jul.", LEMMA: "juli"} - ] -} - - -ORTH_ONLY = ["adm.dir.", - "a.m.", - "Aq.", - "b.c.", - "bl.a.", - "bla.", - "bm.", - "bto.", - "ca.", - "cand.mag.", - "c.c.", - "co.", - "d.d.", - "dept.", - "d.m.", - "dr.philos.", - "dvs.", - "d.y.", - "E. coli", - "eg.", - "ekskl.", - "e.Kr.", - "el.", - "e.l.", - "et.", - "etg.", - "ev.", - "evt.", - "f.", - "f.eks.", - "fhv.", - "fk.", - "f.Kr.", - "f.o.m.", - "foreg.", - "fork.", - "fv.", - "fvt.", - "g.", - "gt.", - "gl.", - "gno.", - "gnr.", - "grl.", - "hhv.", - "hoh.", - "hr.", - "h.r.adv.", - "ifb.", - "ifm.", - "iht.", - "inkl.", - "istf.", - "jf.", - "jr.", - "jun.", - "kfr.", - "kgl.res.", - "kl.", - "komm.", - "kst.", - "lø.", - "ma.", - "mag.art.", - "m.a.o.", - "md.", - "mfl.", - "mill.", - "min.", - "m.m.", - "mnd.", - "moh.", - "Mr.", - "muh.", - "mv.", - "mva.", - "ndf.", - "no.", - "nov.", - "nr.", - "nto.", - "nyno.", - "n.å.", - "o.a.", - "off.", - "ofl.", - "okt.", - "o.l.", - "on.", - "op.", - "osv.", - "ovf.", - "p.", - "p.a.", - "Pb.", - "pga.", - "ph.d.", - "pkt.", - "p.m.", - "pr.", - "pst.", - "p.t.", - "red.anm.", - "ref.", - "res.", - "res.kap.", - "resp.", - "rv.", - "s.", - "s.d.", - "sen.", - "sep.", - "siviling.", - "sms.", - "spm.", - "sr.", - "sst.", - "st.", - "stip.", - "stk.", - "st.meld.", - "st.prp.", - "stud.", - "s.u.", - "sv.", - "sø.", - "s.å.", - "såk.", - "temp.", - "ti.", - "tils.", - "tilsv.", - "tl;dr", - "tlf.", - "to.", - "t.o.m.", - "ult.", - "utg.", - "v.", - "vedk.", - "vedr.", - "vg.", - "vgs.", - "vha.", - "vit.ass.", - "vn.", - "vol.", - "vs.", - "vsa.", - "årg.", - "årh." -] + +from ..symbols import ORTH, LEMMA + + +_exc = {} + + +for exc_data in [ + {ORTH: "jan.", LEMMA: "januar"}, + {ORTH: "feb.", LEMMA: "februar"}, + {ORTH: "jul.", LEMMA: "juli"}]: + _exc[exc_data[ORTH]] = [dict(exc_data)] + + +for orth in [ + "adm.dir.", "a.m.", "Aq.", "b.c.", "bl.a.", "bla.", "bm.", "bto.", "ca.", + "cand.mag.", "c.c.", "co.", "d.d.", "dept.", "d.m.", "dr.philos.", "dvs.", + "d.y.", "E. coli", "eg.", "ekskl.", "e.Kr.", "el.", "e.l.", "et.", "etg.", + "ev.", "evt.", "f.", "f.eks.", "fhv.", "fk.", "f.Kr.", "f.o.m.", "foreg.", + "fork.", "fv.", "fvt.", "g.", "gt.", "gl.", "gno.", "gnr.", "grl.", "hhv.", + "hoh.", "hr.", "h.r.adv.", "ifb.", "ifm.", "iht.", "inkl.", "istf.", "jf.", + "jr.", "jun.", "kfr.", "kgl.res.", "kl.", "komm.", "kst.", "lø.", "ma.", + "mag.art.", "m.a.o.", "md.", "mfl.", "mill.", "min.", "m.m.", "mnd.", + "moh.", "Mr.", "muh.", "mv.", "mva.", "ndf.", "no.", "nov.", "nr.", "nto.", + "nyno.", "n.å.", "o.a.", "off.", "ofl.", "okt.", "o.l.", "on.", "op.", + "osv.", "ovf.", "p.", "p.a.", "Pb.", "pga.", "ph.d.", "pkt.", "p.m.", "pr.", + "pst.", "p.t.", "red.anm.", "ref.", "res.", "res.kap.", "resp.", "rv.", + "s.", "s.d.", "sen.", "sep.", "siviling.", "sms.", "spm.", "sr.", "sst.", + "st.", "stip.", "stk.", "st.meld.", "st.prp.", "stud.", "s.u.", "sv.", + "sø.", "s.å.", "såk.", "temp.", "ti.", "tils.", "tilsv.", "tl;dr", "tlf.", + "to.", "t.o.m.", "ult.", "utg.", "v.", "vedk.", "vedr.", "vg.", "vgs.", + "vha.", "vit.ass.", "vn.", "vol.", "vs.", "vsa.", "årg.", "årh."]: + _exc[orth] = [{ORTH: orth}] + + +TOKENIZER_EXCEPTIONS = dict(_exc)