panlr's picture
fix error
465deb2
import gradio as gr
import jieba
from script.pyPengIm import pyPengIm
from script import utils
import yaml
# 自定义CSS样式
custom_css = """
.btn1 {
background: #2563eb; /* 主蓝 */
color: white;
border: none;
border-radius: 6px;
padding: 8px 18px;
font-size: 14px;
transition: background 0.2s ease;
}
.btn1:hover {
background: #1d4ed8; /* 深蓝 */
}
/* 按钮样式2:次要操作(灰色) */
.btn2 {
background: #f3f4f6; /* 浅灰背景 */
color: #374151; /* 深灰字 */
border: 1px solid #d1d5db;
border-radius: 6px;
padding: 8px 18px;
font-size: 14px;
transition: background 0.2s ease, border-color 0.2s ease;
}
.btn2:hover {
background: #e5e7eb;
border-color: #9ca3af;
}
/* 按钮样式3:成功/确认(绿色) */
.btn3 {
background: #10b981; /* 绿色 */
color: white;
border: none;
border-radius: 6px;
padding: 8px 18px;
font-size: 14px;
transition: background 0.2s ease;
}
.btn3:hover {
background: #059669; /* 深绿 */
}
/* 按钮样式4:警告/强调(橙色) */
.btn4 {
background: #f97316; /* 橙色 */
color: white;
border: none;
border-radius: 6px;
padding: 8px 18px;
font-size: 14px;
transition: background 0.2s ease;
}
.btn4:hover {
background: #ea580c; /* 深橙 */
}
.btn5 {
background: #fef2f2; /* 浅粉背景 */
color: #b91c1c; /* 深红文字 */
border: 1px solid #fecaca;
border-radius: 6px;
padding: 8px 18px;
font-size: 14px;
transition: background 0.2s ease, border-color 0.2s ease;
}
.btn5:hover {
background: #fee2e2; /* hover 稍微加深 */
border-color: #fca5a5;
}
.gradio-container input[type="text"] {
padding: 10px 15px;
border-radius: 8px;
border: 2px solid #e0e0e0;
transition: all 0.3s ease;
}
.gradio-container input[type="text"]:focus {
outline: none;
border-color: #6e48aa;
box-shadow: 0 0 0 3px rgba(110, 72, 170, 0.2);
}
.cool-textbox textarea:focus {
border-color: #2563eb;
box-shadow: 0 0 0 2px rgba(37,99,235,0.2);
outline: none;
}
/* Textbox 的 label 样式 */
.cool-textbox label {
font-weight: 600; /* 半粗体 */
font-size: 16px; /* 稍小一点 */
color: #374151; /* 深灰,温和一点 */
margin-bottom: 4px; /* 和输入框保持间距 */
display: inline-block; /* 让 margin 生效 */
"""
pinyin_tool = pyPengIm()
accent_dict={'tc':'府城'}
with open("./dict_data/accent_convert/accent.yaml", 'r', encoding='utf-8') as file:
accent_config = yaml.safe_load(file)
for k,v in accent_config.items():
accent_dict[k] = v['name']
reversed_accent_dict = {value: key for key, value in accent_dict.items()}
def auto_segment(input_text):
return " ".join(jieba.cut(input_text))
def manual_segment(input_text):
return " ".join(input_text.split(' '))
def single_char_query(input_text):
result_dict = pinyin_tool.single_query(input_text.strip()[0])
result = []
for k, v in result_dict.items():
result.append(k+':')
result.append(str(v))
result.append('\n')
return "".join(result)
def number_conversion_0(input_text):
return utils.num_to_chinese(input_text)
def number_conversion_1(input_text):
return utils.num_to_chinese_smart(input_text)
def clear_all():
return "", "", ""
def to_ipa(input_text, location, return_seq):
pinyin_seq = pinyin_tool.pinyin(input_text,accent=reversed_accent_dict[location])['pinyin_seq']
pinyin_seq = pinyin_tool.to_IPA(pinyin_seq, blank=False)
if return_seq:
return pinyin_seq
zi_at_pinyin_seq = zi_and_pinyin(input_text,pinyin_seq)
return zi_at_pinyin_seq
def restrip(text):
text=text.replace(' ','')
text=text.replace('#','')
return text
def zi_and_pinyin(text, pinyin_seq):
if isinstance(pinyin_seq, list):
ls = pinyin_seq
else:
ls = pinyin_seq.split(' ')
result = []
text = restrip(text)
for i in range(len(text)):
if text[i] == ls[i]:
# 非法字符
result.append(text[i])
else:
result.append(text[i]+'@'+ls[i])
return " ".join(result)
def process_text(input_text, location, return_seq):
# print(input_text)
pinyin_seq = pinyin_tool.pinyin(input_text,accent=reversed_accent_dict[location],auto_split=False)['pinyin_seq']
if return_seq:
return pinyin_seq
zi_at_pinyin_seq = zi_and_pinyin(input_text,pinyin_seq)
return zi_at_pinyin_seq
def auto_translate(text):
return pinyin_tool.to_oral(jieba.lcut(text))
def manual_translate(text):
return pinyin_tool.to_oral(text.split(" "))
with gr.Blocks(css=custom_css, theme=gr.themes.Base()) as demo:
gr.Markdown("### 潮州话字素转音素处理工具")
gr.Markdown("输入文本,选择地区,先进行分词,然后根据分词结果进行拼音转换")
input_text = gr.Textbox(label="输入文本①", elem_classes="cool-textbox")
with gr.Row():
return_type = gr.Dropdown(
choices=[False,True],
label="是否只输出纯拼音序列",
value=False
)
location = gr.Dropdown(
choices=reversed_accent_dict.keys(),
label="地区选择",
value="府城"
)
with gr.Row():
num_conv_btn_1 = gr.Button("阿拉伯数字转汉字(智能)", variant="btn1")
num_conv_btn_0 = gr.Button("阿拉伯数字转汉字(直接)", variant="btn1")
single_char_btn = gr.Button("单字查询(查询输入文本的第一个字)", variant='btn1')
clear_btn = gr.Button("清空", variant='btn5')
# with gr.Row():
seg_output = gr.Textbox(label="分词结果", elem_classes="cool-textbox")
pinyin_output = gr.Textbox(lines=5, label="拼音转换结果", elem_classes="cool-textbox")
with gr.Row():
auto_seg_btn = gr.Button("自动分词②", variant="btn3")
manual_seg_btn = gr.Button("手动分词(自己手动打空格)②", variant="btn3")
auto_translate_btn = gr.Button("替换成口语(自动分词)", variant="btn2")
manual_translate_btn = gr.Button("替换成口语(手动分词)", variant="btn2")
with gr.Row():
ipa_btn = gr.Button("转国际音标③", variant="btn4")
pinyin_btn = gr.Button("拼音转换③", variant="btn4")
# 按钮事件绑定
auto_seg_btn.click(auto_segment, input_text, seg_output)
manual_seg_btn.click(manual_segment, input_text, seg_output)
auto_translate_btn.click(auto_translate, input_text, seg_output)
manual_translate_btn.click(manual_translate, input_text, seg_output)
num_conv_btn_0.click(number_conversion_0, input_text, seg_output)
num_conv_btn_1.click(number_conversion_1, input_text, seg_output)
single_char_btn.click(single_char_query, input_text, pinyin_output)
clear_btn.click(clear_all, None, [input_text, seg_output, pinyin_output])
ipa_btn.click(to_ipa, [seg_output, location], pinyin_output)
pinyin_btn.click(process_text, [seg_output, location, return_type], pinyin_output)
demo.launch()