mirror of
https://github.com/explosion/spaCy.git
synced 2024-12-28 10:56:31 +03:00
75f3234404
## Description Related issues: #2379 (should be fixed by separating model tests) * **total execution time down from > 300 seconds to under 60 seconds** 🎉 * removed all model-specific tests that could only really be run manually anyway – those will now live in a separate test suite in the [`spacy-models`](https://github.com/explosion/spacy-models) repository and are already integrated into our new model training infrastructure * changed all relative imports to absolute imports to prepare for moving the test suite from `/spacy/tests` to `/tests` (it'll now always test against the installed version) * merged old regression tests into collections, e.g. `test_issue1001-1500.py` (about 90% of the regression tests are very short anyways) * tidied up and rewrote existing tests wherever possible ### Todo - [ ] move tests to `/tests` and adjust CI commands accordingly - [x] move model test suite from internal repo to `spacy-models` - [x] ~~investigate why `pipeline/test_textcat.py` is flakey~~ - [x] review old regression tests (leftover files) and see if they can be merged, simplified or deleted - [ ] update documentation on how to run tests ### Types of change enhancement, tests ## Checklist <!--- Before you submit the PR, go over this checklist and make sure you can tick off all the boxes. [] -> [x] --> - [x] I have submitted the spaCy Contributor Agreement. - [x] I ran the tests, and all new and existing tests passed. - [ ] My changes don't require a change to the documentation, or if they do, I've added all required information.
64 lines
2.4 KiB
Python
64 lines
2.4 KiB
Python
# coding: utf-8
|
|
from __future__ import unicode_literals
|
|
|
|
import pytest
|
|
from spacy.lang.ru import Russian
|
|
|
|
from ...util import get_doc
|
|
|
|
|
|
@pytest.fixture
|
|
def ru_lemmatizer():
|
|
pymorphy = pytest.importorskip('pymorphy2')
|
|
return Russian.Defaults.create_lemmatizer()
|
|
|
|
|
|
def test_ru_doc_lemmatization(ru_tokenizer):
|
|
words = ['мама', 'мыла', 'раму']
|
|
tags = ['NOUN__Animacy=Anim|Case=Nom|Gender=Fem|Number=Sing',
|
|
'VERB__Aspect=Imp|Gender=Fem|Mood=Ind|Number=Sing|Tense=Past|VerbForm=Fin|Voice=Act',
|
|
'NOUN__Animacy=Anim|Case=Acc|Gender=Fem|Number=Sing']
|
|
doc = get_doc(ru_tokenizer.vocab, words=words, tags=tags)
|
|
lemmas = [token.lemma_ for token in doc]
|
|
assert lemmas == ['мама', 'мыть', 'рама']
|
|
|
|
|
|
@pytest.mark.parametrize('text,lemmas', [
|
|
('гвоздики', ['гвоздик', 'гвоздика']),
|
|
('люди', ['человек']),
|
|
('реки', ['река']),
|
|
('кольцо', ['кольцо']),
|
|
('пепперони', ['пепперони'])])
|
|
def test_ru_lemmatizer_noun_lemmas(ru_lemmatizer, text, lemmas):
|
|
assert sorted(ru_lemmatizer.noun(text)) == lemmas
|
|
|
|
|
|
@pytest.mark.models('ru')
|
|
@pytest.mark.parametrize('text,pos,morphology,lemma', [
|
|
('рой', 'NOUN', None, 'рой'),
|
|
('рой', 'VERB', None, 'рыть'),
|
|
('клей', 'NOUN', None, 'клей'),
|
|
('клей', 'VERB', None, 'клеить'),
|
|
('три', 'NUM', None, 'три'),
|
|
('кос', 'NOUN', {'Number': 'Sing'}, 'кос'),
|
|
('кос', 'NOUN', {'Number': 'Plur'}, 'коса'),
|
|
('кос', 'ADJ', None, 'косой'),
|
|
('потом', 'NOUN', None, 'пот'),
|
|
('потом', 'ADV', None, 'потом')])
|
|
def test_ru_lemmatizer_works_with_different_pos_homonyms(ru_lemmatizer, text, pos, morphology, lemma):
|
|
assert ru_lemmatizer(text, pos, morphology) == [lemma]
|
|
|
|
|
|
@pytest.mark.parametrize('text,morphology,lemma', [
|
|
('гвоздики', {'Gender': 'Fem'}, 'гвоздика'),
|
|
('гвоздики', {'Gender': 'Masc'}, 'гвоздик'),
|
|
('вина', {'Gender': 'Fem'}, 'вина'),
|
|
('вина', {'Gender': 'Neut'}, 'вино')])
|
|
def test_ru_lemmatizer_works_with_noun_homonyms(ru_lemmatizer, text, morphology, lemma):
|
|
assert ru_lemmatizer.noun(text, morphology) == [lemma]
|
|
|
|
|
|
def test_ru_lemmatizer_punct(ru_lemmatizer):
|
|
assert ru_lemmatizer.punct('«') == ['"']
|
|
assert ru_lemmatizer.punct('»') == ['"']
|