File size: 2,842 Bytes
d0c2b7c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import re
from openpyxl import load_workbook
import difflib
import os
base_dir = './abcfile/'

def read_music_file(music_id):
    """
    给定 music_id 和文件夹路径,返回以该 music_id 命名的文件夹中的 music.abc 文件内容
    :param music_id: 需要查找的 music_id
    :param base_dir: 存放所有以 music_id 命名的文件夹的目录路径
    :return: music.abc 文件内容
    """
    # 构建目标文件夹的路径
    folder_path = os.path.join(base_dir, music_id)

    # 检查文件夹是否存在
    if not os.path.isdir(folder_path):
        return f"文件夹 '{folder_path}' 不存在"

    # 构建目标文件的路径
    file_path = os.path.join(folder_path, 'music.abc')

    # 检查 music.abc 文件是否存在
    if not os.path.isfile(file_path):
        return f"文件 '{file_path}' 不存在"

    # 读取文件内容
    try:
        with open(file_path, 'r', encoding='utf-8') as file:
            content = file.read()
        return content
    except Exception as e:
        return f"读取文件时出错: {e}"

def read_excel():
    # 读取Excel文件
    wb = load_workbook('music_id.xlsx')

    # 获取指定表
    ws = wb['Results']
    # 创建一个music_id到title的字典
    music_dict = {}

    # 读取数据,并填充字典,假设第一行为表头
    for row in ws.iter_rows(min_row=2, values_only=True):  # 从第二行开始,跳过表头
        title = row[0]      # 第一列为 title
        music_id = row[1]   # 第二列为 music_id
        if music_id and title:  # 确保数据有效
            music_dict[title] = music_id
    return music_dict

def preprocess(s):
    # 去掉数字和括号内容
    return re.sub(r'\d+|(.*?)', '', s).strip()

def is_search(text):
    #定义正则表达式,匹配 <任意内容> 的部分
    #pattern = r"[<《]([^>》]+)[>》]"
    # 检查是否存在匹配
    #match = re.search(pattern, text)
    #print(match)
    #if True:  # 只有在有匹配的情况下才继续执行
    music_dict = read_excel()
    #processed_music_dict = {preprocess(key): value for key, value in music_dict.items()}
    matched_content = text#match.group(1)
    # 使用 difflib 进行模糊匹配,返回最接近的匹配项列表
    title_matches = difflib.get_close_matches(matched_content, music_dict.keys(), n=1, cutoff=0.3)
    if len(title_matches) > 0:
        print(title_matches)
        # 如果有匹配项,返回字典中的对应值
        if title_matches:
            closest_match = title_matches[0]  # 获取最接近的匹配项
            music_id = music_dict.get(closest_match, text)
            result = read_music_file(music_id)
            return result
        else:
            return False
    else:
        return False

#text = "四分音符是什么"

#print(is_search(text))