mirror of
				https://github.com/explosion/spaCy.git
				synced 2025-11-04 09:57:26 +03:00 
			
		
		
		
	Updates to Romanian support (#2354)
* Add back Romanian in conftest * Romanian lex_attr * More tokenizer exceptions for Romanian * Add tests for some Romanian tokenizer exceptions
This commit is contained in:
		
							parent
							
								
									1a4682dd0b
								
							
						
					
					
						commit
						ec62cadf4c
					
				
							
								
								
									
										42
									
								
								spacy/lang/ro/lex_attrs.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								spacy/lang/ro/lex_attrs.py
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,42 @@
 | 
				
			||||||
 | 
					# coding: utf8
 | 
				
			||||||
 | 
					from __future__ import unicode_literals
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from ...attrs import LIKE_NUM
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					_num_words = set("""
 | 
				
			||||||
 | 
					zero unu doi două trei patru cinci șase șapte opt nouă zece
 | 
				
			||||||
 | 
					unsprezece doisprezece douăsprezece treisprezece patrusprezece cincisprezece șaisprezece șaptesprezece optsprezece nouăsprezece
 | 
				
			||||||
 | 
					douăzeci treizeci patruzeci cincizeci șaizeci șaptezeci optzeci nouăzeci
 | 
				
			||||||
 | 
					sută mie milion miliard bilion trilion cvadrilion catralion cvintilion sextilion septilion enșpemii
 | 
				
			||||||
 | 
					""".split())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					_ordinal_words = set("""
 | 
				
			||||||
 | 
					primul doilea treilea patrulea cincilea șaselea șaptelea optulea nouălea zecelea
 | 
				
			||||||
 | 
					prima doua treia patra cincia șasea șaptea opta noua zecea
 | 
				
			||||||
 | 
					unsprezecelea doisprezecelea treisprezecelea patrusprezecelea cincisprezecelea șaisprezecelea șaptesprezecelea optsprezecelea nouăsprezecelea
 | 
				
			||||||
 | 
					unsprezecea douăsprezecea treisprezecea patrusprezecea cincisprezecea șaisprezecea șaptesprezecea optsprezecea nouăsprezecea
 | 
				
			||||||
 | 
					douăzecilea treizecilea patruzecilea cincizecilea șaizecilea șaptezecilea optzecilea nouăzecilea sutălea
 | 
				
			||||||
 | 
					douăzecea treizecea patruzecea cincizecea șaizecea șaptezecea optzecea nouăzecea suta
 | 
				
			||||||
 | 
					miilea mielea mia milionulea milioana miliardulea miliardelea miliarda enșpemia
 | 
				
			||||||
 | 
					""".split())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def like_num(text):
 | 
				
			||||||
 | 
					    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
 | 
				
			||||||
 | 
					    if text.lower() in _num_words:
 | 
				
			||||||
 | 
					        return True
 | 
				
			||||||
 | 
					    if text.lower() in _ordinal_words:
 | 
				
			||||||
 | 
					        return True
 | 
				
			||||||
 | 
					    return False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LEX_ATTRS = {
 | 
				
			||||||
 | 
					    LIKE_NUM: like_num
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -9,8 +9,9 @@ _exc = {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Source: https://en.wiktionary.org/wiki/Category:Romanian_abbreviations
 | 
					# Source: https://en.wiktionary.org/wiki/Category:Romanian_abbreviations
 | 
				
			||||||
for orth in [
 | 
					for orth in [
 | 
				
			||||||
    "1-a", "1-ul", "10-a", "10-lea", "2-a", "3-a", "3-lea", "6-lea",
 | 
					    "1-a", "2-a", "3-a", "4-a", "5-a", "6-a", "7-a", "8-a", "9-a", "10-a", "11-a", "12-a",
 | 
				
			||||||
    "d-voastră", "dvs.", "Rom.", "str."]:
 | 
					    "1-ul", "2-lea", "3-lea", "4-lea", "5-lea", "6-lea", "7-lea", "8-lea", "9-lea", "10-lea", "11-lea", "12-lea",
 | 
				
			||||||
 | 
					    "d-voastră", "dvs.", "ing.", "dr.", "Rom.", "str.", "nr.", "etc.", "d.p.d.v.", "dpdv", "șamd.", "ș.a.m.d."]:
 | 
				
			||||||
    _exc[orth] = [{ORTH: orth}]
 | 
					    _exc[orth] = [{ORTH: orth}]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -15,7 +15,7 @@ from .. import util
 | 
				
			||||||
# here if it's using spaCy's tokenizer (not a different library)
 | 
					# here if it's using spaCy's tokenizer (not a different library)
 | 
				
			||||||
# TODO: re-implement generic tokenizer tests
 | 
					# TODO: re-implement generic tokenizer tests
 | 
				
			||||||
_languages = ['bn', 'da', 'de', 'en', 'es', 'fi', 'fr', 'ga', 'he', 'hu', 'id',
 | 
					_languages = ['bn', 'da', 'de', 'en', 'es', 'fi', 'fr', 'ga', 'he', 'hu', 'id',
 | 
				
			||||||
              'it', 'nb', 'nl', 'pl', 'pt', 'ru', 'sv', 'tr', 'ar', 'xx']
 | 
					              'it', 'nb', 'nl', 'pl', 'pt', 'ro', 'ru', 'sv', 'tr', 'ar', 'xx']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
_models = {'en': ['en_core_web_sm'],
 | 
					_models = {'en': ['en_core_web_sm'],
 | 
				
			||||||
           'de': ['de_core_news_md'],
 | 
					           'de': ['de_core_news_md'],
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										25
									
								
								spacy/tests/lang/ro/test_tokenizer.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								spacy/tests/lang/ro/test_tokenizer.py
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,25 @@
 | 
				
			||||||
 | 
					# coding: utf8
 | 
				
			||||||
 | 
					from __future__ import unicode_literals
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import pytest
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DEFAULT_TESTS = [
 | 
				
			||||||
 | 
					    ('Adresa este str. Principală nr. 5.', ['Adresa', 'este', 'str.', 'Principală', 'nr.', '5', '.']),
 | 
				
			||||||
 | 
					    ('Teste, etc.', ['Teste', ',', 'etc.']),
 | 
				
			||||||
 | 
					    ('Lista, ș.a.m.d.', ['Lista', ',', 'ș.a.m.d.']),
 | 
				
			||||||
 | 
					    ('Și d.p.d.v. al...', ['Și', 'd.p.d.v.', 'al', '...'])
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					NUMBER_TESTS = [
 | 
				
			||||||
 | 
					    ('Clasa a 4-a.', ['Clasa', 'a', '4-a', '.']),
 | 
				
			||||||
 | 
					    ('Al 12-lea ceas.', ['Al', '12-lea', 'ceas', '.'])
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TESTCASES = DEFAULT_TESTS + NUMBER_TESTS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@pytest.mark.parametrize('text,expected_tokens', TESTCASES)
 | 
				
			||||||
 | 
					def test_tokenizer_handles_testcases(ro_tokenizer, text, expected_tokens):
 | 
				
			||||||
 | 
					    tokens = ro_tokenizer(text)
 | 
				
			||||||
 | 
					    token_list = [token.text for token in tokens if not token.is_space]
 | 
				
			||||||
 | 
					    assert expected_tokens == token_list
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user