我们在进行模型训练时对数据进行检查时发现,出现了意想之外的错误,当文本中出现分数形式的1/2等文本时,程序会报错出现错误的标识符,因此在此次更新中我们对该问题进行解决
一.问题分析
在通过分析问题之后我们发现,在文本中出现的‘/’符号会导致文本出现错误以至于无法进行模型训练,因此为了解决问题,我们将文本中所有出现‘/’的场景进行分析之后发现,很大程度上时人们在进行描述分数时经常会使用如1/2的形式来表达分数,因此出现了很多的错误数据,因此我们决定将数据中的1/2类型的分数转化为汉字类型的二分之一,这样我们就可以解决目前的问题,因此我们通过以上思路进行分析发现,只要我们使用正则表达式识别分数,即前面有1到n个数字,加上一个/符号,之后是n个数字的形式,并将其转化为汉字形式就可以规避此问题,理论成立,实践开始。
二.程序实现
1.定义映射字典
首先我们定义一个阿拉伯数字到中文数字的映射字典,因为正常人的表达一般只会在0到9之间,很难会出现11/13这种情况,所以我们定义一下几个字符就已经足够了
num_to_chinese = {
'0': '零',
'1': '一',
'2': '二',
'3': '三',
'4': '四',
'5': '五',
'6': '六',
'7': '七',
'8': '八',
'9': '九'
}
2.正则表达式
我们通过正则表达式r'\d+/\d+'
:这个正则表达式用于匹配文本中的分数形式,如1/2、1/3等。
# 将分数形式(如1/2、1/3、7/9等)转换为中文形式
def convert_fraction_to_chinese(text):
# 使用正则表达式找出所有的分数形式,如1/2、1/3等
pattern = r'\d+/\d+'
fractions = re.findall(pattern, text)
3.转化为汉字
遍历我们每一个找到的分数形式,并替换为中文
for fraction in fractions:
arabic_digits = fraction.split('/')
chinese_digits = [num_to_chinese[digit] for digit in arabic_digits]
chinese_fraction = '分之'.join(chinese_digits)
text = text.replace(fraction, chinese_fraction)
return text
4.储存
将我们转化完成后的文本进行储存
# 从指定路径读取 JSON 文件
file_path = 'C:/Users/48594/Desktop/深度学习/res/your_file.json'
with open(file_path, 'r', encoding='utf-8') as file:
data = json.load(file)
# 提取文本字段,假设 JSON 文件中的文本存储在 'text' 键下
text_from_json = data['text']
# 转换分数形式为中文形式
converted_text = convert_fraction_to_chinese(text_from_json)