#include "transcript.h" #include #include namespace lc { namespace { std::string trim(const std::string & s) { const auto notSpace = [](unsigned char c) { return !std::isspace(c); }; auto begin = std::find_if(s.begin(), s.end(), notSpace); auto end = std::find_if(s.rbegin(), s.rend(), notSpace).base(); if (begin >= end) return {}; return std::string(begin, end); } } // namespace ParsedTranscript parseAsrOutput(const std::string & raw) { ParsedTranscript out; static const std::string kMarker = ""; const std::string trimmed = trim(raw); const auto markerPos = trimmed.rfind(kMarker); std::string head; if (markerPos != std::string::npos) { head = trimmed.substr(0, markerPos); out.text = trimmed.substr(markerPos + kMarker.size()); } else { head = trimmed; out.text = trimmed; } // 头部里找 "language " // 允许前面有空白,语言名只取连续的字母 const std::string key = "language"; auto pos = head.find(key); if (pos != std::string::npos) { pos += key.size(); while (pos < head.size() && std::isspace(static_cast(head[pos]))) ++pos; size_t end = pos; while (end < head.size() && std::isalpha(static_cast(head[end]))) ++end; out.language = head.substr(pos, end - pos); } out.text = trim(out.text); return out; } std::string languageDisplayName(const std::string & lang) { if (lang.empty()) return {}; static const struct { const char * key; const char * display; } kMap[] = { { "English", "英语" }, { "Chinese", "中文" }, { "Japanese", "日语" }, { "Korean", "韩语" }, { "French", "法语" }, { "German", "德语" }, { "Spanish", "西班牙语" }, { "Russian", "俄语" }, { "Italian", "意大利语" }, { "Portuguese", "葡萄牙语" }, { "Arabic", "阿拉伯语" }, { "Cantonese", "粤语" }, }; for (const auto & e : kMap) { if (lang == e.key) return e.display; } return lang; } } // namespace lc