【SRC-Python】在数字与字母 / 中文与英文之间插入空格的自动化解决方案

news2024/11/18 23:32:10

文章目录

  • Part.I Introduction
  • Part.II 使用方法
    • Chap.I 直接处理字符串
    • Chap.II 处理文件
  • Part.III Source Code
  • Reference

Part.I Introduction

在编辑文本的过程中,尤其是在 COPY 的过程中,经常会遇到如下问题:

  • 源文本数字与英文字母之间没有空格
  • 源文本中文与英文之间没有空格
  • 源文本中有很多空行

如果没有空格的话,看起来很紧凑,不美观。作为一个强迫症患者,每次我都要一个一个地把空格敲上去。有一天,我实在受不了这枯燥的工作了,我想能不能让计算机自动来完成这项简单且枯燥的工作呢?通过一些摸索,我找到了一种完美的解决方案,本文将对其进行简单的介绍。

在这里插入图片描述

Part.II 使用方法

首先需要安装两个 Python 的三方库:正则表达式处理库 re、美化中文排版工具“盘古” pangu

pip install re
pip install -U pangu

Chap.I 直接处理字符串

所用到的函数为

import re
import pangu

def add_space_between_content(original_text):
    processed_text = pangu.spacing(original_text)
    pattern = r'([a-zA-Z]+)(\d+)'   # Letters before numbers
    def add_space(match):
        return match.group(1) + ' ' + match.group(2)
    processed_text = re.sub(pattern, add_space, processed_text)
    pattern = r'(\d+)([a-zA-Z]+)'   # Numbers followed by letter
    processed_text = re.sub(pattern, add_space, processed_text)
    pattern = r"\n\s*\n"            # null string 空行
    processed_text = re.sub(pattern, "\n", processed_text)
    return processed_text

调用示例

original_text = f"""Datawhale是一个专注于Data Science与AI领域的开源组织,汇集了众多领域院校和知名企业的优秀学习者,\
聚合了一群有开源精神和探索精神的团队成员。
双语字幕视频:吴恩达x OpenAI的Prompt Engineering课程专业翻译版
测试1.2数字test1.3ce1.4测试"""
print(original_text)
print("-" * 60)
result2 = add_space_between_content(original_text)
print(result2)

输出结果

Datawhale是一个专注于Data Science与AI领域的开源组织,汇集了众多领域院校和知名企业的优秀学
习者,聚合了一群有开源精神和探索精神的团队成员。
双语字幕视频:吴恩达x OpenAI的Prompt Engineering课程专业翻译版
测试1.2数字test1.3ce1.4测试
----------------------------------------------------------------------------------------------------
Datawhale 是一个专注于 Data Science 与 AI 领域的开源组织,汇集了众多领域院校和知名企业的 
优秀学习者,聚合了一群有开源精神和探索精神的团队成员。
双语字幕视频:吴恩达 x OpenAI 的 Prompt Engineering 课程专业翻译版
测试 1.2 数字 test 1.3 ce 1.4 测试

Chap.II 处理文件

所用到的函数(上面的 add_space_between_content 加下面的)

def add_space_between_content_file(fin,fout):
    f = open(fin, encoding= 'utf-8', errors = 'ignore')
    original_text = f.read()
    f.close()
    modified_string = add_space_between_content(original_text)
    f1 = open(fout, 'w', encoding= 'utf-8', errors = 'ignore')
    f1.write(modified_string)
    f1.close()

调用示例

f1=r'A:\OHanlon\Desktop\a.txt'
f2=r'A:\OHanlon\Desktop\b.txt'
add_space_between_content_file(f1,f2)

测试所用源文件


本测试名为“普通话水平测试”(PUTONGHUA SHUIPING CESHI,缩写为PSC)()读单音节字词 普通话水平测试单音共有100个音节(不包括轻声、儿化音节),限时3.5分钟,共10分。

1.目的:

测查应试人声母、韵母、声调读音标准程度。

2.要求:

