Merge pull request #742 from oroszgy/hu_tokenizer_fix

Improved Hungarian tokenizer
This commit is contained in:
Ines Montani 2017-01-14 23:52:44 +01:00 committed by GitHub
commit 116c675c3c
6 changed files with 209 additions and 41 deletions

View File

@ -1,6 +1,7 @@
# encoding: utf8 # encoding: utf8
from __future__ import unicode_literals, print_function from __future__ import unicode_literals, print_function
from spacy.hu.tokenizer_exceptions import TOKEN_MATCH
from .language_data import * from .language_data import *
from ..attrs import LANG from ..attrs import LANG
from ..language import Language from ..language import Language
@ -21,3 +22,5 @@ class Hungarian(Language):
infixes = tuple(TOKENIZER_INFIXES) infixes = tuple(TOKENIZER_INFIXES)
stop_words = set(STOP_WORDS) stop_words = set(STOP_WORDS)
token_match = TOKEN_MATCH

View File

@ -1,8 +1,6 @@
# encoding: utf8 # encoding: utf8
from __future__ import unicode_literals from __future__ import unicode_literals
import six
from spacy.language_data import strings_to_exc, update_exc from spacy.language_data import strings_to_exc, update_exc
from .punctuation import * from .punctuation import *
from .stop_words import STOP_WORDS from .stop_words import STOP_WORDS
@ -10,19 +8,15 @@ from .tokenizer_exceptions import ABBREVIATIONS
from .tokenizer_exceptions import OTHER_EXC from .tokenizer_exceptions import OTHER_EXC
from .. import language_data as base from .. import language_data as base
STOP_WORDS = set(STOP_WORDS) STOP_WORDS = set(STOP_WORDS)
TOKENIZER_EXCEPTIONS = strings_to_exc(base.EMOTICONS) TOKENIZER_EXCEPTIONS = strings_to_exc(base.EMOTICONS)
update_exc(TOKENIZER_EXCEPTIONS, strings_to_exc(base.ABBREVIATIONS)) update_exc(TOKENIZER_EXCEPTIONS, strings_to_exc(base.ABBREVIATIONS))
update_exc(TOKENIZER_EXCEPTIONS, strings_to_exc(OTHER_EXC)) update_exc(TOKENIZER_EXCEPTIONS, strings_to_exc(OTHER_EXC))
update_exc(TOKENIZER_EXCEPTIONS, strings_to_exc(ABBREVIATIONS)) update_exc(TOKENIZER_EXCEPTIONS, strings_to_exc(ABBREVIATIONS))
TOKENIZER_PREFIXES = TOKENIZER_PREFIXES
TOKENIZER_PREFIXES = base.TOKENIZER_PREFIXES TOKENIZER_SUFFIXES = TOKENIZER_SUFFIXES
TOKENIZER_SUFFIXES = base.TOKENIZER_SUFFIXES + TOKENIZER_SUFFIXES
TOKENIZER_INFIXES = TOKENIZER_INFIXES TOKENIZER_INFIXES = TOKENIZER_INFIXES
__all__ = ["TOKENIZER_EXCEPTIONS", "STOP_WORDS", "TOKENIZER_PREFIXES", "TOKENIZER_SUFFIXES", "TOKENIZER_INFIXES"] __all__ = ["TOKENIZER_EXCEPTIONS", "STOP_WORDS", "TOKENIZER_PREFIXES", "TOKENIZER_SUFFIXES", "TOKENIZER_INFIXES"]

View File

