|
""" |
|
显示模块 - 负责将转写结果显示给用户 |
|
""" |
|
|
|
from rich.console import Console |
|
from rich.text import Text |
|
from typing import Literal |
|
import logging |
|
|
|
|
|
def setup_logger(name, level=logging.INFO): |
|
"""设置日志记录器""" |
|
logger = logging.getLogger(name) |
|
|
|
if logger.handlers: |
|
logger.handlers.clear() |
|
|
|
|
|
handler = logging.StreamHandler() |
|
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') |
|
handler.setFormatter(formatter) |
|
logger.addHandler(handler) |
|
logger.setLevel(level) |
|
|
|
logger.propagate = False |
|
return logger |
|
|
|
|
|
logger = setup_logger("display") |
|
|
|
|
|
console = Console() |
|
|
|
class OutputRenderer: |
|
""" |
|
输出渲染器,负责将转写结果显示给用户 |
|
支持原始文本和优化后文本的不同样式显示 |
|
""" |
|
|
|
def __init__(self): |
|
"""初始化输出渲染器""" |
|
self.history = {} |
|
logger.debug("输出渲染器初始化完成") |
|
|
|
def display(self, sentence_id: str, text: str, state: Literal["raw", "optimized"]): |
|
""" |
|
显示转写结果 |
|
|
|
:param sentence_id: 句子ID |
|
:param text: 文本内容 |
|
:param state: 状态,raw表示原始文本,optimized表示优化后文本 |
|
""" |
|
if state == "raw": |
|
styled_text = Text(text, style="dim") |
|
logger.debug(f"显示原始文本: {sentence_id}") |
|
elif state == "optimized": |
|
styled_text = Text(text, style="bold black") |
|
logger.debug(f"显示优化文本: {sentence_id}") |
|
else: |
|
logger.error(f"未知的输出状态: {state}") |
|
raise ValueError(f"未知的输出状态: {state}") |
|
|
|
|
|
if sentence_id in self.history: |
|
console.print(f"[更新] 句子 {sentence_id}:", styled_text) |
|
logger.info(f"更新句子: {sentence_id}") |
|
else: |
|
console.print(f"[输出] 句子 {sentence_id}:", styled_text) |
|
logger.info(f"输出句子: {sentence_id}") |
|
|
|
|
|
self.history[sentence_id] = text |
|
logger.debug(f"句子内容: {text}") |
|
|
|
|
|
if __name__ == "__main__": |
|
|
|
logger.setLevel(logging.DEBUG) |
|
|
|
|
|
renderer = OutputRenderer() |
|
|
|
|
|
renderer.display("s1", "I think we should start the meeting now.", "raw") |
|
|
|
|
|
renderer.display("s1", "I believe it's time to begin the meeting.", "optimized") |
|
|