범위: 이 기능은 음성을 전사하거나 STT 모델을 내려받지 않는다.
일반 문자열이나 지원 형식에 맞는 JSON·SRT·TSV 결과를 기존 CER·WER·CRR 함수로 연결한다.
1. 일반 텍스트
import nlptutti as nt
transcript = nt.parse_transcript(
"오늘 날씨는 맑습니다",
"text",
)
입력 문자열을 바꾸지 않고 가설문장으로 사용한다. txt도 같은 형식 이름으로 사용할 수 있다.
2. JSON
transcript = nt.parse_transcript(
{
"text": "오늘 날씨는 맑습니다",
"segments": [
{"start": 0, "end": 1200, "text": "오늘 날씨는"},
{"start": 1200, "end": 2500, "text": "맑습니다"},
],
"model": "example-model",
"language": "ko",
},
"json",
)
기본값은 최상위 text만 평가 문장으로 사용한다. file,
model, language, duration_s가 실제로 있으면 provenance에 보존한다.
JSON 타임스탬프의 단위는 추정하지 않는다.
# 최상위 text가 없을 때만 직접 선택한다.
transcript = nt.parse_transcript(
{
"segments": [
{"text": "오늘 날씨는"},
{"text": "맑습니다"},
]
},
"json",
json_text_policy="segments_fallback",
)
3. SRT
srt = """1
00:00:00,000 --> 00:00:01,200
오늘 날씨는
2
00:00:01,200 --> 00:00:02,500
맑습니다
"""
transcript = nt.parse_transcript(srt, "srt")
cue 텍스트를 순서대로 ASCII 공백 하나로 연결한다. 타임코드는 점수에서 빼고 provenance에만 남긴다.
4. TSV
tsv = """start\tend\ttext
0.0\t1.2\t오늘 날씨는
1.2\t2.5\t맑습니다
"""
transcript = nt.parse_transcript(tsv, "tsv")
start, end, text 헤더가 필요하다.
시간 값은 초 단위의 유한한 숫자로 검증하고 text 열만 평가 문장으로 사용한다.
| 형식 |
평가 문자열 |
시간 정보 |
| text / txt |
입력 문자열 그대로 |
없음 |
| JSON |
최상위 text 기본, segments fallback 선택 |
원래 값을 단위 추정 없이 보존 |
| SRT |
cue 텍스트를 공백 하나로 연결 |
SRT timecode로 보존 |
| TSV |
text 열을 공백 하나로 연결 |
초 단위로 검증해 보존 |
평가 여권 만들기
report = nt.evaluate_transcript(
"오늘 날씨가 맑습니다",
transcript,
rate_mode="standard",
)
print(round(report["metrics"]["cer"]["value"], 4)) # 0.1111
print(round(report["metrics"]["wer"]["value"], 4)) # 0.3333
print(report["schema_version"]) # 1.0
print(report["options"]["rate_mode"]) # standard
- evaluator: 실제 평가에 사용한
nlptutti 버전을 기록한다.
- options:
rate_mode, 문장부호 제거, 유니코드 정규화 설정을 기록한다.
- metrics: CER·WER·CRR 값과 각 치환·삭제·삽입 횟수를 기록한다.
- provenance: 입력 형식, 선택한 JSON 정책, 구간 수, 제공된 메타데이터와 시간 정보를 기록한다.
- 원문 보호: reference와 hypothesis 원문 대신 SHA-256, 문자 수, UTF-8 byte 수를 기록한다. 해시는 익명화 수단이 아니므로 민감한 짧은 문장의 접근 권한은 별도로 관리한다.
JSON 문법 오류, 필수 필드 누락, 잘못된 SRT 타임코드, TSV 헤더 누락은
TranscriptFormatError로 알린다. 잘못된 입력을 빈 가설문장으로 조용히 바꾸지 않는다.
지원 형식은 FunASR 고정 커밋 d1007c3의
CLI 출력 문서를
참고하되 특정 공급자에 종속되지 않도록 직접 구현했다. FunASR 모델이나 런타임은 패키지 의존성에 포함하지 않는다.