@ -1,25 +1,41 @@
# encoding: utf8 # encoding: utf8
from __future__ import unicode_literals from __future__ import unicode_literals
from ..language_data.punctuation import ALPHA, ALPHA_LOWER, ALPHA_UPPER, LIST_ELLIPSES from ..language_data.punctuation import ALPHA_LOWER, LIST_ELLIPSES, QUOTES, ALPHA_UPPER, LIST_QUOTES, UNITS, \
CURRENCY, LIST_PUNCT, ALPHA, _QUOTES
CURRENCY_SYMBOLS = r"\$ ¢ £ € ¥ ฿"
TOKENIZER_SUFFIXES = [ TOKENIZER_PREFIXES = (
[r'\+'] +
LIST_PUNCT +
LIST_ELLIPSES +
LIST_QUOTES
)
TOKENIZER_SUFFIXES = (
LIST_PUNCT +
LIST_ELLIPSES +
LIST_QUOTES +
[
r'(?<=[0-9])\+',
r'(?<=°[FfCcKk])\.',
r'(?<=[0-9])(?:{c})'.format(c=CURRENCY),
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})])-e'.format(al=ALPHA_LOWER) r'(?<=[{al})])-e'.format(al=ALPHA_LOWER)
] ]
)
TOKENIZER_INFIXES = [ TOKENIZER_INFIXES = (
r'(?<=[0-9])-(?=[0-9])', LIST_ELLIPSES +
r'(?<=[0-9])[+\-\*/^](?=[0-9])', [
r'(?<=[{a}])--(?=[{a}])',
r'(?<=[{a}]),(?=[{a}])'.format(a=ALPHA),
r'(?<=[{al}])\.(?=[{au}])'.format(al=ALPHA_LOWER, au=ALPHA_UPPER), r'(?<=[{al}])\.(?=[{au}])'.format(al=ALPHA_LOWER, au=ALPHA_UPPER),
r'(?<=[0-9{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(" ", "")),
TOKENIZER_INFIXES += LIST_ELLIPSES ]
)
__all__ = ["TOKENIZER_PREFIXES", "TOKENIZER_SUFFIXES", "TOKENIZER_INFIXES"]
__all__ = ["TOKENIZER_SUFFIXES", "TOKENIZER_INFIXES"]

View File

@ -1,9 +1,17 @@
# encoding: utf8 # encoding: utf8
from __future__ import unicode_literals from __future__ import unicode_literals
import re
from spacy.language_data.punctuation import ALPHA_LOWER, CURRENCY
from ..language_data.tokenizer_exceptions import _URL_PATTERN
ABBREVIATIONS = """ ABBREVIATIONS = """
A.
AG.
AkH. AkH.
. .
B.
B.CS. B.CS.
B.S. B.S.
B.Sc. B.Sc.
@ -13,57 +21,103 @@ BEK.
BSC. BSC.
BSc. BSc.
BTK. BTK.
Bat.
Be. Be.
Bek. Bek.
Bfok. Bfok.
Bk. Bk.
Bp. Bp.
Bros.
Bt.
Btk. Btk.
Btke. Btke.
Btét. Btét.
C.
CSC. CSC.
Cal. Cal.
Cg.
Cgf.
Cgt.
Cia.
Co. Co.
Colo. Colo.
Comp. Comp.
Copr. Copr.
Corp.
Cos.
Cs. Cs.
Csc. Csc.
Csop. Csop.
Cstv.
Ctv. Ctv.
Ctvr.
D. D.
DR. DR.
Dipl. Dipl.
Dr. Dr.
Dsz. Dsz.
Dzs. Dzs.
E.
EK.
EU.
F.
Fla. Fla.
Folyt.
Fpk.
Főszerk. Főszerk.
G.
GK.
GM. GM.
Gfv.
Gmk.
Gr.
Group.
Gt.
Gy. Gy.
H.
HKsz. HKsz.
Hmvh. Hmvh.
I.
Ifj.
Inc.
Inform. Inform.
Int.
J.
Jr.
Jv.
K.
K.m.f. K.m.f.
KB.
KER. KER.
KFT. KFT.
KRT. KRT.
Kb.
Ker. Ker.
Kft. Kft.
Kg.
Kht.
Kkt.
Kong. Kong.
Korm. Korm.
Kr. Kr.
Kr.e. Kr.e.
Kr.u. Kr.u.
Krt. Krt.
L.
LB.
Llc.
Ltd.
M.
M.A. M.A.
M.S. M.S.
M.SC. M.SC.
M.Sc. M.Sc.
MA. MA.
MH.
MSC. MSC.
MSc. MSc.
Mass. Mass.
Max.
Mlle. Mlle.
Mme. Mme.
Mo. Mo.
@ -71,45 +125,77 @@ Mr.
Mrs. Mrs.
Ms. Ms.
Mt. Mt.
N.
N.N. N.N.
NB. NB.
NBr. NBr.
Nat. Nat.
No.
Nr. Nr.
Ny. Ny.
Nyh. Nyh.
Nyr. Nyr.
Nyrt.
O.
OJ.
Op. Op.
P.
P.H. P.H.
P.S. P.S.
PH.D. PH.D.
PHD. PHD.
PROF. PROF.
Pf.
Ph.D Ph.D
PhD. PhD.
Pk.
Pl.
Plc.
Pp. Pp.
Proc. Proc.
Prof. Prof.
Ptk. Ptk.
R.
RT.
Rer. Rer.
Rt.
S.
S.B. S.B.
SZOLG. SZOLG.
Salg. Salg.
Sch.
Spa.
St. St.
Sz. Sz.
SzRt.
Szerk.
Szfv. Szfv.
Szjt. Szjt.
Szolg. Szolg.
Szt. Szt.
Sztv. Sztv.
Szvt.
Számv.
T.
TEL. TEL.
Tel. Tel.
Ty. Ty.
Tyr. Tyr.
U.
Ui. Ui.
Ut.
V.
VB.
Vcs. Vcs.
Vhr. Vhr.
Vht.
Várm.
W.
X.
X.Y. X.Y.
Y.
Z.
Zrt.
Zs. Zs.
a.C. a.C.
ac. ac.
@ -119,11 +205,13 @@ ag.
agit. agit.
alez. alez.
alk. alk.
all.
altbgy. altbgy.
an. an.
ang. ang.
arch. arch.
at. at.
atc.
aug. aug.
b.a. b.a.
b.s. b.s.
@ -161,6 +249,7 @@ dikt.
dipl. dipl.
dj. dj.
dk. dk.
dl.
dny. dny.
dolg. dolg.
dr. dr.
@ -184,6 +273,7 @@ eü.
f.h. f.h.
f.é. f.é.
fam. fam.
fb.
febr. febr.
fej. fej.
felv. felv.
@ -211,6 +301,7 @@ gazd.
gimn. gimn.
gk. gk.
gkv. gkv.
gmk.
gondn. gondn.
gr. gr.
grav. grav.
@ -240,6 +331,7 @@ hőm.
i.e. i.e.
i.sz. i.sz.
id. id.
ie.
ifj. ifj.
ig. ig.
igh. igh.
@ -254,6 +346,7 @@ io.
ip. ip.
ir. ir.
irod. irod.
irod.
isk. isk.
ism. ism.
izr. izr.
@ -261,6 +354,7 @@ iá.
jan. jan.
jav. jav.
jegyz. jegyz.
jgmk.
jjv. jjv.
jkv. jkv.
jogh. jogh.
@ -271,6 +365,7 @@ júl.
jún. jún.
karb. karb.
kat. kat.
kath.
kb. kb.
kcs. kcs.
kd. kd.
@ -285,6 +380,8 @@ kiv.
kk. kk.
kkt. kkt.
klin. klin.
km.
korm.
kp. kp.
krt. krt.
kt. kt.
@ -318,6 +415,7 @@ m.s.
m.sc. m.sc.
ma. ma.
mat. mat.
max.
mb. mb.
med. med.
megh. megh.
@ -353,6 +451,7 @@ nat.
nb. nb.
neg. neg.
nk. nk.
no.
nov. nov.
nu. nu.
ny. ny.
@ -362,6 +461,7 @@ nyug.
obj. obj.
okl. okl.
okt. okt.
old.
olv. olv.
orsz. orsz.
ort. ort.
@ -372,6 +472,8 @@ pg.
ph.d ph.d
ph.d. ph.d.
phd. phd.
phil.
pjt.
pk. pk.
pl. pl.
plb. plb.
@ -406,6 +508,7 @@ röv.
s.b. s.b.
s.k. s.k.
sa. sa.
sb.
sel. sel.
sgt. sgt.
sm. sm.
@ -413,6 +516,7 @@ st.
stat. stat.
stb. stb.
strat. strat.
stud.
sz. sz.
szakm. szakm.
szaksz. szaksz.
@ -467,6 +571,7 @@ vb.
vegy. vegy.
vh. vh.
vhol. vhol.
vhr.
vill. vill.
vizsg. vizsg.
vk. vk.
@ -478,13 +583,20 @@ vs.
vsz. vsz.
vv. vv.
vál. vál.
várm.
vízv. vízv.
. .
zrt. zrt.
zs. zs.
Á.
Áe.
Áht.
É.
Épt.
Ész. Ész.
Új-Z. Új-Z.
ÚjZ. ÚjZ.
Ún.
á. á.
ált. ált.
ápr. ápr.
@ -500,6 +612,7 @@ zs.
ötk. ötk.
özv. özv.
ú. ú.
ú.n.
úm. úm.
ún. ún.
út. út.
@ -510,7 +623,6 @@ zs.
ümk. ümk.
ütk. ütk.
üv. üv.
ő.
ű. ű.
őrgy. őrgy.
őrpk. őrpk.
@ -520,3 +632,17 @@ zs.
OTHER_EXC = """ OTHER_EXC = """
-e -e
""".strip().split() """.strip().split()
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
)
TOKEN_MATCH = re.compile("^({u})|({n})$".format(u=_URL_PATTERN, n=NUMS)).match

View File

@ -57,14 +57,14 @@ LIST_PUNCT = list(_PUNCT.strip().split())
LIST_HYPHENS = list(_HYPHENS.strip().split()) LIST_HYPHENS = list(_HYPHENS.strip().split())
ALPHA_LOWER = _ALPHA_LOWER.strip().replace(' ', '') ALPHA_LOWER = _ALPHA_LOWER.strip().replace(' ', '').replace('\n', '')
ALPHA_UPPER = _ALPHA_UPPER.strip().replace(' ', '') ALPHA_UPPER = _ALPHA_UPPER.strip().replace(' ', '').replace('\n', '')
ALPHA = ALPHA_LOWER + ALPHA_UPPER ALPHA = ALPHA_LOWER + ALPHA_UPPER
QUOTES = _QUOTES.strip().replace(' ', '|') QUOTES = _QUOTES.strip().replace(' ', '|')
CURRENCY = _CURRENCY.strip().replace(' ', '|') CURRENCY = _CURRENCY.strip().replace(' ', '|')
UNITS = _UNITS.strip().replace(' ', '|') UNITS = _UNITS.strip().replace(' ', '|').replace('\n', '|')
HYPHENS = _HYPHENS.strip().replace(' ', '|') HYPHENS = _HYPHENS.strip().replace(' ', '|')

