Reorganise Hungarian language data

This commit is contained in:
ines 2017-05-08 15:49:56 +02:00
parent a77c9fc60d
commit 1bbfa14436
4 changed files with 117 additions and 667 deletions

View File

@ -1,34 +1,35 @@
# coding: utf8 # coding: utf8
from __future__ import unicode_literals, print_function from __future__ import unicode_literals
from .tokenizer_exceptions import TOKEN_MATCH from .tokenizer_exceptions import TOKENIZER_EXCEPTIONS, TOKEN_MATCH
from .language_data import * from .punctuation import TOKENIZER_PREFIXES, TOKENIZER_SUFFIXES, TOKENIZER_INFIXES
from ..attrs import LANG from .stop_words import STOP_WORDS
from .lemmatizer import LOOKUP
from ..language_data import BASE_EXCEPTIONS
from ..language import Language from ..language import Language
from ..lemmatizerlookup import Lemmatizer from ..lemmatizerlookup import Lemmatizer
from .lemmatization import LOOK_UP from ..attrs import LANG
from ..util import update_exc
class Hungarian(Language): class Hungarian(Language):
lang = 'hu' lang = 'hu'
class Defaults(Language.Defaults): class Defaults(Language.Defaults):
tokenizer_exceptions = dict(TOKENIZER_EXCEPTIONS)
lex_attr_getters = dict(Language.Defaults.lex_attr_getters) lex_attr_getters = dict(Language.Defaults.lex_attr_getters)
lex_attr_getters[LANG] = lambda text: 'hu' lex_attr_getters[LANG] = lambda text: 'hu'
prefixes = tuple(TOKENIZER_PREFIXES) tokenizer_exceptions = update_exc(BASE_EXCEPTIONS, TOKENIZER_EXCEPTIONS)
suffixes = tuple(TOKENIZER_SUFFIXES)
infixes = tuple(TOKENIZER_INFIXES)
stop_words = set(STOP_WORDS) stop_words = set(STOP_WORDS)
prefixes = tuple(TOKENIZER_PREFIXES)
suffixes = tuple(TOKENIZER_SUFFIXES)
infixes = tuple(TOKENIZER_INFIXES)
token_match = TOKEN_MATCH token_match = TOKEN_MATCH
@classmethod @classmethod
def create_lemmatizer(cls, nlp=None): def create_lemmatizer(cls, nlp=None):
return Lemmatizer(LOOK_UP) return Lemmatizer(LOOKUP)
EXPORT = Hungarian __all__ = ['Hungarian']

View File

