fix: review cleanup — imports, _FakeToken, use_spacy_segmentation

- Move pronunciation imports from inside run() to top-level imports
- Extract _FakeToken to module level (was redefined every loop iteration)
- use_spacy_segmentation now mirrors PyQt logic: pass the flag,
  let process_subtitle_tokens filter by language internally
This commit is contained in:
Artem Akymenko
2026-07-18 06:52:28 +00:00
parent 294069e53e
commit e77c8b3372
2 changed files with 17 additions and 12 deletions
+5 -5
View File
@@ -39,6 +39,11 @@ from abogen.domain.subtitle_generation import process_subtitle_tokens
from abogen.domain.voice_loader import load_voice_cached
from abogen.domain.progress import calc_etr_str
from abogen.domain.normalization import prepare_text_for_tts
from abogen.domain.pronunciation import (
compile_pronunciation_rules,
compile_heteronym_sentence_rules,
merge_pronunciation_overrides,
)
from abogen.domain.metadata_extraction import (
extract_metadata_and_build_args,
read_text_for_metadata,
@@ -537,11 +542,6 @@ class ConversionThread(QThread):
)
# --- Compile normalization rules (heteronym + pronunciation) ---
from abogen.domain.pronunciation import (
compile_pronunciation_rules,
compile_heteronym_sentence_rules,
merge_pronunciation_overrides,
)
pronunciation_overrides = merge_pronunciation_overrides(
getattr(self, "pronunciation_overrides", None),
getattr(self, "manual_overrides", None),
+12 -7
View File
@@ -135,6 +135,16 @@ SPLIT_PATTERN = r"\n+" # Kept for backward compatibility; prefer get_split_patt
SAMPLE_RATE = 24000
class _FakeToken:
"""Minimal token stub for languages without per-word token support."""
def __init__(self, text: str, start: float, end: float):
self.text = text
self.start_ts = start
self.end_ts = end
self.whitespace = ""
class _JobCancelled(Exception):
"""Raised internally to abort a conversion when the client cancels."""
@@ -534,12 +544,6 @@ def run_conversion_job(job: Job) -> None:
# Fallback for languages without token support: create a single token
if not tokens_list and graphemes:
class _FakeToken:
def __init__(self, text, start, end):
self.text = text
self.start_ts = start
self.end_ts = end
self.whitespace = ""
tokens_list = [_FakeToken(graphemes, 0, duration)]
for tok in tokens_list:
@@ -555,6 +559,7 @@ def run_conversion_job(job: Job) -> None:
# Flush accumulated tokens through process_subtitle_tokens
if subtitle_writer and audio_sink and accumulated_tokens:
_use_spacy = job.subtitle_mode not in ("Disabled", "Line")
new_entries: List[tuple] = []
process_subtitle_tokens(
accumulated_tokens,
@@ -562,7 +567,7 @@ def run_conversion_job(job: Job) -> None:
job.max_subtitle_words,
job.subtitle_mode,
job.language,
use_spacy_segmentation=False,
use_spacy_segmentation=_use_spacy,
fallback_end_time=current_time,
)
for start, end, text in new_entries: