mirror of
https://github.com/explosion/spaCy.git
synced 2024-12-26 09:56:28 +03:00
2311192ba1
* Include Macedonian language * Fix indentation at char_classes.py * Fix indentation at char_classes.py * Add Macedonian tests, update lex_attrs and char_classes * Import unicode literals for python 2
59 lines
3.1 KiB
Python
59 lines
3.1 KiB
Python
# coding: utf8
|
||
from __future__ import unicode_literals
|
||
|
||
from ...attrs import LIKE_NUM
|
||
|
||
_num_words = [
|
||
"нула", "еден", "една", "едно", "два", "две", "три", "четири", "пет", "шест", "седум", "осум", "девет", "десет",
|
||
"единаесет", "дванаесет", "тринаесет", "четиринаесет", "петнаесет", "шеснаесет", "седумнаесет", "осумнаесет",
|
||
"деветнаесет", "дваесет", "триесет", "четириесет", "педесет", "шеесет", "седумдесет", "осумдесет", "деведесет",
|
||
"сто", "двесте", "триста", "четиристотини", "петстотини", "шестотини", "седумстотини", "осумстотини",
|
||
"деветстотини", "илјада", "илјади", 'милион', 'милиони', 'милијарда', 'милијарди', 'билион', 'билиони',
|
||
|
||
"двајца", "тројца", "четворица", "петмина", "шестмина", "седуммина", "осуммина", "деветмина", "обата", "обајцата",
|
||
|
||
"прв", "втор", "трет", "четврт", "седм", "осм", "двестоти",
|
||
|
||
"два-три", "два-триесет", "два-триесетмина", "два-тринаесет", "два-тројца", "две-три", "две-тристотини",
|
||
"пет-шеесет", "пет-шеесетмина", "пет-шеснаесетмина", "пет-шест", "пет-шестмина", "пет-шестотини", "петина",
|
||
"осмина", "седум-осум", "седум-осумдесет", "седум-осуммина", "седум-осумнаесет", "седум-осумнаесетмина",
|
||
"три-четириесет", "три-четиринаесет", "шеесет", "шеесетина", "шеесетмина", "шеснаесет", "шеснаесетмина",
|
||
"шест-седум", "шест-седумдесет", "шест-седумнаесет", "шест-седумстотини", "шестоти", "шестотини"
|
||
]
|
||
|
||
|
||
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.endswith(("а", "о", "и")):
|
||
if text_lower[:-1] in _num_words:
|
||
return True
|
||
|
||
if text_lower.endswith(("ти", "та", "то", "на")):
|
||
if text_lower[:-2] in _num_words:
|
||
return True
|
||
|
||
if text_lower.endswith(("ата", "иот", "ите", "ина", "чки")):
|
||
if text_lower[:-3] in _num_words:
|
||
return True
|
||
|
||
if text_lower.endswith(("мина", "тина")):
|
||
if text_lower[:-4] in _num_words:
|
||
return True
|
||
return False
|
||
|
||
|
||
LEX_ATTRS = {LIKE_NUM: like_num}
|