spaCy/spacy/lang/hsb/lex_attrs.py

78 lines
1.6 KiB
Python
Raw Normal View History

from ...attrs import LIKE_NUM
_num_words = [
"nul",
"jedyn", "jedna", "jedne",
"dwaj", "dwě",
"tři", "třo",
"štyri", "štyrjo",
"pjeć",
"šěsć",
"sydom",
"wosom",
"dźewjeć",
"dźesać",
"jědnaće",
"dwanaće",
"třinaće",
"štyrnaće",
"pjatnaće",
"šěsnaće",
"sydomnaće",
"wosomnaće",
"dźewjatnaće",
"dwaceći"
"třiceći",
"štyrceći",
"pjećdźesat",
"šěsćdźesat",
"sydomdźesat",
"wosomdźesat",
"dźewjećdźesat",
"sto",
"tysac",
"milion",
"miliarda",
"bilion",
"biliarda",
"trilion",
"triliarda",
]
_ordinal_words = [
"prěni", "prěnja", "prěnje",
"druhi", "druha", "druhe",
"třeći", "třeća", "třeće",
"štwórty", "štwórta", "štwórte",
"pjaty", "pjata", "pjate",
"šěsty", "šěsta", "šěste",
"sydmy", "sydma", "sydme",
"wosmy", "wosma", "wosme",
"dźewjaty", "dźewjata", "dźewjate",
"dźesaty", "dźesata", "dźesate",
"jědnaty", "jědnata", "jědnate",
"dwanaty", "dwanata", "dwanate"
]
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
# Check ordinal number
if text_lower in _ordinal_words:
return True
return False
LEX_ATTRS = {LIKE_NUM: like_num}