- Remove session-ses_2f27.md (161KB raw session log) - Remove 49 ROOT_* duplicate files across REFERENCE/ - Remove 14 duplicate files between REFERENCE/ root and history/ - Remove asr_legacy.rs (dead code, replaced by asr.rs) - Remove src/core/worker/ (duplicate JobWorker) - Remove src/core/layers/ (empty directory) - Remove 4 .bak files in src/ - Remove 7 dead private methods in worker/processor.rs - Remove backup directory from git tracking
152 lines
31 KiB
Python
152 lines
31 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
"""
|
|
語言檢測工具
|
|
用於檢測文本的語言,支援多種語言檢測算法
|
|
"""
|
|
|
|
import sys
|
|
import json
|
|
import argparse
|
|
from typing import Dict, Tuple
|
|
import re
|
|
|
|
# 簡單的語言檢測規則(可擴展)
|
|
LANGUAGE_DETECTION_RULES = {
|
|
"zh-CN": {
|
|
"patterns": [
|
|
r"[\u4e00-\u9fff]", # 中文字符
|
|
r"的|是|在|有|和|了|不|人|我|他|她|它|們|這|那|你|您|們|嗎|呢|吧|啊|呀|哦|嗯|哈|嘿|哼|呸|唉|哎|喂|嗨|哈囉|你好|再見|謝謝|對不起|請|請問|不好意思|沒關係|沒問題|好的|可以|不行|不可以",
|
|
],
|
|
"description": "簡體中文",
|
|
},
|
|
"zh-TW": {
|
|
"patterns": [
|
|
r"[\u4e00-\u9fff]", # 中文字符
|
|
r"的|是|在|有|和|了|不|人|我|他|她|它|們|這|那|你|您|們|嗎|呢|吧|啊|呀|哦|嗯|哈|嘿|哼|呸|唉|哎|喂|嗨|哈囉|你好|再見|謝謝|對不起|請|請問|不好意思|沒關係|沒問題|好的|可以|不行|不可以",
|
|
],
|
|
"description": "繁體中文",
|
|
},
|
|
"en-US": {
|
|
"patterns": [
|
|
r"\bthe\b|\ba\b|\ban\b|\band\b|\bor\b|\bbut\b|\bin\b|\bon\b|\bat\b|\bto\b|\bfor\b|\bwith\b|\bby\b|\bas\b|\bis\b|\bare\b|\bwas\b|\bwere\b|\bbe\b|\bbeing\b|\bbeen\b",
|
|
r"\bhello\b|\bhi\b|\bgoodbye\b|\bbye\b|\bthanks\b|\bthank you\b|\bsorry\b|\bplease\b|\bexcuse me\b|\bnever mind\b|\bok\b|\byes\b|\bno\b|\bnot\b|\bcannot\b",
|
|
],
|
|
"description": "美式英文",
|
|
},
|
|
"ja-JP": {
|
|
"patterns": [
|
|
r"[\u3040-\u309f]", # 平假名
|
|
r"[\u30a0-\u30ff]", # 片假名
|
|
r"[\u4e00-\u9fff]", # 漢字
|
|
r"です|ます|でした|ません|ましょう|ください|お願い|ありがとう|すみません|こんにちは|さようなら|はい|いいえ",
|
|
],
|
|
"description": "日文",
|
|
},
|
|
"ko-KR": {
|
|
"patterns": [
|
|
r"[\uac00-\ud7a3]", # 韓文字符
|
|
r"입니다|합니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|입니다|습니다|です|ます|でした|ません|ましょう|ください|お願い|ありがとう|すみません|こんにちは|さようなら|はい|いいえ",
|
|
],
|
|
"description": "韓文",
|
|
},
|
|
}
|
|
|
|
|
|
def detect_language(text: str) -> Tuple[str, float, Dict[str, float]]:
|
|
"""
|
|
檢測文本語言
|
|
|
|
Args:
|
|
text: 輸入文本
|
|
|
|
Returns:
|
|
Tuple[主要語言, 置信度, 所有語言分數]
|
|
"""
|
|
if not text or not text.strip():
|
|
return "unknown", 0.0, {}
|
|
|
|
text = text.strip()
|
|
scores = {}
|
|
|
|
for lang_code, lang_info in LANGUAGE_DETECTION_RULES.items():
|
|
score = 0
|
|
total_patterns = len(lang_info["patterns"])
|
|
|
|
for pattern in lang_info["patterns"]:
|
|
matches = re.findall(pattern, text, re.IGNORECASE)
|
|
if matches:
|
|
score += len(matches)
|
|
|
|
# 計算分數
|
|
if total_patterns > 0:
|
|
scores[lang_code] = score / total_patterns
|
|
else:
|
|
scores[lang_code] = 0.0
|
|
|
|
# 找到最高分數的語言
|
|
if scores:
|
|
best_lang = max(scores.items(), key=lambda x: x[1])
|
|
return best_lang[0], best_lang[1], scores
|
|
else:
|
|
return "unknown", 0.0, {}
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(description="語言檢測工具")
|
|
parser.add_argument("text", nargs="?", help="要檢測的文本")
|
|
parser.add_argument("-f", "--file", help="從文件讀取文本")
|
|
parser.add_argument("-j", "--json", action="store_true", help="輸出 JSON 格式")
|
|
parser.add_argument("-v", "--verbose", action="store_true", help="詳細輸出")
|
|
|
|
args = parser.parse_args()
|
|
|
|
# 獲取文本
|
|
text = ""
|
|
if args.file:
|
|
try:
|
|
with open(args.file, "r", encoding="utf-8") as f:
|
|
text = f.read()
|
|
except Exception as e:
|
|
print(f"讀取文件錯誤: {e}", file=sys.stderr)
|
|
sys.exit(1)
|
|
elif args.text:
|
|
text = args.text
|
|
else:
|
|
# 從標準輸入讀取
|
|
text = sys.stdin.read()
|
|
|
|
# 檢測語言
|
|
primary_lang, confidence, all_scores = detect_language(text)
|
|
|
|
# 輸出結果
|
|
if args.json:
|
|
result = {
|
|
"text": text[:100] + "..." if len(text) > 100 else text,
|
|
"detected_language": primary_lang,
|
|
"confidence": confidence,
|
|
"language_scores": all_scores,
|
|
"text_length": len(text),
|
|
}
|
|
print(json.dumps(result, ensure_ascii=False, indent=2))
|
|
else:
|
|
if args.verbose:
|
|
print(f"文本: {text[:100]}{'...' if len(text) > 100 else ''}")
|
|
print(f"長度: {len(text)} 字符")
|
|
print(f"檢測結果: {primary_lang}")
|
|
print(f"置信度: {confidence:.2%}")
|
|
print("\n詳細分數:")
|
|
for lang, score in sorted(
|
|
all_scores.items(), key=lambda x: x[1], reverse=True
|
|
):
|
|
lang_name = LANGUAGE_DETECTION_RULES.get(lang, {}).get(
|
|
"description", lang
|
|
)
|
|
print(f" {lang} ({lang_name}): {score:.2%}")
|
|
else:
|
|
print(f"{primary_lang} ({confidence:.2%})")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|