spaCy/spacy/tests/test_matcher.py

62 lines
1.6 KiB
Python
Raw Normal View History

from __future__ import unicode_literals
import pytest
from spacy.strings import StringStore
from spacy.matcher import *
2015-09-06 06:40:10 +03:00
from spacy.attrs import LOWER
from spacy.tokens.doc import Doc
from spacy.vocab import Vocab
@pytest.fixture
def matcher(EN):
2015-08-06 15:33:35 +03:00
patterns = {
2015-08-06 17:09:28 +03:00
'Javascript': ['PRODUCT', {}, [[{'ORTH': 'JavaScript'}]]],
'GoogleNow': ['PRODUCT', {}, [[{'ORTH': 'Google'}, {'ORTH': 'Now'}]]],
2015-09-06 06:40:10 +03:00
'Java': ['PRODUCT', {}, [[{'LOWER': 'java'}]]],
2015-08-06 15:33:35 +03:00
}
return Matcher(EN.vocab, patterns)
def test_compile(matcher):
assert matcher.n_patterns == 3
2015-08-06 15:33:35 +03:00
def test_no_match(matcher, EN):
tokens = EN('I like cheese')
assert matcher(tokens) == []
def test_match_start(matcher, EN):
tokens = EN('JavaScript is good')
2015-08-06 15:33:35 +03:00
assert matcher(tokens) == [(EN.vocab.strings['PRODUCT'], 0, 1)]
def test_match_end(matcher, EN):
2015-09-06 06:40:10 +03:00
tokens = EN('I like java')
2015-08-06 15:33:35 +03:00
assert matcher(tokens) == [(EN.vocab.strings['PRODUCT'], 2, 3)]
def test_match_middle(matcher, EN):
tokens = EN('I like Google Now best')
2015-08-06 15:33:35 +03:00
assert matcher(tokens) == [(EN.vocab.strings['PRODUCT'], 2, 4)]
def test_match_multi(matcher, EN):
2015-09-06 06:40:10 +03:00
tokens = EN('I like Google Now and java best')
2015-08-06 15:33:35 +03:00
assert matcher(tokens) == [(EN.vocab.strings['PRODUCT'], 2, 4),
(EN.vocab.strings['PRODUCT'], 5, 6)]
@pytest.mark.models
def test_match_preserved(matcher, EN):
2015-09-06 06:40:10 +03:00
doc = EN.tokenizer('I like java')
EN.tagger(doc)
assert len(doc.ents) == 0
2015-09-06 06:40:10 +03:00
doc = EN.tokenizer('I like java')
matcher(doc)
assert len(doc.ents) == 1
EN.tagger(doc)
EN.entity(doc)
assert len(doc.ents) == 1