@ -1,7 +1,7 @@
# coding: utf8 # coding: utf8
from __future__ import unicode_literals from __future__ import unicode_literals
LOOK_UP = { LOOKUP = {
"Aaronsonnak": "Aaronson", "Aaronsonnak": "Aaronson",
"Aaronsont": "Aaronson", "Aaronsont": "Aaronson",
"Abbáziában": "Abbázia", "Abbáziában": "Abbázia",

View File

@ -1,17 +1,20 @@
# coding: utf8 # coding: utf8
from __future__ import unicode_literals from __future__ import unicode_literals
from ..language_data.punctuation import ALPHA_LOWER, LIST_ELLIPSES, QUOTES, ALPHA_UPPER, LIST_QUOTES, UNITS, \ from ..language_data.punctuation import ALPHA_LOWER, LIST_ELLIPSES, QUOTES
CURRENCY, LIST_PUNCT, ALPHA, _QUOTES from ..language_data.punctuation import ALPHA_UPPER, LIST_QUOTES, UNITS
from ..language_data.punctuation import CURRENCY, LIST_PUNCT, ALPHA, _QUOTES
_currency_symbols = r"\$ ¢ £ € ¥ ฿"
CURRENCY_SYMBOLS = r"\$ ¢ £ € ¥ ฿"
TOKENIZER_PREFIXES = ( TOKENIZER_PREFIXES = (
[r'\+'] + [r'\+'] +
LIST_PUNCT + LIST_PUNCT +
LIST_ELLIPSES + LIST_ELLIPSES +
LIST_QUOTES LIST_QUOTES)
)
TOKENIZER_SUFFIXES = ( TOKENIZER_SUFFIXES = (
LIST_PUNCT + LIST_PUNCT +
@ -22,10 +25,9 @@ TOKENIZER_SUFFIXES = (
r'(?<=°[FfCcKk])\.', r'(?<=°[FfCcKk])\.',
r'(?<=[0-9])(?:{c})'.format(c=CURRENCY), r'(?<=[0-9])(?:{c})'.format(c=CURRENCY),
r'(?<=[0-9])(?:{u})'.format(u=UNITS), r'(?<=[0-9])(?:{u})'.format(u=UNITS),
r'(?<=[{al}{p}{c}(?:{q})])\.'.format(al=ALPHA_LOWER, p=r'%²\-\)\]\+', q=QUOTES, c=CURRENCY_SYMBOLS), r'(?<=[{al}{p}{c}(?:{q})])\.'.format(al=ALPHA_LOWER, p=r'%²\-\)\]\+', q=QUOTES, c=_currency_symbols),
r'(?<=[{al})])-e'.format(al=ALPHA_LOWER) r'(?<=[{al})])-e'.format(al=ALPHA_LOWER)])
]
)
TOKENIZER_INFIXES = ( TOKENIZER_INFIXES = (
LIST_ELLIPSES + LIST_ELLIPSES +
@ -35,7 +37,4 @@ TOKENIZER_INFIXES = (
r'(?<=[{a}"])[:<>=](?=[{a}])'.format(a=ALPHA), r'(?<=[{a}"])[:<>=](?=[{a}])'.format(a=ALPHA),
r'(?<=[{a}])--(?=[{a}])'.format(a=ALPHA), r'(?<=[{a}])--(?=[{a}])'.format(a=ALPHA),
r'(?<=[{a}]),(?=[{a}])'.format(a=ALPHA), r'(?<=[{a}]),(?=[{a}])'.format(a=ALPHA),
r'(?<=[{a}])([{q}\)\]\(\[])(?=[\-{a}])'.format(a=ALPHA, q=_QUOTES.replace("'", "").strip().replace(" ", "")), r'(?<=[{a}])([{q}\)\]\(\[])(?=[\-{a}])'.format(a=ALPHA, q=_QUOTES.replace("'", "").strip().replace(" ", ""))])
]
)
__all__ = ["TOKENIZER_PREFIXES", "TOKENIZER_SUFFIXES", "TOKENIZER_INFIXES"]

View File

