一、問題提出
還是年報問詢函的研究,需要從問詢函文本中提取交易所要求回覆的日期,同時還需要從公司回覆的文本中提取公司實際上回復的日期。因此需要對兩類文本分別進行分析。
二、解決思路
通過觀察,發現問詢函中含有交易所要求回覆的日期的句子通常是這樣的:
“請你公司就上述問題做出書面說明,並在 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 日 |