From 8ae5394bbaa383d630912e79d0822aa7c8ac7dca Mon Sep 17 00:00:00 2001 From: Yi Ding Date: Thu, 11 Jun 2026 22:46:01 -0700 Subject: [PATCH 1/2] fix(spacy): preserve positional language argument --- sentencesplit/spacy_component.py | 10 +++++++++- tests/test_spacy_component.py | 14 ++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/sentencesplit/spacy_component.py b/sentencesplit/spacy_component.py index 24f759b..6934ad5 100644 --- a/sentencesplit/spacy_component.py +++ b/sentencesplit/spacy_component.py @@ -3,11 +3,19 @@ import re +from sentencesplit.languages import LANGUAGE_CODES + +_DEFAULT_COMPONENT_NAME = "sentencesplit" + class SentenceSplitFactory: """sentencesplit as a spacy component through entrypoints""" - def __init__(self, nlp, name: str = "sentencesplit", language: str = "en") -> None: + def __init__(self, nlp, name: str = _DEFAULT_COMPONENT_NAME, language: str = "en") -> None: + if language == "en" and name != _DEFAULT_COMPONENT_NAME and name in LANGUAGE_CODES: + language = name + name = _DEFAULT_COMPONENT_NAME + self.nlp = nlp self.name = name # Deferred import avoids circular dependency with sentencesplit.__init__ diff --git a/tests/test_spacy_component.py b/tests/test_spacy_component.py index a7711e3..822da4b 100644 --- a/tests/test_spacy_component.py +++ b/tests/test_spacy_component.py @@ -22,6 +22,20 @@ def test_create_sentencesplit_is_importable_without_spacy_runtime(): assert isinstance(factory, SentenceSplitFactory) +def test_spacy_component_preserves_positional_language_argument(): + factory = SentenceSplitFactory(None, "fr") + + assert factory.name == "sentencesplit" + assert factory.seg.language == "fr" + + +def test_create_sentencesplit_preserves_spacy_name_and_language(): + factory = create_sentencesplit(None, "custom_sentences", "fr") + + assert factory.name == "custom_sentences" + assert factory.seg.language == "fr" + + def test_spacy_component_reads_doc_text(): doc = FakeDoc("Hello. World.", [0, 1, 7]) factory = SentenceSplitFactory(None) From 4414c460a2e0486a559cfb140fceb86431fed360 Mon Sep 17 00:00:00 2001 From: Yi Ding Date: Thu, 11 Jun 2026 23:20:34 -0700 Subject: [PATCH 2/2] fix(spacy): preserve explicit language config --- sentencesplit/spacy_component.py | 16 +++++++++++----- tests/test_spacy_component.py | 14 ++++++++++++++ 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/sentencesplit/spacy_component.py b/sentencesplit/spacy_component.py index 228fc82..7369f83 100644 --- a/sentencesplit/spacy_component.py +++ b/sentencesplit/spacy_component.py @@ -6,22 +6,28 @@ from sentencesplit.languages import LANGUAGE_CODES _DEFAULT_COMPONENT_NAME = "sentencesplit" +_DEFAULT_LANGUAGE = object() class SentenceSplitFactory: """sentencesplit as a spacy component through entrypoints""" - def __init__(self, nlp, name: str = _DEFAULT_COMPONENT_NAME, language: str = "en") -> None: - if language == "en" and name != _DEFAULT_COMPONENT_NAME and name in LANGUAGE_CODES: - language = name - name = _DEFAULT_COMPONENT_NAME + def __init__(self, nlp, name: str = _DEFAULT_COMPONENT_NAME, language: str | object = _DEFAULT_LANGUAGE) -> None: + if language is _DEFAULT_LANGUAGE: + if name != _DEFAULT_COMPONENT_NAME and name in LANGUAGE_CODES: + language_code = name + name = _DEFAULT_COMPONENT_NAME + else: + language_code = "en" + else: + language_code = language self.nlp = nlp self.name = name # Deferred import avoids circular dependency with sentencesplit.__init__ from sentencesplit import Segmenter - self.seg = Segmenter(language=language, clean=False) + self.seg = Segmenter(language=language_code, clean=False) def __call__(self, doc): sents_char_spans = self.seg.segment_spans(doc.text) diff --git a/tests/test_spacy_component.py b/tests/test_spacy_component.py index 822da4b..fc82dc7 100644 --- a/tests/test_spacy_component.py +++ b/tests/test_spacy_component.py @@ -36,6 +36,20 @@ def test_create_sentencesplit_preserves_spacy_name_and_language(): assert factory.seg.language == "fr" +def test_spacy_component_preserves_explicit_english_with_language_code_name(): + factory = SentenceSplitFactory(None, "fr", "en") + + assert factory.name == "fr" + assert factory.seg.language == "en" + + +def test_create_sentencesplit_preserves_explicit_english_with_language_code_name(): + factory = create_sentencesplit(None, "fr", "en") + + assert factory.name == "fr" + assert factory.seg.language == "en" + + def test_spacy_component_reads_doc_text(): doc = FakeDoc("Hello. World.", [0, 1, 7]) factory = SentenceSplitFactory(None)