From 3110c2221b9ed18f71cda66201758921e38c3bb9 Mon Sep 17 00:00:00 2001 From: "Gao, Ruiyuan" <905370712@qq.com> Date: Sun, 22 Sep 2024 23:18:36 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BD=BF=E7=94=A8=20opencc=20=E5=B0=86?= =?UTF-8?q?=E6=AD=8C=E6=9B=B2=E5=90=8D=E8=BD=AC=E5=8C=96=E4=B8=BA=E7=AE=80?= =?UTF-8?q?=E4=BD=93=20(#192)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 1 + xiaomusic/utils.py | 16 +++++++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 8b89b1b..fc87cf7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -16,6 +16,7 @@ dependencies = [ "aiofiles>=24.1.0", "ga4mp>=2.0.4", "apscheduler>=3.10.4", + "opencc-python-reimplemented==0.1.7", ] requires-python = ">=3.10,<3.12" readme = "README.md" diff --git a/xiaomusic/utils.py b/xiaomusic/utils.py index 586953d..c7da990 100644 --- a/xiaomusic/utils.py +++ b/xiaomusic/utils.py @@ -31,6 +31,10 @@ from mutagen.wave import WAVE from requests.utils import cookiejar_from_dict from xiaomusic.const import SUPPORT_MUSIC_TYPE +from opencc import OpenCC + + +cc = OpenCC('t2s') # convert from Traditional Chinese to Simplified Chinese ### HELP FUNCTION ### @@ -90,6 +94,10 @@ def fuzzyfinder(user_input, collection, extra_search_index=None): extra_search_index=extra_search_index) +def traditional_to_simple(to_convert: str): + return cc.convert(to_convert) + + # 关键词检测 def keyword_detection(user_input, str_list, n): # 过滤包含关键字的字符串 @@ -119,15 +127,17 @@ def real_search(prompt, candidates, cutoff, n): def find_best_match(user_input, collection, cutoff=0.6, n=1, extra_search_index=None): - lower_collection = {item.lower(): item for item in collection} - user_input = user_input.lower() + lower_collection = {traditional_to_simple(item.lower()): item for item in collection} + user_input = traditional_to_simple(user_input.lower()) matches = real_search(user_input, lower_collection.keys(), cutoff, n) cur_matched_collection = [lower_collection[match] for match in matches] if len(matches) >= n or extra_search_index is None: return cur_matched_collection[:n] # 如果数量不满足,继续搜索 - lower_extra_search_index = {k.lower():v for k, v in extra_search_index.items()} + lower_extra_search_index = { + traditional_to_simple(k.lower()): v for k, v in extra_search_index.items() + } matches = real_search(user_input, lower_extra_search_index.keys(), cutoff, n) cur_matched_collection += [lower_extra_search_index[match] for match in matches] return cur_matched_collection[:n]