145 lines
6.4 KiB
Python
145 lines
6.4 KiB
Python
|
import unicodedata
|
||
|
|
||
|
from ...attrs import IS_CURRENCY, LIKE_NUM
|
||
|
|
||
|
_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}
|