Merge branch 'develop' of https://github.com/explosion/spaCy into develop

This commit is contained in:
Matthew Honnibal 2017-09-17 05:47:50 -05:00
commit b159e0eb50
7 changed files with 43 additions and 25 deletions

View File

@ -13,7 +13,6 @@ requests>=2.13.0,<3.0.0
regex==2017.4.5 regex==2017.4.5
ftfy>=4.4.2,<5.0.0 ftfy>=4.4.2,<5.0.0
pytest>=3.0.6,<4.0.0 pytest>=3.0.6,<4.0.0
pip>=9.0.0,<10.0.0
mock>=2.0.0,<3.0.0 mock>=2.0.0,<3.0.0
msgpack-python msgpack-python
msgpack-numpy msgpack-numpy

View File

@ -197,7 +197,6 @@ def setup_package():
'preshed>=1.0.0,<2.0.0', 'preshed>=1.0.0,<2.0.0',
'thinc>=6.8.1,<6.9.0', 'thinc>=6.8.1,<6.9.0',
'plac<1.0.0,>=0.9.6', 'plac<1.0.0,>=0.9.6',
'pip>=9.0.0,<10.0.0',
'six', 'six',
'pathlib', 'pathlib',
'ujson>=1.35', 'ujson>=1.35',

View File

@ -3,6 +3,7 @@ from __future__ import unicode_literals
from .tokenizer_exceptions import TOKENIZER_EXCEPTIONS from .tokenizer_exceptions import TOKENIZER_EXCEPTIONS
from .norm_exceptions import NORM_EXCEPTIONS from .norm_exceptions import NORM_EXCEPTIONS
from .punctuation import TOKENIZER_INFIXES
from .tag_map import TAG_MAP from .tag_map import TAG_MAP
from .stop_words import STOP_WORDS from .stop_words import STOP_WORDS
from .lemmatizer import LOOKUP from .lemmatizer import LOOKUP
@ -23,6 +24,7 @@ class GermanDefaults(Language.Defaults):
NORM_EXCEPTIONS, BASE_NORMS) NORM_EXCEPTIONS, BASE_NORMS)
tokenizer_exceptions = update_exc(BASE_EXCEPTIONS, TOKENIZER_EXCEPTIONS) tokenizer_exceptions = update_exc(BASE_EXCEPTIONS, TOKENIZER_EXCEPTIONS)
infixes = tuple(TOKENIZER_INFIXES)
tag_map = dict(TAG_MAP) tag_map = dict(TAG_MAP)
stop_words = set(STOP_WORDS) stop_words = set(STOP_WORDS)
syntax_iterators = dict(SYNTAX_ITERATORS) syntax_iterators = dict(SYNTAX_ITERATORS)

View File

@ -0,0 +1,20 @@
# coding: utf8
from __future__ import unicode_literals
from ..char_classes import LIST_ELLIPSES, LIST_ICONS
from ..char_classes import QUOTES, ALPHA, ALPHA_LOWER, ALPHA_UPPER
_quotes = QUOTES.replace("'", '')
_infixes = (LIST_ELLIPSES + LIST_ICONS +
[r'(?<=[{}])\.(?=[{}])'.format(ALPHA_LOWER, ALPHA_UPPER),
r'(?<=[{a}])[,!?](?=[{a}])'.format(a=ALPHA),
r'(?<=[{a}"])[:<>=](?=[{a}])'.format(a=ALPHA),
r'(?<=[{a}]),(?=[{a}])'.format(a=ALPHA),
r'(?<=[{a}])([{q}\)\]\(\[])(?=[\{a}])'.format(a=ALPHA, q=_quotes),
r'(?<=[{a}])--(?=[{a}])'.format(a=ALPHA),
r'(?<=[0-9])-(?=[0-9])'])
TOKENIZER_INFIXES = _infixes

View File

