2022-08-05 11:10:18 +03:00
|
|
|
import unicodedata
|
|
|
|
|
2023-06-14 18:48:41 +03:00
|
|
|
from ...attrs import IS_CURRENCY, LIKE_NUM
|
2022-08-05 11:10:18 +03:00
|
|
|
|
|
|
|
_num_words = set(
|
|
|
|
"""
|
|
|
|
nula ničla nič ena dva tri štiri pet šest sedem osem
|
|
|
|
devet deset enajst dvanajst trinajst štirinajst petnajst
|
|
|
|
šestnajst sedemnajst osemnajst devetnajst dvajset trideset štirideset
|
|
|
|
petdeset šestdest sedemdeset osemdeset devedeset sto tisoč
|
|
|
|
milijon bilijon trilijon kvadrilijon nešteto
|
|
|
|
|
|
|
|
en eden enega enemu ennem enim enih enima enimi ene eni eno
|
|
|
|
dveh dvema dvem dvoje trije treh trem tremi troje štirje štirih štirim štirimi
|
|
|
|
petih petim petimi šestih šestim šestimi sedmih sedmim sedmimi osmih osmim osmimi
|
|
|
|
devetih devetim devetimi desetih desetim desetimi enajstih enajstim enajstimi
|
|
|
|
dvanajstih dvanajstim dvanajstimi trinajstih trinajstim trinajstimi
|
|
|
|
šestnajstih šestnajstim šestnajstimi petnajstih petnajstim petnajstimi
|
|
|
|
sedemnajstih sedemnajstim sedemnajstimi osemnajstih osemnajstim osemnajstimi
|
|
|
|
devetnajstih devetnajstim devetnajstimi dvajsetih dvajsetim dvajsetimi
|
|
|
|
""".split()
|
|
|
|
)
|
|
|
|
|
|
|
|
_ordinal_words = set(
|
|
|
|
"""
|
|
|
|
prvi drugi tretji četrti peti šesti sedmi osmi
|
|
|
|
deveti deseti enajsti dvanajsti trinajsti štirinajsti
|
|
|
|
petnajsti šestnajsti sedemnajsti osemnajsti devetnajsti
|
|
|
|
dvajseti trideseti štirideseti petdeseti šestdeseti sedemdeseti
|
|
|
|
osemdeseti devetdeseti stoti tisoči milijonti bilijonti
|
|
|
|
trilijonti kvadrilijonti nešteti
|
|
|
|
|
|
|
|
prva druga tretja četrta peta šesta sedma osma
|
|
|
|
deveta deseta enajsta dvanajsta trinajsta štirnajsta
|
|
|
|
petnajsta šestnajsta sedemnajsta osemnajsta devetnajsta
|
|
|
|
dvajseta trideseta štirideseta petdeseta šestdeseta sedemdeseta
|
|
|
|
osemdeseta devetdeseta stota tisoča milijonta bilijonta
|
|
|
|
trilijonta kvadrilijonta nešteta
|
|
|
|
|
|
|
|
prvo drugo tretje četrto peto šestro sedmo osmo
|
|
|
|
deveto deseto enajsto dvanajsto trinajsto štirnajsto
|
|
|
|
petnajsto šestnajsto sedemnajsto osemnajsto devetnajsto
|
|
|
|
dvajseto trideseto štirideseto petdeseto šestdeseto sedemdeseto
|
|
|
|
osemdeseto devetdeseto stoto tisočo milijonto bilijonto
|
|
|
|
trilijonto kvadrilijonto nešteto
|
|
|
|
|
|
|
|
prvega drugega tretjega četrtega petega šestega sedmega osmega
|
|
|
|
devega desetega enajstega dvanajstega trinajstega štirnajstega
|
|
|
|
petnajstega šestnajstega sedemnajstega osemnajstega devetnajstega
|
|
|
|
dvajsetega tridesetega štiridesetega petdesetega šestdesetega sedemdesetega
|
|
|
|
osemdesetega devetdesetega stotega tisočega milijontega bilijontega
|
|
|
|
trilijontega kvadrilijontega neštetega
|
|
|
|
|
|
|
|
prvemu drugemu tretjemu četrtemu petemu šestemu sedmemu osmemu devetemu desetemu
|
|
|
|
enajstemu dvanajstemu trinajstemu štirnajstemu petnajstemu šestnajstemu sedemnajstemu
|
|
|
|
osemnajstemu devetnajstemu dvajsetemu tridesetemu štiridesetemu petdesetemu šestdesetemu
|
|
|
|
sedemdesetemu osemdesetemu devetdesetemu stotemu tisočemu milijontemu bilijontemu
|
|
|
|
trilijontemu kvadrilijontemu neštetemu
|
|
|
|
|
|
|
|
prvem drugem tretjem četrtem petem šestem sedmem osmem devetem desetem
|
|
|
|
enajstem dvanajstem trinajstem štirnajstem petnajstem šestnajstem sedemnajstem
|
|
|
|
osemnajstem devetnajstem dvajsetem tridesetem štiridesetem petdesetem šestdesetem
|
|
|
|
sedemdesetem osemdesetem devetdesetem stotem tisočem milijontem bilijontem
|
|
|
|
trilijontem kvadrilijontem neštetem
|
|
|
|
|
|
|
|
prvim drugim tretjim četrtim petim šestim sedtim osmim devetim desetim
|
|
|
|
enajstim dvanajstim trinajstim štirnajstim petnajstim šestnajstim sedemnajstim
|
|
|
|
osemnajstim devetnajstim dvajsetim tridesetim štiridesetim petdesetim šestdesetim
|
|
|
|
sedemdesetim osemdesetim devetdesetim stotim tisočim milijontim bilijontim
|
|
|
|
trilijontim kvadrilijontim neštetim
|
|
|
|
|
|
|
|
prvih drugih tretjih četrthih petih šestih sedmih osmih deveth desetih
|
|
|
|
enajstih dvanajstih trinajstih štirnajstih petnajstih šestnajstih sedemnajstih
|
|
|
|
osemnajstih devetnajstih dvajsetih tridesetih štiridesetih petdesetih šestdesetih
|
|
|
|
sedemdesetih osemdesetih devetdesetih stotih tisočih milijontih bilijontih
|
|
|
|
trilijontih kvadrilijontih nešteth
|
|
|
|
|
|
|
|
prvima drugima tretjima četrtima petima šestima sedmima osmima devetima desetima
|
|
|
|
enajstima dvanajstima trinajstima štirnajstima petnajstima šestnajstima sedemnajstima
|
|
|
|
osemnajstima devetnajstima dvajsetima tridesetima štiridesetima petdesetima šestdesetima
|
|
|
|
sedemdesetima osemdesetima devetdesetima stotima tisočima milijontima bilijontima
|
|
|
|
trilijontima kvadrilijontima neštetima
|
|
|
|
|
|
|
|
prve druge četrte pete šeste sedme osme devete desete
|
|
|
|
enajste dvanajste trinajste štirnajste petnajste šestnajste sedemnajste
|
|
|
|
osemnajste devetnajste dvajsete tridesete štiridesete petdesete šestdesete
|
|
|
|
sedemdesete osemdesete devetdesete stote tisoče milijonte bilijonte
|
|
|
|
trilijonte kvadrilijonte neštete
|
|
|
|
|
|
|
|
prvimi drugimi tretjimi četrtimi petimi šestimi sedtimi osmimi devetimi desetimi
|
|
|
|
enajstimi dvanajstimi trinajstimi štirnajstimi petnajstimi šestnajstimi sedemnajstimi
|
|
|
|
osemnajstimi devetnajstimi dvajsetimi tridesetimi štiridesetimi petdesetimi šestdesetimi
|
|
|
|
sedemdesetimi osemdesetimi devetdesetimi stotimi tisočimi milijontimi bilijontimi
|
|
|
|
trilijontimi kvadrilijontimi neštetimi
|
|
|
|
""".split()
|
|
|
|
)
|
|
|
|
|
|
|
|
_currency_words = set(
|
|
|
|
"""
|
|
|
|
evro evra evru evrom evrov evroma evrih evrom evre evri evr eur
|
|
|
|
cent centa centu cenom centov centoma centih centom cente centi
|
|
|
|
dolar dolarja dolarji dolarju dolarjem dolarjev dolarjema dolarjih dolarje usd
|
|
|
|
tolar tolarja tolarji tolarju tolarjem tolarjev tolarjema tolarjih tolarje tol
|
|
|
|
dinar dinarja dinarji dinarju dinarjem dinarjev dinarjema dinarjih dinarje din
|
|
|
|
funt funta funti funtu funtom funtov funtoma funtih funte gpb
|
|
|
|
forint forinta forinti forintu forintom forintov forintoma forintih forinte
|
|
|
|
zlot zlota zloti zlotu zlotom zlotov zlotoma zlotih zlote
|
|
|
|
rupij rupija rupiji rupiju rupijem rupijev rupijema rupijih rupije
|
|
|
|
jen jena jeni jenu jenom jenov jenoma jenih jene
|
|
|
|
kuna kuni kune kuno kun kunama kunah kunam kunami
|
|
|
|
marka marki marke markama markah markami
|
|
|
|
""".split()
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
def like_num(text):
|
|
|
|
if text.startswith(("+", "-", "±", "~")):
|
|
|
|
text = text[1:]
|
|
|
|
text = text.replace(",", "").replace(".", "")
|
|
|
|
if text.isdigit():
|
|
|
|
return True
|
|
|
|
if text.count("/") == 1:
|
|
|
|
num, denom = text.split("/")
|
|
|
|
if num.isdigit() and denom.isdigit():
|
|
|
|
return True
|
|
|
|
text_lower = text.lower()
|
|
|
|
if text_lower in _num_words:
|
|
|
|
return True
|
|
|
|
if text_lower in _ordinal_words:
|
|
|
|
return True
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
|
|
def is_currency(text):
|
|
|
|
text_lower = text.lower()
|
|
|
|
if text in _currency_words:
|
|
|
|
return True
|
|
|
|
for char in text:
|
|
|
|
if unicodedata.category(char) != "Sc":
|
|
|
|
return False
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
|
|
LEX_ATTRS = {LIKE_NUM: like_num, IS_CURRENCY: is_currency}
|