mirror of
				https://github.com/explosion/spaCy.git
				synced 2025-11-04 09:57:26 +03:00 
			
		
		
		
	* Use isort with Black profile * isort all the things * Fix import cycles as a result of import sorting * Add DOCBIN_ALL_ATTRS type definition * Add isort to requirements * Remove isort from build dependencies check * Typo
		
			
				
	
	
		
			89 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from ...attrs import LIKE_NUM
 | 
						||
 | 
						||
# Eleven, twelve etc. are written separate: on bir, on iki
 | 
						||
 | 
						||
_num_words = [
 | 
						||
    "bir",
 | 
						||
    "iki",
 | 
						||
    "üç",
 | 
						||
    "dörd",
 | 
						||
    "beş",
 | 
						||
    "altı",
 | 
						||
    "yeddi",
 | 
						||
    "səkkiz",
 | 
						||
    "doqquz",
 | 
						||
    "on",
 | 
						||
    "iyirmi",
 | 
						||
    "otuz",
 | 
						||
    "qırx",
 | 
						||
    "əlli",
 | 
						||
    "altmış",
 | 
						||
    "yetmiş",
 | 
						||
    "səksən",
 | 
						||
    "doxsan",
 | 
						||
    "yüz",
 | 
						||
    "min",
 | 
						||
    "milyon",
 | 
						||
    "milyard",
 | 
						||
    "trilyon",
 | 
						||
    "kvadrilyon",
 | 
						||
    "kentilyon",
 | 
						||
]
 | 
						||
 | 
						||
 | 
						||
_ordinal_words = [
 | 
						||
    "birinci",
 | 
						||
    "ikinci",
 | 
						||
    "üçüncü",
 | 
						||
    "dördüncü",
 | 
						||
    "beşinci",
 | 
						||
    "altıncı",
 | 
						||
    "yedinci",
 | 
						||
    "səkkizinci",
 | 
						||
    "doqquzuncu",
 | 
						||
    "onuncu",
 | 
						||
    "iyirminci",
 | 
						||
    "otuzuncu",
 | 
						||
    "qırxıncı",
 | 
						||
    "əllinci",
 | 
						||
    "altmışıncı",
 | 
						||
    "yetmişinci",
 | 
						||
    "səksəninci",
 | 
						||
    "doxsanıncı",
 | 
						||
    "yüzüncü",
 | 
						||
    "mininci",
 | 
						||
    "milyonuncu",
 | 
						||
    "milyardıncı",
 | 
						||
    "trilyonuncu",
 | 
						||
    "kvadrilyonuncu",
 | 
						||
    "kentilyonuncu",
 | 
						||
]
 | 
						||
 | 
						||
_ordinal_endings = ("inci", "ıncı", "nci", "ncı", "uncu", "üncü")
 | 
						||
 | 
						||
 | 
						||
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()
 | 
						||
    # Check cardinal number
 | 
						||
    if text_lower in _num_words:
 | 
						||
        return True
 | 
						||
    # Check ordinal number
 | 
						||
    if text_lower in _ordinal_words:
 | 
						||
        return True
 | 
						||
    if text_lower.endswith(_ordinal_endings):
 | 
						||
        if text_lower[:-3].isdigit() or text_lower[:-4].isdigit():
 | 
						||
            return True
 | 
						||
    return False
 | 
						||
 | 
						||
 | 
						||
LEX_ATTRS = {LIKE_NUM: like_num}
 |