@ -67,12 +67,6 @@ def test_tokenizer_splits_uneven_wrap_interact(de_tokenizer, text):
assert len(tokens) == 4 assert len(tokens) == 4
@pytest.mark.parametrize('text', ["blau-rot"])
def test_tokenizer_splits_hyphens(de_tokenizer, text):
tokens = de_tokenizer(text)
assert len(tokens) == 3
@pytest.mark.parametrize('text', ["0.1-13.5", "0.0-0.1", "103.27-300"]) @pytest.mark.parametrize('text', ["0.1-13.5", "0.0-0.1", "103.27-300"])
def test_tokenizer_splits_numeric_range(de_tokenizer, text): def test_tokenizer_splits_numeric_range(de_tokenizer, text):
tokens = de_tokenizer(text) tokens = de_tokenizer(text)
@ -100,17 +94,21 @@ def test_tokenizer_splits_ellipsis_infix(de_tokenizer, text):
assert len(tokens) == 3 assert len(tokens) == 3
@pytest.mark.parametrize('text', ['Islam-Konferenz', 'Ost-West-Konflikt'])
def test_tokenizer_keeps_hyphens(de_tokenizer, text):
tokens = de_tokenizer(text)
assert len(tokens) == 1
def test_tokenizer_splits_double_hyphen_infix(de_tokenizer): def test_tokenizer_splits_double_hyphen_infix(de_tokenizer):
tokens = de_tokenizer("Viele Regeln--wie die Bindestrich-Regeln--sind kompliziert.") tokens = de_tokenizer("Viele Regeln--wie die Bindestrich-Regeln--sind kompliziert.")
assert len(tokens) == 12 assert len(tokens) == 10
assert tokens[0].text == "Viele" assert tokens[0].text == "Viele"
assert tokens[1].text == "Regeln" assert tokens[1].text == "Regeln"
assert tokens[2].text == "--" assert tokens[2].text == "--"
assert tokens[3].text == "wie" assert tokens[3].text == "wie"
assert tokens[4].text == "die" assert tokens[4].text == "die"
assert tokens[5].text == "Bindestrich" assert tokens[5].text == "Bindestrich-Regeln"
assert tokens[6].text == "-" assert tokens[6].text == "--"
assert tokens[7].text == "Regeln" assert tokens[7].text == "sind"
assert tokens[8].text == "--" assert tokens[8].text == "kompliziert"
assert tokens[9].text == "sind"
assert tokens[10].text == "kompliziert"

View File

@ -25,15 +25,15 @@ Umfang kläglich dünnen Beine flimmerten ihm hilflos vor den Augen.
assert len(tokens) == 109 assert len(tokens) == 109
@pytest.mark.parametrize('text,length', [ @pytest.mark.parametrize('text', [
("Donaudampfschifffahrtsgesellschaftskapitänsanwärterposten", 1), "Donaudampfschifffahrtsgesellschaftskapitänsanwärterposten",
("Rindfleischetikettierungsüberwachungsaufgabenübertragungsgesetz", 1), "Rindfleischetikettierungsüberwachungsaufgabenübertragungsgesetz",
("Kraftfahrzeug-Haftpflichtversicherung", 3), "Kraftfahrzeug-Haftpflichtversicherung",
("Vakuum-Mittelfrequenz-Induktionsofen", 5) "Vakuum-Mittelfrequenz-Induktionsofen"
]) ])
def test_tokenizer_handles_long_words(de_tokenizer, text, length): def test_tokenizer_handles_long_words(de_tokenizer, text):
tokens = de_tokenizer(text) tokens = de_tokenizer(text)
assert len(tokens) == length assert len(tokens) == 1
@pytest.mark.parametrize('text,length', [ @pytest.mark.parametrize('text,length', [

View File

@ -3,7 +3,7 @@ from __future__ import unicode_literals, print_function
import os import os
import ujson import ujson
import pip import pkg_resources
import importlib import importlib
import regex as re import regex as re
from pathlib import Path from pathlib import Path
@ -180,9 +180,9 @@ def is_package(name):
name (unicode): Name of package. name (unicode): Name of package.
RETURNS (bool): True if installed package, False if not. RETURNS (bool): True if installed package, False if not.
""" """
packages = pip.get_installed_distributions() packages = pkg_resources.working_set.by_key.keys()
for package in packages: for package in packages:
if package.project_name.replace('-', '_') == name: if package.replace('-', '_') == name:
return True return True
return False return False