language.py 1.4 KB
Newer Older
1
import os
赵小蒙's avatar
赵小蒙 committed
2
import unicodedata
3
4
5
6
7
8
9
10
11

if not os.getenv("FTLANG_CACHE"):
    current_file_path = os.path.abspath(__file__)
    current_dir = os.path.dirname(current_file_path)
    root_dir = os.path.dirname(current_dir)
    ftlang_cache_dir = os.path.join(root_dir, 'resources', 'fasttext-langdetect')
    os.environ["FTLANG_CACHE"] = str(ftlang_cache_dir)
    # print(os.getenv("FTLANG_CACHE"))

12
from fast_langdetect import detect_language
赵小蒙's avatar
赵小蒙 committed
13
14


15
16
17
18
19
def remove_invalid_surrogates(text):
    # 移除无效的 UTF-16 代理对
    return ''.join(c for c in text if not (0xD800 <= ord(c) <= 0xDFFF))


赵小蒙's avatar
赵小蒙 committed
20
def detect_lang(text: str) -> str:
21

赵小蒙's avatar
赵小蒙 committed
22
23
    if len(text) == 0:
        return ""
24
25

    text = text.replace("\n", "")
26
27
28
    text = remove_invalid_surrogates(text)

    # print(text)
赵小蒙's avatar
赵小蒙 committed
29
    try:
30
        lang_upper = detect_language(text)
赵小蒙's avatar
赵小蒙 committed
31
    except:
赵小蒙's avatar
赵小蒙 committed
32
        html_no_ctrl_chars = ''.join([l for l in text if unicodedata.category(l)[0] not in ['C', ]])
33
        lang_upper = detect_language(html_no_ctrl_chars)
34

赵小蒙's avatar
赵小蒙 committed
35
    try:
赵小蒙's avatar
赵小蒙 committed
36
        lang = lang_upper.lower()
赵小蒙's avatar
赵小蒙 committed
37
38
39
40
41
42
    except:
        lang = ""
    return lang


if __name__ == '__main__':
43
    print(os.getenv("FTLANG_CACHE"))
赵小蒙's avatar
赵小蒙 committed
44
45
46
    print(detect_lang("This is a test."))
    print(detect_lang("<html>This is a test</html>"))
    print(detect_lang("这个是中文测试。"))
赵小蒙's avatar
赵小蒙 committed
47
    print(detect_lang("<html>这个是中文测试。</html>"))
48
    print(detect_lang("〖\ud835\udc46\ud835〗这是个包含utf-16的中文测试"))