查看原文
其他

数据清洗 | 借助 chatGPT 设计正则表达式

大邓 大邓和他的Python
2024-09-09

正则表达式可以帮我们,对给定输入的数据 input_data,设定一定的规律pattern,输出干净结果 output_data的工具。

但对于小白而言,很多时候,我们知道 input_data 和 output_data, 但不知道如何设计表达式 pattern,毕竟即使是计算机专业的学生,如果不系统钻研,都不一定会快速上手,更遑论我们文科生小白。chatGPT 是一种具有极强学习和推理能力的工具, 我们需要先研究数据中的规律,抽象出能实现目的的 input_data 和 output_data, 丢给chatGPT帮我们设计。

接下来的人机对话中,input_data 和 output 为视频课程《Python实证指标构建与文本分析》正则表达式章节的实验数据。实验下来, 比通过谷歌百度搜效率高多了,准确率也不错。


问题1-提取个人信息

deng:

我正在学习Python正则表达式,将给出实验文本数据input_data,以及我想从中抽取出的内容output_data。请帮我设计对应的正则表达式。

input_text = ['大家好,我叫张三,来自河北,今年30岁。',                      
              '大家好,我叫李四,来自山东,今年25岁。',                     
              '大家好,我叫王五,来自内蒙古,今年22岁。'


output = [('张三''河北''30'), 
          ('李四''山东''25'), 
          ('王五''内蒙古''22')] 

chatGPT:

下面是匹配上述input_data和output_data的正则表达式:

import re

input_data = ['大家好,我叫张三,来自河北,今年30岁。'
              '大家好,我叫李四,来自山东,今年25岁。',
              '大家好,我叫王五,来自内蒙古,今年22岁。']

output_data = []
for text in input_text:
    
    res = re.findall(r'我叫(.*),来自(.*),今年(.*)岁', text)
    output_data.append(tuple(res[0]))
    
print(output_data)

这段代码将使用正则表达式 r"我叫(.*),来自(.*),今年(\d+)岁" 匹配 input_data 中的内容,并将每一行的匹配结果存储在 output_data 列表中。


问题2-提取出数据中的年份。

deng:

intput_data = """Python是一门面向对象的编程语言,诞生于1991年22。目前以广泛应用在网站开发、游戏软件开发、数据采集、机器学习等多个领域。一般情况下Python是Java的20%,所以说人生苦短,我用Python。"""

output_data = ['1991']

chatGPT:

import re 
intput_data = """Python是一门面向对象的编程语言,诞生于1991年22。目前以广泛应用在网站开发、游戏软件开发、数据采集、机器学习等多个领域。一般情况下Python是Java的20%,所以说人生苦短,我用Python。""" 
output_data = re.findall(r'\b\d{4}\b', intput_data)
print(output_data)

问题3-re.split分割句子

deng:

用re.split 分割 input_data ,生成output_data, 设计刚刚的正则表达式。

intput_data = """Python是一门面向对象的编程语言,诞生于1991年22。目前以广泛应用在网站开发、游戏软件开发、数据采集、机器学习等多个领域。一般情况下Python是Java的20%,所以说人生苦短,我用Python。"""

output_data = ['Python是一门面向对象的编程语言'
               '诞生于1991年'
               '\n目前以广泛应用在网站开发、游戏软件开发、数据采集、机器学习等多个领域'
               '一般情况下Python是Java的20%']

chatGPT:

import re

input_data = """Python是一门面向对象的编程语言,诞生于1991年22。目前以广泛应用在网站开发、游戏软件开发、数据采集、机器学习等多个领域。一般情况下Python是Java的20%,所以说人生苦短,我用Python。"""

output_data = re.split(r'[。,]', input_data)
output_data = [i + '。' for i in output_data if i]

print(output_data)

问题4-re.sub替换数字为NUM

deng:

使用正则表达式 re.sub 实现从input_data到output_data的转换。

input_data = """Python是一门面向对象的编程语言,诞生于1991年。\
一般情况下Python代码量是Java的20%,所以说人生苦短,我用Python。"""


output_data = 'Python是一门面向对象的编程语言,诞生于NUM年。一般情况下Python代码量是Java的NUM%,所以说人生苦短,我用Python。'

chatGPT

您可以使用正则表达式 re.sub 来实现将所有数字替换为 'NUM' 的转换:

import re

input_data = """Python是一门面向对象的编程语言,诞生于1991年。\
一般情况下Python代码量是Java的20%,所以说人生苦短,我用Python。"""


output_data = re.sub(r'\d+''NUM', input_data)
print(output_data)


精选文章

管理世界 | 使用文本分析词构建并测量短视主义

管理世界 | 使用 「经营讨论与分析」 测量 「企业数字化指标」

支持开票 | Python实证指标构建与文本分析

PNAS | 文本网络分析&文化桥梁Python代码实现

PNAS | 使用语义距离测量一个人的「创新力(发散思维)得分

MS | 使用网络算法识别『创新的颠覆性与否

金融研究 | 文本相似度计算与可视化

金融研究 | 使用Python构建「关键审计事项信息含量」

视频分享 | 文本分析在经管研究中的应用

转载 | 金融学文本大数据挖掘方法与研究进展

文本分析 | 「MD&A信息含量」指标构建代码实现

可视化 | 绘制《三体》人物关系网络图

长期征稿 | 欢迎各位前来投稿

17G数据集 | 深交所企业社会责任报告

70G数据集 | 上市公司定期报告数据集

27G数据集 | 使用Python对27G招股说明书进行文本分析

数据集 | 585w企业工商注册信息

数据集 | 90w条中国上市「公司高管数据

可视化 | 绘制《三体》人物关系网络图

认知的测量 | 向量距离vs语义投影

Asent库 | 英文文本数据情感分析

tomotopy | 速度最快的LDA主题模型

100min视频 | Python文本分析与会计

安装python包出现报错:Microsoft Visual 14.0 or greater is required. 怎么办?

如何正确读入文本数据不乱码(解决文本乱码问题)

Faker库 | 生成实验数据

使用R语言绘制文本数据情感历时趋势图

NiceGUI库 | 简单易懂的Web GUI开发包;可开发数据标注工具、心理学实验工具等

CheatSheet | Python文本数据处理速查表

pandas | 使用 df.query 字符串表达式进行数据筛选

继续滑动看下一个
大邓和他的Python
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存