(1100个音节中,70%选自《普通话水平测试用普通话词语表》“表一”,30%选自“表二”。

(2100个音节中,每个声母出现次数一般不少于3次,每个韵母出现次数一般不少于2次,4个声调出现次数大致均衡。

(3)音节的排列要避免同一测试要素连续出现。

3.评分:

(1)语音错误,每个音节扣0.1分;

(2)语音缺陷,每个音节扣0.05分;

(3)超时1分钟以内,扣0.5分,超时1分钟以上(含1分钟),扣1分。

输出文件

本测试名为 “普通话水平测试”(PUTONGHUA SHUIPING CESHI,缩写为 PSC)() 读单音节字词 普通话水平测试单音共有 100 个音节(不包括轻声、儿化音节),限时 3.5 分钟,共 10 分。
1. 目的:
测查应试人声母、韵母、声调读音标准程度。
2. 要求:
(1100 个音节中,70% 选自《普通话水平测试用普通话词语表》“表一”,30% 选自 “表二”。
(2100 个音节中,每个声母出现次数一般不少于 3 次,每个韵母出现次数一般不少于 2 次,4 个声调出现次数大致均衡。
(3)音节的排列要避免同一测试要素连续出现。
3. 评分:
(1)语音错误,每个音节扣 0.1 分;
(2)语音缺陷,每个音节扣 0.05 分;
(3)超时 1 分钟以内,扣 0.5 分,超时 1 分钟以上(含 1 分钟),扣 1 分。

Part.III Source Code

整个源码如下:

import re
import pangu

def add_space_between_content(original_text):
    processed_text = pangu.spacing(original_text)
    pattern = r'([a-zA-Z]+)(\d+)'   # Letters before numbers
    def add_space(match):
        return match.group(1) + ' ' + match.group(2)
    processed_text = re.sub(pattern, add_space, processed_text)
    pattern = r'(\d+)([a-zA-Z]+)'   # Numbers followed by letter
    processed_text = re.sub(pattern, add_space, processed_text)
    pattern = r"\n\s*\n"            # null string 空行
    processed_text = re.sub(pattern, "\n", processed_text)
    return processed_text

def add_space_between_content_file(fin,fout):
    f = open(fin, encoding= 'utf-8', errors = 'ignore')
    original_text = f.read()
    f.close()
    modified_string = add_space_between_content(original_text)
    f1 = open(fout, 'w', encoding= 'utf-8', errors = 'ignore')
    f1.write(modified_string)
    f1.close()

original_text = f"""Datawhale是一个专注于Data Science与AI领域的开源组织,汇集了众多领域院校和知名企业的优秀学习者,\
聚合了一群有开源精神和探索精神的团队成员。
双语字幕视频:吴恩达x OpenAI的Prompt Engineering课程专业翻译版
测试1.2数字test1.3ce1.4测试"""
print(original_text)
print("-" * 60)
result2 = add_space_between_content(original_text)
print(result2)

f1=r'A:\OHanlon\Desktop\a.txt'
f2=r'A:\OHanlon\Desktop\b.txt'
add_space_between_content_file(f1,f2)

Reference

  • 一个小而实用的 Python 包 pangu,实现在中文和半宽字符(字母、数字和符号)之间自动插入空格
  • 使用Python在字符串中的数字和字母之间添加空格

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1642415.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue单页面应用和多页面应用的区别

概念: SPA单页面应用(SinglePage Web Application),指只有一个主页面的应用,一开始只需要加载一次js、css等相关资源。所有内容都包含在主页面,对每一个功能模块组件化。单页应用跳转,就是切换…

麦克纳姆轮 Mecanum 小车运动学模型和动力学分析

目录 一、简介 二、运动学模型分析 1. 逆运动学方程 2. 正运动学方程 三、动力学模型 四、广泛运动学模型 一、简介 参考文献https://www.geometrie.tugraz.at/gfrerrer/publications/MecanumWheel.pdf 移动机器人的运动学模型是为了解决小车的正向运动学和逆向运动学问…

Liunx磁盘管理(中)

Liunx磁盘管理(上)-CSDN博客 目录 查看块设备信息 lsblk(list block devices) fdisk gdisk parted blkid df(disk free) 虚拟机添加硬盘 步骤: 磁盘分区 MBR格式创建分区 使用方法 替代工具 GPT分区格式…

mysq重连次数过多错误和Public Key Retrieval错误解决记录

文章目录 问题记录和解决方法Public key问题解决many connection errors问题解决 问题记录和解决方法 本次出现错误是:在重启服务器,启动seata应用druid连接mysql作为存储源时出现。主要出现了两个错误:第一个问题,通常采用修改连…

STM32G474 CMAKE VSCODE FREERTOS 导入

一. 文件准备 1. 首先下载 freertos FreeRTOS - Free RTOS Source Code Downloads, the official FreeRTOS zip file release download 2. 移动 FreeRTOS-Kenel 到 moto_control 文件夹下。 3. 将 FreeRTOSConfig.h 放到 /Core/Inc 下面 4. 由于 FreeRTOSConfig.h 中使用了…

我们的手机是如何连接上网的?骨干网又是什么?

什么是骨干网(Backbone Network) 几台计算机连接起来,互相可以看到其他人的文件,这叫局域网。整个城市的计算机都连接起来,就是城域网。把城市之间连接起来的网就叫骨干网。 这些骨干网是国家批准的可以直接和国外连…

【netty系列-03】深入理解NIO的基本原理和底层实现(详解)

Netty系列整体栏目 内容链接地址【一】深入理解网络通信基本原理和tcp/ip协议https://zhenghuisheng.blog.csdn.net/article/details/136359640【二】深入理解Socket本质和BIOhttps://zhenghuisheng.blog.csdn.net/article/details/136549478【三】深入理解NIO的基本原理和底层…

如何构建用于从收据中提取信息的生成式人工智能工具

原文地址:how-to-build-a-generative-ai-tool-for-information-extraction-from-receipts 使用 LangChain 和 OpenAI 工具从 Google Drive 中存储的收据图像中提取结构化信息 2024 年 4 月 10 日 纸质收据有各种样式和格式,是自动信息提取的一个有趣目…

bpmn-js推荐几款常用的插件

bpmn-js整体框架库的风格是以组件的方式进行实现的,这样的结构也更加便于我们更好的对其进行功能扩展,以及客制化功能实现。其实bpmn.io已经为我们实现了较多场景的组件的实现,了解对应组件的功能更能便于我们区分是否需要自己实现,降低重复造轮子的行为,提高开发效率,本…

All In ai,Oracle 23C没了,等来了Oracle 23ai

今年一月份的Blog介绍Oracle命名规则的时候,说到Oracle的命名是紧紧跟随时代浪潮的前言科技的,在文章的最后还大胆预测也许Oracle的下一个版本就叫25A了,结果Oracle根本等不及,把原来已经海量宣传的Oracle 23C直接改名为23ai&…

《苍穹外卖》前端课程知识点记录

一、VUE基础知识 基于脚手架创建前端工程 1. 环境要求 安装node.js:Node.js安装与配置(详细步骤)_nodejs安装及环境配置-CSDN博客查看node和npm的版本号 安装Vue CLI:Vue.js安装与创建默认项目(详细步骤)…

分布式websocket IM即时通讯聊天开源项目如何启动

前言 自己之前分享了分布式websocket的视频有同学去fork项目了,自己启动一下更方便理解项目嘛。然后把项目启动需要的东西全部梳理出来。支持群聊单聊,表情包以及发送图片。 支持消息可靠,消息防重,消息有序。同时基础架构有分布式权限&…

【牛客网】值周

原题链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 差分。 因为l<100000000,所以数组开1e8。 唯一需要注意的点就是前面给b[0]单独赋值为1&#xff08;因为如果在循环中给b[0]赋值&…

【进程间通信】管道和命名管道

文章目录 进程间通信的目的管道匿名管道管道的读写规则 命名管道命名管道和匿名管道区别 进程间通信的目的 数据传输&#xff1a;一个进程需要将它的数据发送给另一个进程资源共享&#xff1a;多个进程之间共享同样的资源。通知事件&#xff1a;一个进程需要向另一个或一组进程…

构建智能化商旅服务:酒店中台云服务架构设计与实践

随着商旅行业的不断发展和智能化趋势的兴起&#xff0c;酒店中台云服务成为了提升服务质量和效率的关键。本文将探讨酒店商旅中台云服务的架构设计与实现&#xff0c;介绍其关键特点和最佳实践&#xff0c;助力商旅行业迈向智能化未来。 1. **需求分析与场景设计&#xff1a;*…

私域运营的崛起:企业第三极销售渠道的战略思考与定制开发AI智能名片B2B2C商城小程序

在数字化营销的新时代&#xff0c;私域运营如同璀璨新星&#xff0c;已然崛起为企业不可或缺的第三极销售渠道。那么&#xff0c;如何善用这一新兴领域的价值&#xff0c;使之为企业带来持续增长和竞争力&#xff0c;已成为众多企业需要从战略层面深入思考的问题。而在这一过程…

力扣hot100:101. 对称二叉树(双指针以不同方式递归)

LeetCode&#xff1a;101. 对称二叉树 看了第一个样例&#xff0c;很容易直接层序遍历看每一层的前后是否相同。但接下来这个样例告诉你&#xff0c;不能这样做。 层序遍历 仔细思考会发现&#xff0c;层序遍历不能看本结点&#xff0c;但是可以看儿子结点是否对称&#xf…

【b站vue教程】1 宏观视角下的浏览器——前端大厂面试必刷:前后端必学的网络安全浏览器工作原理:从入门到精通全套【附带所有源码】

课程地址&#xff1a;【前端大厂面试必刷&#xff1a;前后端必学的网络安全浏览器工作原理&#xff1a;从入门到精通全套【附带所有源码】】 https://www.bilibili.com/video/BV1UL41157hP/?share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 目录 1、宏…

计算机毕业设计springboot基于vue电商抢购限时秒杀系统ch0h8

技术栈 ide工具&#xff1a;IDEA 或者eclipse 编程语言: java 数据库: mysql5.7以上版本 可选框架&#xff1a;ssmspringboot都有的 前端&#xff1a;vue.jsElementUI 详细技术&#xff1a;springbootSSMvueMYSQLMAVEN 数据库工具&#xff1a;Navicat/SQLyog都可以 开发工具 Ec…

树莓派-服务自启配置方式测试

测试脚本&#xff1a; 一、 向rc.local文件添加启动代码(未找到&#xff0c;不测试) 修改/etc/rc.local文件&#xff0c;在文件中exit 0之前添加代码在启动时都会被执行&#xff0c;如&#xff1a;su pi -c “exec /home/pi/testboot.sh” 其中&#xff1a;su pi表示切换至pi…