OPEN SOURCE
software/src/models/verse.py
このサイトで読み、必要なファイルを保存できます。
日常訳はAIを用いて作成された翻訳です。人間の聖書学・原語の専門家による全訳の検証は確認されていません。既存の翻訳や原語資料と照らし合わせてお読みください。
1"""Data models for Bible verses and translation context."""23from __future__ import annotations45from datetime import datetime6from typing import TYPE_CHECKING78from pydantic import BaseModel, Field910# Import enhanced glossary for backward compatibility11from src.models.glossary import EnhancedGlossaryTerm, GlossaryTerm, TheologicalDomain1213if TYPE_CHECKING:14pass1516# Re-export for backward compatibility17__all__ = [18"VerseReference",19"Verse",20"GlossaryTerm",21"EnhancedGlossaryTerm",22"TheologicalDomain",23"BookMetadata",24"ChapterSummary",25"TranslationContext",26"TranslationOutput",27]282930class VerseReference(BaseModel):31"""Reference to a specific Bible verse."""3233book: str = Field(..., description="Book name (e.g., 'john', 'genesis')")34chapter: int = Field(..., ge=1, description="Chapter number")35verse: int = Field(..., ge=1, description="Verse number")3637def __str__(self) -> str:38return f"{self.book}:{self.chapter}:{self.verse}"3940@classmethod41def from_string(cls, ref: str) -> VerseReference:42"""Parse a verse reference string like 'john:1:1'."""43parts = ref.lower().split(":")44if len(parts) != 3:45msg = f"Invalid verse reference: {ref}. Expected format: 'book:chapter:verse'"46raise ValueError(msg)47return cls(book=parts[0], chapter=int(parts[1]), verse=int(parts[2]))484950class Verse(BaseModel):51"""A Bible verse with source texts from multiple translations."""5253reference: VerseReference54greek_text: str | None = Field(None, description="Greek source text (NT only)")55greek_translit: str | None = Field(None, description="Greek transliteration")56hebrew_text: str | None = Field(None, description="Hebrew source text (OT only)")57hebrew_translit: str | None = Field(None, description="Hebrew transliteration")58japanese_meiji: str | None = Field(None, description="Meiji translation (1887)")59japanese_taisho: str | None = Field(None, description="Taisho translation (1917)")60japanese_kougo: str | None = Field(None, description="Kougo translation (1955)")61greek_words: list[dict] | None = Field(None, description="MorphGNT word entries")62hebrew_words: list[dict] | None = Field(None, description="OSHB word entries")63english_kjv: str | None = Field(None, description="King James Version")64english_asv: str | None = Field(None, description="American Standard Version")6566def has_source_text(self) -> bool:67"""Check if the verse has at least one source text."""68return bool(self.greek_text or self.hebrew_text)697071class BookMetadata(BaseModel):72"""Metadata about a Bible book."""7374book: str = Field(..., description="Book name (e.g., 'john')")75name_japanese: str = Field(..., description="Japanese book name")76name_english: str = Field(..., description="English book name")77testament: str = Field(..., description="'OT' or 'NT'")78author: str = Field(..., description="Traditional author attribution")79themes: list[str] = Field(default_factory=list, description="Key themes")80description: str = Field(..., description="Brief description of the book")81chapter_count: int = Field(..., ge=1, description="Total number of chapters")82verse_count: int = Field(..., ge=1, description="Total number of verses")838485class ChapterSummary(BaseModel):86"""Summary of a Bible chapter for context."""8788book: str89chapter: int90summary: str = Field(..., description="Brief chapter summary")91key_events: list[str] = Field(default_factory=list)92key_characters: list[str] = Field(default_factory=list)93key_themes: list[str] = Field(default_factory=list)949596class TranslationContext(BaseModel):97"""Full context for translating a verse."""9899target_verse: Verse100preceding_verses: list[Verse] = Field(default_factory=list)101following_verses: list[Verse] = Field(default_factory=list)102chapter_summary: ChapterSummary | None = None103book_metadata: BookMetadata | None = None104glossary_terms: list[GlossaryTerm] = Field(default_factory=list)105106107class TranslationOutput(BaseModel):108"""Output from a translation operation."""109110reference: VerseReference111text: str = Field(..., description="Plain Japanese text (furigana stripped)")112text_with_furigana: str = Field(113default="", description="Text with inline furigana notation"114)115furigana_annotations: list[dict] = Field(116default_factory=list, description="Serialized FuriganaAnnotation list"117)118model: str = Field(..., description="Model used for translation")119timestamp: datetime = Field(default_factory=datetime.utcnow)120prompt_version: str = Field(default="v1.0")121sources_used: list[str] = Field(122default_factory=list, description="Source texts used"123)124glossary_terms_applied: list[str] = Field(125default_factory=list, description="Glossary terms applied"126)127