@ -3,646 +3,96 @@ from __future__ import unicode_literals
import regex as re import regex as re
from spacy.language_data.punctuation import ALPHA_LOWER, CURRENCY from ..symbols import ORTH
from ..language_data.punctuation import ALPHA_LOWER, CURRENCY
from ..language_data.tokenizer_exceptions import _URL_PATTERN from ..language_data.tokenizer_exceptions import _URL_PATTERN
ABBREVIATIONS = """
A.
AG.
AkH.
.
B.
B.CS.
B.S.
B.Sc.
B.ú.é.k.
BE.
BEK.
BSC.
BSc.
BTK.
Bat.
Be.
Bek.
Bfok.
Bk.
Bp.
Bros.
Bt.
Btk.
Btke.
Btét.
C.
CSC.
Cal.
Cg.
Cgf.
Cgt.
Cia.
Co.
Colo.
Comp.
Copr.
Corp.
Cos.
Cs.
Csc.
Csop.
Cstv.
Ctv.
Ctvr.
D.
DR.
Dipl.
Dr.
Dsz.
Dzs.
E.
EK.
EU.
F.
Fla.
Folyt.
Fpk.
Főszerk.
G.
GK.
GM.
Gfv.
Gmk.
Gr.
Group.
Gt.
Gy.
H.
HKsz.
Hmvh.
I.
Ifj.
Inc.
Inform.
Int.
J.
Jr.
Jv.
K.
K.m.f.
KB.
KER.
KFT.
KRT.
Kb.
Ker.
Kft.
Kg.
Kht.
Kkt.
Kong.
Korm.
Kr.
Kr.e.
Kr.u.
Krt.
L.
LB.
Llc.
Ltd.
M.
M.A.
M.S.
M.SC.
M.Sc.
MA.
MH.
MSC.
MSc.
Mass.
Max.
Mlle.
Mme.
Mo.
Mr.
Mrs.
Ms.
Mt.
N.
N.N.
NB.
NBr.
Nat.
No.
Nr.
Ny.
Nyh.
Nyr.
Nyrt.
O.
OJ.
Op.
P.
P.H.
P.S.
PH.D.
PHD.
PROF.
Pf.
Ph.D
PhD.
Pk.
Pl.
Plc.
Pp.
Proc.
Prof.
Ptk.
R.
RT.
Rer.
Rt.
S.
S.B.
SZOLG.
Salg.
Sch.
Spa.
St.
Sz.
SzRt.
Szerk.
Szfv.
Szjt.
Szolg.
Szt.
Sztv.
Szvt.
Számv.
T.
TEL.
Tel.
Ty.
Tyr.
U.
Ui.
Ut.
V.
VB.
Vcs.
Vhr.
Vht.
Várm.
W.
X.
X.Y.
Y.
Z.
Zrt.
Zs.
a.C.
ac.
adj.
adm.
ag.
agit.
alez.
alk.
all.
altbgy.
an.
ang.
arch.
at.
atc.
aug.
b.a.
b.s.
b.sc.
bek.
belker.
berend.
biz.
bizt.
bo.
bp.
br.
bsc.
bt.
btk.
ca.
cc.
cca.
cf.
cif.
co.
corp.
cos.
cs.
csc.
csüt.
cső.
ctv.
dbj.
dd.
ddr.
de.
dec.
dikt.
dipl.
dj.
dk.
dl.
dny.
dolg.
dr.
du.
dzs.
ea.
ed.
eff.
egyh.
ell.
elv.
elvt.
em.
eng.
eny.
et.
etc.
ev.
ezr.
.
f.h.
f.é.
fam.
fb.
febr.
fej.
felv.
felügy.
ff.
ffi.
fhdgy.
fil.
fiz.
fm.
foglalk.
ford.
fp.
fr.
frsz.
fszla.
fszt.
ft.
fuv.
főig.
főisk.
főtörm.
főv.
gazd.
gimn.
gk.
gkv.
gmk.
gondn.
gr.
grav.
gy.
gyak.
gyártm.
gör.
hads.
hallg.
hdm.
hdp.
hds.
hg.
hiv.
hk.
hm.
ho.
honv.
hp.
hr.
hrsz.
hsz.
ht.
htb.
hv.
hőm.
i.e.
i.sz.
id.
ie.
ifj.
ig.
igh.
ill.
imp.
inc.
ind.
inform.
inic.
int.
io.
ip.
ir.
irod.
irod.
isk.
ism.
izr.
.
jan.
jav.
jegyz.
jgmk.
jjv.
jkv.
jogh.
jogt.
jr.
jvb.
júl.
jún.
karb.
kat.
kath.
kb.
kcs.
kd.
ker.
kf.
kft.
kht.
kir.
kirend.
kisip.
kiv.
kk.
kkt.
klin.
km.
korm.
kp.
krt.
kt.
ktsg.
kult.
kv.
kve.
képv.
kísérl.
kóth.
könyvt.
körz.
köv.
közj.
közl.
közp.
közt.
.
lat.
ld.
legs.
lg.
lgv.
loc.
lt.
ltd.
ltp.
luth.
m.a.
m.s.
m.sc.
ma.
mat.
max.
mb.
med.
megh.
met.
mf.
mfszt.
min.
miss.
mjr.
mjv.
mk.
mlle.
mme.
mn.
mozg.
mr.
mrs.
ms.
msc.
.
máj.
márc.
.
mélt.
.
műh.
műsz.
műv.
művez.
nagyker.
nagys.
nat.
nb.
neg.
nk.
no.
nov.
nu.
ny.
nyilv.
nyrt.
nyug.
obj.
okl.
okt.
old.
olv.
orsz.
ort.
ov.
ovh.
pf.
pg.
ph.d
ph.d.
phd.
phil.
pjt.
pk.
pl.
plb.
plc.
pld.
plur.
pol.
polg.
poz.
pp.
proc.
prof.
prot.
pság.
ptk.
pu.
.
r.k.
rac.
rad.
red.
ref.
reg.
rer.
rev.
rf.
rkp.
rkt.
rt.
rtg.
röv.
s.b.
s.k.
sa.
sb.
sel.
sgt.
sm.
st.
stat.
stb.
strat.
stud.
sz.
szakm.
szaksz.
szakszerv.
szd.
szds.
szept.
szerk.
szf.
szimf.
szjt.
szkv.
szla.
szn.
szolg.
szt.
szubj.
szöv.
szül.
tanm.
tb.
tbk.
tc.
techn.
tek.
tel.
tf.
tgk.
ti.
tip.
tisztv.
titks.
tk.
tkp.
tny.
tp.
tszf.
tszk.
tszkv.
tv.
tvr.
ty.
törv.
.
ua.
ui.
unit.
uo.
uv.
vas.
vb.
vegy.
vh.
vhol.
vhr.
vill.
vizsg.
vk.
vkf.
vkny.
vm.
vol.
vs.
vsz.
vv.
vál.
várm.
vízv.
.
zrt.
zs.
Á.
Áe.
Áht.
É.
Épt.
Ész.
Új-Z.
ÚjZ.
Ún.
á.
ált.
ápr.
ásv.
é.
ék.
ény.
érk.
évf.
í.
ó.
össz.
ötk.
özv.
ú.
ú.n.
úm.
ún.
út.
üag.
üd.
üdv.
üe.
ümk.
ütk.
üv.
ű.
őrgy.
őrpk.
őrv.
""".strip().split()
OTHER_EXC = """ _exc = {}
-e
""".strip().split()
ORD_NUM_OR_DATE = "([A-Z0-9]+[./-])*(\d+\.?)" for orth in [
_NUM = "[+\-]?\d+([,.]\d+)*" "-e", "A.", "AG.", "AkH.", "Aö.", "B.", "B.CS.", "B.S.", "B.Sc.", "B.ú.é.k.",
_OPS = "[=<>+\-\*/^()÷%²]" "BE.", "BEK.", "BSC.", "BSc.", "BTK.", "Bat.", "Be.", "Bek.", "Bfok.",
_SUFFIXES = "-[{a}]+".format(a=ALPHA_LOWER) "Bk.", "Bp.", "Bros.", "Bt.", "Btk.", "Btke.", "Btét.", "C.", "CSC.",
NUMERIC_EXP = "({n})(({o})({n}))*[%]?".format(n=_NUM, o=_OPS) "Cal.", "Cg.", "Cgf.", "Cgt.", "Cia.", "Co.", "Colo.", "Comp.", "Copr.",
TIME_EXP = "\d+(:\d+)*(\.\d+)?" "Corp.", "Cos.", "Cs.", "Csc.", "Csop.", "Cstv.", "Ctv.", "Ctvr.", "D.",
"DR.", "Dipl.", "Dr.", "Dsz.", "Dzs.", "E.", "EK.", "EU.", "F.", "Fla.",
"Folyt.", "Fpk.", "Főszerk.", "G.", "GK.", "GM.", "Gfv.", "Gmk.", "Gr.",
"Group.", "Gt.", "Gy.", "H.", "HKsz.", "Hmvh.", "I.", "Ifj.", "Inc.",
"Inform.", "Int.", "J.", "Jr.", "Jv.", "K.", "K.m.f.", "KB.", "KER.",
"KFT.", "KRT.", "Kb.", "Ker.", "Kft.", "Kg.", "Kht.", "Kkt.", "Kong.",
"Korm.", "Kr.", "Kr.e.", "Kr.u.", "Krt.", "L.", "LB.", "Llc.", "Ltd.", "M.",
"M.A.", "M.S.", "M.SC.", "M.Sc.", "MA.", "MH.", "MSC.", "MSc.", "Mass.",
"Max.", "Mlle.", "Mme.", "Mo.", "Mr.", "Mrs.", "Ms.", "Mt.", "N.", "N.N.",
"NB.", "NBr.", "Nat.", "No.", "Nr.", "Ny.", "Nyh.", "Nyr.", "Nyrt.", "O.",
"OJ.", "Op.", "P.", "P.H.", "P.S.", "PH.D.", "PHD.", "PROF.", "Pf.", "Ph.D",
"PhD.", "Pk.", "Pl.", "Plc.", "Pp.", "Proc.", "Prof.", "Ptk.", "R.", "RT.",
"Rer.", "Rt.", "S.", "S.B.", "SZOLG.", "Salg.", "Sch.", "Spa.", "St.",
"Sz.", "SzRt.", "Szerk.", "Szfv.", "Szjt.", "Szolg.", "Szt.", "Sztv.",
"Szvt.", "Számv.", "T.", "TEL.", "Tel.", "Ty.", "Tyr.", "U.", "Ui.", "Ut.",
"V.", "VB.", "Vcs.", "Vhr.", "Vht.", "Várm.", "W.", "X.", "X.Y.", "Y.",
"Z.", "Zrt.", "Zs.", "a.C.", "ac.", "adj.", "adm.", "ag.", "agit.",
"alez.", "alk.", "all.", "altbgy.", "an.", "ang.", "arch.", "at.", "atc.",
"aug.", "b.a.", "b.s.", "b.sc.", "bek.", "belker.", "berend.", "biz.",
"bizt.", "bo.", "bp.", "br.", "bsc.", "bt.", "btk.", "ca.", "cc.", "cca.",
"cf.", "cif.", "co.", "corp.", "cos.", "cs.", "csc.", "csüt.", "cső.",
"ctv.", "dbj.", "dd.", "ddr.", "de.", "dec.", "dikt.", "dipl.", "dj.",
"dk.", "dl.", "dny.", "dolg.", "dr.", "du.", "dzs.", "ea.", "ed.", "eff.",
"egyh.", "ell.", "elv.", "elvt.", "em.", "eng.", "eny.", "et.", "etc.",
"ev.", "ezr.", "eü.", "f.h.", "f.é.", "fam.", "fb.", "febr.", "fej.",
"felv.", "felügy.", "ff.", "ffi.", "fhdgy.", "fil.", "fiz.", "fm.",
"foglalk.", "ford.", "fp.", "fr.", "frsz.", "fszla.", "fszt.", "ft.",
"fuv.", "főig.", "főisk.", "főtörm.", "főv.", "gazd.", "gimn.", "gk.",
"gkv.", "gmk.", "gondn.", "gr.", "grav.", "gy.", "gyak.", "gyártm.", "gör.",
"hads.", "hallg.", "hdm.", "hdp.", "hds.", "hg.", "hiv.", "hk.", "hm.",
"ho.", "honv.", "hp.", "hr.", "hrsz.", "hsz.", "ht.", "htb.", "hv.", "hőm.",
"i.e.", "i.sz.", "id.", "ie.", "ifj.", "ig.", "igh.", "ill.", "imp.",
"inc.", "ind.", "inform.", "inic.", "int.", "io.", "ip.", "ir.", "irod.",
"irod.", "isk.", "ism.", "izr.", "iá.", "jan.", "jav.", "jegyz.", "jgmk.",
"jjv.", "jkv.", "jogh.", "jogt.", "jr.", "jvb.", "júl.", "jún.", "karb.",
"kat.", "kath.", "kb.", "kcs.", "kd.", "ker.", "kf.", "kft.", "kht.",
"kir.", "kirend.", "kisip.", "kiv.", "kk.", "kkt.", "klin.", "km.", "korm.",
"kp.", "krt.", "kt.", "ktsg.", "kult.", "kv.", "kve.", "képv.", "kísérl.",
"kóth.", "könyvt.", "körz.", "köv.", "közj.", "közl.", "közp.", "közt.",
"kü.", "lat.", "ld.", "legs.", "lg.", "lgv.", "loc.", "lt.", "ltd.", "ltp.",
"luth.", "m.a.", "m.s.", "m.sc.", "ma.", "mat.", "max.", "mb.", "med.",
"megh.", "met.", "mf.", "mfszt.", "min.", "miss.", "mjr.", "mjv.", "mk.",
"mlle.", "mme.", "mn.", "mozg.", "mr.", "mrs.", "ms.", "msc.", "má.",
"máj.", "márc.", "mé.", "mélt.", "mü.", "műh.", "műsz.", "műv.", "művez.",
"nagyker.", "nagys.", "nat.", "nb.", "neg.", "nk.", "no.", "nov.", "nu.",
"ny.", "nyilv.", "nyrt.", "nyug.", "obj.", "okl.", "okt.", "old.", "olv.",
"orsz.", "ort.", "ov.", "ovh.", "pf.", "pg.", "ph.d", "ph.d.", "phd.",
"phil.", "pjt.", "pk.", "pl.", "plb.", "plc.", "pld.", "plur.", "pol.",
"polg.", "poz.", "pp.", "proc.", "prof.", "prot.", "pság.", "ptk.", "pu.",
"pü.", "r.k.", "rac.", "rad.", "red.", "ref.", "reg.", "rer.", "rev.",
"rf.", "rkp.", "rkt.", "rt.", "rtg.", "röv.", "s.b.", "s.k.", "sa.", "sb.",
"sel.", "sgt.", "sm.", "st.", "stat.", "stb.", "strat.", "stud.", "sz.",
"szakm.", "szaksz.", "szakszerv.", "szd.", "szds.", "szept.", "szerk.",
"szf.", "szimf.", "szjt.", "szkv.", "szla.", "szn.", "szolg.", "szt.",
"szubj.", "szöv.", "szül.", "tanm.", "tb.", "tbk.", "tc.", "techn.",
"tek.", "tel.", "tf.", "tgk.", "ti.", "tip.", "tisztv.", "titks.", "tk.",
"tkp.", "tny.", "tp.", "tszf.", "tszk.", "tszkv.", "tv.", "tvr.", "ty.",
"törv.", "tü.", "ua.", "ui.", "unit.", "uo.", "uv.", "vas.", "vb.", "vegy.",
"vh.", "vhol.", "vhr.", "vill.", "vizsg.", "vk.", "vkf.", "vkny.", "vm.",
"vol.", "vs.", "vsz.", "vv.", "vál.", "várm.", "vízv.", "vö.", "zrt.",
"zs.", "Á.", "Áe.", "Áht.", "É.", "Épt.", "Ész.", "Új-Z.", "ÚjZ.", "Ún.",
"á.", "ált.", "ápr.", "ásv.", "é.", "ék.", "ény.", "érk.", "évf.", "í.",
"ó.", "össz.", "ötk.", "özv.", "ú.", "ú.n.", "úm.", "ún.", "út.", "üag.",
"üd.", "üdv.", "üe.", "ümk.", "ütk.", "üv.", "ű.", "őrgy.", "őrpk.", "őrv."]:
_exc[orth] = [{ORTH: orth}]
NUMS = "(({ne})|({t})|({on})|({c}))({s})?".format(
ne=NUMERIC_EXP, t=TIME_EXP, on=ORD_NUM_OR_DATE,
c=CURRENCY, s=_SUFFIXES
)
TOKEN_MATCH = re.compile("^({u})|({n})$".format(u=_URL_PATTERN, n=NUMS)).match _ord_num_or_date = "([A-Z0-9]+[./-])*(\d+\.?)"
_num = "[+\-]?\d+([,.]\d+)*"
_ops = "[=<>+\-\*/^()÷%²]"
_suffixes = "-[{a}]+".format(a=ALPHA_LOWER)
_numeric_exp = "({n})(({o})({n}))*[%]?".format(n=_num, o=_ops)
_time_exp = "\d+(:\d+)*(\.\d+)?"
_nums = "(({ne})|({t})|({on})|({c}))({s})?".format(
ne=_numeric_exp, t=_time_exp, on=_ord_num_or_date,
c=CURRENCY, s=_suffixes)
TOKENIZER_EXCEPTIONS = dict(_exc)
TOKEN_MATCH = re.compile("^({u})|({n})$".format(u=_URL_PATTERN, n=_nums)).match