#!/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()