Python: 使用正则表达式从文本中定位并提取想要的内容

发布时间:2020-03-07 阅读 114

作者: 许梦洁 (Frankfurt School of Finance and Management)
E-mail: m.xu@fs.de

Stata连享会   主页 || 视频 || 推文

连享会 - Stata 暑期班

线上直播 9 天:2020.7.28-8.7
主讲嘉宾:连玉君 (中山大学) | 江艇 (中国人民大学)
课程主页https://gitee.com/arlionn/PX | 微信版


目录


一、问题提出

还是年报问询函的研究,需要从问询函文本中提取交易所要求回复的日期,同时还需要从公司回复的文本中提取公司实际上回复的日期。因此需要对两类文本分别进行分析。

二、解决思路

通过观察,发现问询函中含有交易所要求回复的日期的句子通常是这样的:

“请你公司就上述问题做出书面说明,并在 8 月 9 日前将有关说明 材料报送我部,并对外披露。”
“请你公司就上述问题做出书面说明,涉及需披露的,请及时履行披露义务,并在2015年5月6日前将有关说明材料报送我部,同时抄送派出机构。”

相应的提取规则就很简单啦:

    要求回复日期提取规则 = re.compile('[在于](.*月.*日)前', re.M)
    查询结果 = re.findall(b, 问询函文本)
    要求回复日期 = 查询结果[0].strip()

而公司的回函通常在整个回函的最后一行署上回函日期:

eg1: 万科的回函

万科的回函
万科的回函

eg2: 全新好的回函

全新好的回函
全新好的回函

所以,回函日期的提取规则为:

    回函日期提取规则 = re.compile('(^.*年.*月.*日)', re.M)
    查询结果 = re.findall(b, 回函文本)
    回函日期 = 查询结果[-1].strip()

三、代码

以提取回函时间为例,完整的遍历一个文件夹下所有TXT和DOC文件,提取其中文字并使用正则表达式提取回函时间的代码为:

import os
import docx2txt
import re
content_list = []

def readdocx(filepath):
    content = docx2txt.process(filepath)  #打开传进来的路径
    docucode = filepath.split('/')[-1]
    content_list.append([docucode.split('.')[0],content])

def readtxt(filepath):
    content = open(filepath, "r").read()     #打开传进来的路径
    docucode = filepath.split('/')[-1]
    content_list.append([docucode.split('.')[0],content])

def eachFile(filepath):
    pathDir = os.listdir(filepath)      #获取当前路径下的文件名,返回List
    for s in pathDir:
        newDir=os.path.join(filepath,s)     #将文件命加入到当前文件路径后面
        if os.path.isfile(newDir) :         #如果是文件
            doctype = os.path.splitext(newDir)[1]
            if doctype == ".txt":  #判断是否是txt
                readtxt(newDir)
            elif doctype == ".docx":
                readdocx(newDir)
            else:
                pass
        else:
            eachFile(newDir)                #如果不是文件,递归这个文件夹的路径


eachFile("/Users/深交所回复/")

f = open("/Users/深交所回函时间.txt",'w')
a = 1
for doc in content_list:
    回函日期提取规则 = re.compile('(^.*年.*月.*日)', re.M)
    查询结果 = re.findall(b, 回函文本)
    if a:
        print([doc[0],查询结果[-1].strip()])
        f.write(','.join([doc[0],查询结果[-1].strip()])+'\n')

四、结果

回函编码 回函时间
CDD00060941539694HF 2017年5月9日
CDD000711538301452HF 二〇一九年四月三日
CDD000160518921313HF 2018 年 10 月 24 日
CDD00066240310540HF 2016 年 11 月 30 日
CDD00001841921743HF 二〇一七年六月八日
CDD000767516771355HF 二〇一八年十二月五日
CDD00085036747HF 2015 年 12 月 1 日
CDD00070642758829HF 2017 年 8 月 30 日
CDD000995523321387HF 2018 年 12 月 24 日
CDD00061039434429HF 年 月 日
CDD00053343479922HF 2017 年 12 月 25 日
CDD00015540186516HF 二〇一六年十一月九日
CDD00091237491HF 2016 年 3 月 14 日
CDD000803515551281HF 二〇一八年九月二十七日
CDD00051840669600HF 2017 年 1 月 16 日
CDD00095843607935HF 2018 年 1 月 9 日
CDD000917516581436HF 2019 年 2 月 26 日
CDD00098239987494HF 二〇一六年十月十四日
CDD000566511201229HF 二〇一八年七月三十一日
XXB_CDD_000829天音控股回复 2015 年 6 月 25 日

相关课程

连享会-直播课 上线了!
http://lianxh.duanshu.com

免费公开课:


课程一览

支持回看,所有课程可以随时购买观看。

专题 嘉宾 直播/回看视频
Stata暑期班 连玉君
江艇
线上直播 9 天
2020.7.28-8.7
效率分析-专题 连玉君
鲁晓东
张 宁
视频-TFP-SFA-DEA
已上线,3天
文本分析/爬虫 游万海
司继春
视频-文本分析与爬虫
已上线,4天
空间计量系列 范巧 空间全局模型, 空间权重矩阵
空间动态面板, 空间DID
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
直击面板数据模型 [免费公开课,2小时]

Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。


关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。直播间 有很多视频课程,可以随时观看。
  • 连享会-主页知乎专栏,300+ 推文,实证分析不再抓狂。
  • 公众号推文分类: 计量专题 | 分类推文 | 资源工具。推文分成 内生性 | 空间计量 | 时序面板 | 结果输出 | 交乘调节 五类,主流方法介绍一目了然:DID, RDD, IV, GMM, FE, Probit 等。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:
    • 课程, 直播, 视频, 客服, 模型设定, 研究设计, 暑期班
    • stata, plus,Profile, 手册, SJ, 外部命令, profile, mata, 绘图, 编程, 数据, 可视化
    • DID,RDD, PSM,IV,DID, DDD, 合成控制法,内生性, 事件研究, 交乘, 平方项, 缺失值, 离群值, 缩尾, R2, 乱码, 结果
    • Probit, Logit, tobit, MLE, GMM, DEA, Bootstrap, bs, MC, TFP, 面板, 直击面板数据, 动态面板, VAR, 生存分析, 分位数
    • 空间, 空间计量, 连老师, 直播, 爬虫, 文本, 正则, python
    • Markdown, Markdown幻灯片, marp, 工具, 软件, Sai2, gInk, Annotator, 手写批注, 盈余管理, 特斯拉, 甲壳虫, 论文重现, 易懂教程, 码云, 教程, 知乎

连享会主页  lianxh.cn
连享会主页 lianxh.cn

连享会小程序:扫一扫,看推文,看视频……


扫码加入连享会微信群,提问交流更方便

✏ 连享会学习群-常见问题解答汇总:
https://gitee.com/arlionn/WD