View File

@ -3,7 +3,6 @@ from __future__ import unicode_literals
import pytest import pytest
DEFAULT_TESTS = [ DEFAULT_TESTS = [
('N. kormányzósági\nszékhely.', ['N.', 'kormányzósági', 'székhely', '.']), ('N. kormányzósági\nszékhely.', ['N.', 'kormányzósági', 'székhely', '.']),
('A .hu egy tld.', ['A', '.hu', 'egy', 'tld', '.']), ('A .hu egy tld.', ['A', '.hu', 'egy', 'tld', '.']),
@ -24,23 +23,27 @@ DEFAULT_TESTS = [
HYPHEN_TESTS = [ HYPHEN_TESTS = [
('Egy -nak, -jaiért, -magyar, bel- van.', ['Egy', '-nak', ',', '-jaiért', ',', '-magyar', ',', 'bel-', 'van', '.']), ('Egy -nak, -jaiért, -magyar, bel- van.', ['Egy', '-nak', ',', '-jaiért', ',', '-magyar', ',', 'bel-', 'van', '.']),
('Szabolcs-Szatmár-Bereg megye', ['Szabolcs-Szatmár-Bereg', 'megye']),
('Egy -nak.', ['Egy', '-nak', '.']), ('Egy -nak.', ['Egy', '-nak', '.']),
('Egy bel-.', ['Egy', 'bel-', '.']), ('Egy bel-.', ['Egy', 'bel-', '.']),
('Dinnye-domb-.', ['Dinnye-domb-', '.']), ('Dinnye-domb-.', ['Dinnye-domb-', '.']),
('Ezen -e elcsatangolt.', ['Ezen', '-e', 'elcsatangolt', '.']), ('Ezen -e elcsatangolt.', ['Ezen', '-e', 'elcsatangolt', '.']),
('Lakik-e', ['Lakik', '-e']), ('Lakik-e', ['Lakik', '-e']),
('A--B', ['A', '--', 'B']),
('Lakik-e?', ['Lakik', '-e', '?']), ('Lakik-e?', ['Lakik', '-e', '?']),
('Lakik-e.', ['Lakik', '-e', '.']), ('Lakik-e.', ['Lakik', '-e', '.']),
('Lakik-e...', ['Lakik', '-e', '...']), ('Lakik-e...', ['Lakik', '-e', '...']),
('Lakik-e... van.', ['Lakik', '-e', '...', 'van', '.']), ('Lakik-e... van.', ['Lakik', '-e', '...', 'van', '.']),
('Lakik-e van?', ['Lakik', '-e', 'van', '?']), ('Lakik-e van?', ['Lakik', '-e', 'van', '?']),
('Lakik-elem van?', ['Lakik-elem', 'van', '?']), ('Lakik-elem van?', ['Lakik-elem', 'van', '?']),
('Az életbiztosításáról- egy.', ['Az', 'életbiztosításáról-', 'egy', '.']),
('Van lakik-elem.', ['Van', 'lakik-elem', '.']), ('Van lakik-elem.', ['Van', 'lakik-elem', '.']),
('A 7-es busz?', ['A', '7-es', 'busz', '?']), ('A 7-es busz?', ['A', '7-es', 'busz', '?']),
('A 7-es?', ['A', '7-es', '?']), ('A 7-es?', ['A', '7-es', '?']),
('A 7-es.', ['A', '7-es', '.']), ('A 7-es.', ['A', '7-es', '.']),
('Ez (lakik)-e?', ['Ez', '(', 'lakik', ')', '-e', '?']), ('Ez (lakik)-e?', ['Ez', '(', 'lakik', ')', '-e', '?']),
('A %-sal.', ['A', '%-sal', '.']), ('A %-sal.', ['A', '%-sal', '.']),
('A $-sal.', ['A', '$-sal', '.']),
('A CD-ROM-okrol.', ['A', 'CD-ROM-okrol', '.']) ('A CD-ROM-okrol.', ['A', 'CD-ROM-okrol', '.'])
] ]
@ -89,11 +92,15 @@ NUMBER_TESTS = [
('A -23,12 van.', ['A', '-23,12', 'van', '.']), ('A -23,12 van.', ['A', '-23,12', 'van', '.']),
('A -23,12-ben van.', ['A', '-23,12-ben', 'van', '.']), ('A -23,12-ben van.', ['A', '-23,12-ben', 'van', '.']),
('A -23,12-ben.', ['A', '-23,12-ben', '.']), ('A -23,12-ben.', ['A', '-23,12-ben', '.']),
('A 2+3 van.', ['A', '2', '+', '3', 'van', '.']), ('A 2+3 van.', ['A', '2+3', 'van', '.']),
('A 2 +3 van.', ['A', '2', '+', '3', 'van', '.']), ('A 2<3 van.', ['A', '2<3', 'van', '.']),
('A 2=3 van.', ['A', '2=3', 'van', '.']),
('A 2÷3 van.', ['A', '2÷3', 'van', '.']),
('A 1=(2÷3)-2/5 van.', ['A', '1=(2÷3)-2/5', 'van', '.']),
('A 2 +3 van.', ['A', '2', '+3', 'van', '.']),
('A 2+ 3 van.', ['A', '2', '+', '3', 'van', '.']), ('A 2+ 3 van.', ['A', '2', '+', '3', 'van', '.']),
('A 2 + 3 van.', ['A', '2', '+', '3', 'van', '.']), ('A 2 + 3 van.', ['A', '2', '+', '3', 'van', '.']),
('A 2*3 van.', ['A', '2', '*', '3', 'van', '.']), ('A 2*3 van.', ['A', '2*3', 'van', '.']),
('A 2 *3 van.', ['A', '2', '*', '3', 'van', '.']), ('A 2 *3 van.', ['A', '2', '*', '3', 'van', '.']),
('A 2* 3 van.', ['A', '2', '*', '3', 'van', '.']), ('A 2* 3 van.', ['A', '2', '*', '3', 'van', '.']),
('A 2 * 3 van.', ['A', '2', '*', '3', 'van', '.']), ('A 2 * 3 van.', ['A', '2', '*', '3', 'van', '.']),
@ -141,7 +148,8 @@ NUMBER_TESTS = [
('A 15.-ben.', ['A', '15.-ben', '.']), ('A 15.-ben.', ['A', '15.-ben', '.']),
('A 2002--2003. van.', ['A', '2002--2003.', 'van', '.']), ('A 2002--2003. van.', ['A', '2002--2003.', 'van', '.']),
('A 2002--2003-ben van.', ['A', '2002--2003-ben', 'van', '.']), ('A 2002--2003-ben van.', ['A', '2002--2003-ben', 'van', '.']),
('A 2002--2003-ben.', ['A', '2002--2003-ben', '.']), ('A 2002-2003-ben.', ['A', '2002-2003-ben', '.']),
('A +0,99% van.', ['A', '+0,99%', 'van', '.']),
('A -0,99% van.', ['A', '-0,99%', 'van', '.']), ('A -0,99% van.', ['A', '-0,99%', 'van', '.']),
('A -0,99%-ben van.', ['A', '-0,99%-ben', 'van', '.']), ('A -0,99%-ben van.', ['A', '-0,99%-ben', 'van', '.']),
('A -0,99%.', ['A', '-0,99%', '.']), ('A -0,99%.', ['A', '-0,99%', '.']),
@ -194,23 +202,33 @@ NUMBER_TESTS = [
('A III/c-ben.', ['A', 'III/c-ben', '.']), ('A III/c-ben.', ['A', 'III/c-ben', '.']),
('A TU154 van.', ['A', 'TU154', 'van', '.']), ('A TU154 van.', ['A', 'TU154', 'van', '.']),
('A TU154-ben van.', ['A', 'TU154-ben', 'van', '.']), ('A TU154-ben van.', ['A', 'TU154-ben', 'van', '.']),
('A TU154-ben.', ['A', 'TU154-ben', '.']) ('A TU154-ben.', ['A', 'TU154-ben', '.']),
('A 5cm³', ['A', '5', 'cm³']),
('A 5 $-ban', ['A', '5', '$-ban']),
('A 5$-ban', ['A', '5$-ban']),
('A 5$.', ['A', '5', '$', '.']),
('A 5$', ['A', '5', '$']),
('A $5', ['A', '$5']),
('A 5km/h', ['A', '5', 'km/h']),
('A 75%+1-100%-ig', ['A', '75%+1-100%-ig']),
('A 5km/h.', ['A', '5', 'km/h', '.']),
('3434/1992. évi elszámolás', ['3434/1992.', 'évi', 'elszámolás']),
] ]
QUOTE_TESTS = [ QUOTE_TESTS = [
('Az "Ime, hat"-ban irja.', ['Az', '"', 'Ime', ',', 'hat', '"', '-ban', 'irja', '.']), ('Az "Ime, hat"-ban irja.', ['Az', '"', 'Ime', ',', 'hat', '"', '-ban', 'irja', '.']),
('"Ime, hat"-ban irja.', ['"', 'Ime', ',', 'hat', '"', '-ban', 'irja', '.']), ('"Ime, hat"-ban irja.', ['"', 'Ime', ',', 'hat', '"', '-ban', 'irja', '.']),
('Az "Ime, hat".', ['Az', '"', 'Ime', ',', 'hat', '"', '.']), ('Az "Ime, hat".', ['Az', '"', 'Ime', ',', 'hat', '"', '.']),
('Egy 24"-os monitor.', ['Egy', '24', '"', '-os', 'monitor', '.']), ('Egy 24"-os monitor.', ['Egy', '24"-os', 'monitor', '.']),
("A don't van.", ['A', "don't", 'van', '.']) ("A McDonald's van.", ['A', "McDonald's", 'van', '.'])
] ]
DOT_TESTS = [ DOT_TESTS = [
('N. kormányzósági\nszékhely.', ['N.', 'kormányzósági', 'székhely', '.']), ('N. kormányzósági\nszékhely.', ['N.', 'kormányzósági', 'székhely', '.']),
('A .hu egy tld.', ['A', '.hu', 'egy', 'tld', '.']), ('A .hu egy tld.', ['A', '.hu', 'egy', 'tld', '.']),
('Az egy.ketto pelda.', ['Az', 'egy.ketto', 'pelda', '.']), ('Az egy.ketto pelda.', ['Az', 'egy.ketto', 'pelda', '.']),
('A pl. rovidites.', ['A', 'pl.', 'rovidites', '.']), ('A pl. rövidítés.', ['A', 'pl.', 'rövidítés', '.']),
('A S.M.A.R.T. szo.', ['A', 'S.M.A.R.T.', 'szo', '.']), ('A S.M.A.R.T. szó.', ['A', 'S.M.A.R.T.', 'szó', '.']),
('A .hu.', ['A', '.hu', '.']), ('A .hu.', ['A', '.hu', '.']),
('Az egy.ketto.', ['Az', 'egy.ketto', '.']), ('Az egy.ketto.', ['Az', 'egy.ketto', '.']),
('A pl.', ['A', 'pl.']), ('A pl.', ['A', 'pl.']),
@ -223,8 +241,19 @@ DOT_TESTS = [
('Valami ... más.', ['Valami', '...', 'más', '.']) ('Valami ... más.', ['Valami', '...', 'más', '.'])
] ]
WIKI_TESTS = [
('!"', ['!', '"']),
('lány"a', ['lány', '"', 'a']),
('lány"a', ['lány', '"', 'a']),
('!"-lel', ['!', '"', '-lel']),
('""-sorozat ', ['"', '"', '-sorozat']),
('"(Köszönöm', ['"', '(', 'Köszönöm']),
('(törvénykönyv)-ben ', ['(', 'törvénykönyv', ')', '-ben']),
('"(...)"sokkal ', ['"', '(', '...', ')', '"', 'sokkal']),
('cérium(IV)-oxid', ['cérium', '(', 'IV', ')', '-oxid'])
]
TESTCASES = DEFAULT_TESTS + DOT_TESTS + QUOTE_TESTS # + NUMBER_TESTS + HYPHEN_TESTS TESTCASES = DEFAULT_TESTS + DOT_TESTS + QUOTE_TESTS + NUMBER_TESTS + HYPHEN_TESTS + WIKI_TESTS
@pytest.mark.parametrize('text,expected_tokens', TESTCASES) @pytest.mark.parametrize('text,expected_tokens', TESTCASES)