573 lines
25 KiB
Python
573 lines
25 KiB
Python
import pandas as pd
|
||
from openpyxl import Workbook
|
||
import numpy as np
|
||
import seaborn as sns
|
||
import datetime, time
|
||
import matplotlib.pyplot as plt
|
||
import re,os
|
||
|
||
|
||
regIDCard = r"\d{18}|\d{17}[X|x]"
|
||
regCellPhone = r"1[3584]\d{9}"
|
||
regSTR = '习近平总同志|习近同志|习近总书记|习平总书记|习近平主义|习总同志' + \
|
||
'|习近平治国理政|中国是现代化' + \
|
||
'|中华人名|中共民族|名族|中央人名|中华民主' + \
|
||
'|中共共产党|中国共产党党章' + \
|
||
'|伟大复习|建档伟业|建档百年' + \
|
||
'|二十大大|二十精神|二十大开幕式|中国共产党第二十次代表大会|党二十大|第二十次全国人民代表大会' + \
|
||
'|建党七十三周年|共产党成立七十三周年' + \
|
||
'|大人代表|大人常委会|人大常委主任' + \
|
||
'|爱爱服务|抗议英雄|反炸中心'
|
||
regSTR = '网络意识形态工作责任制实施细则|意识形态工作责任制实施办法'
|
||
regSTR = r'(?=.*西藏)(?=.*劳务)'
|
||
regSTRA = r'藏族|西藏'
|
||
regSTRB = r'劳务|用工|转移|输出|输转|就业|职业培训|技能培训|高校毕业生'
|
||
regSTRAB = r'藏族|西藏|劳务|用工|转移|输出|输转|就业|职业培训|技能培训|高校毕业生'
|
||
paths = [
|
||
'D:/Projects/POM/DATA/2023年6月/季度报告/全文/',
|
||
'D:/Projects/POM/DATA/2023年6月/5月报告/全文/',
|
||
'D:/Projects/POM/DATA/2023年5月/4月报告/全文/',
|
||
'D:/Projects/POM/DATA/2023年4月/3月报告/全文/',
|
||
'D:/Projects/POM/DATA/2023年3月/2月报告/全文/',
|
||
'D:/Projects/POM/DATA/2023年2月/1月报告/全文/',
|
||
'D:/Projects/POM/DATA/2023年1月/12月报告/全文/',
|
||
]
|
||
paths = ['D:/Projects/POM/DATA/2022年/2022年12月/11月报告/全文/',
|
||
'D:/Projects/POM/DATA/2022年/2022年11月/10月报告/全文/',
|
||
'D:/Projects/POM/DATA/2022年/2022年10月/9月报告/全文/',
|
||
'D:/Projects/POM/DATA/2022年/2022年9月/8月报告/全文/',
|
||
'D:/Projects/POM/DATA/2022年/2022年8月/7月报告/全文/',
|
||
'D:/Projects/POM/DATA/2022年/2022年7月/6月报告/全文/',
|
||
'D:/Projects/POM/DATA/2022年/2022年6月/5月报告/全文/',
|
||
'D:/Projects/POM/DATA/2022年/2022年5月/4月报告/全文/',
|
||
'D:/Projects/POM/DATA/2022年/2022年4月/3月报告/全文/',
|
||
'D:/Projects/POM/DATA/2022年/2022年3月/2月报告/全文/',
|
||
'D:/Projects/POM/DATA/2022年/2022年2月/1月报告/全文/',]
|
||
|
||
"""
|
||
|
||
|
||
|
||
|
||
'''
|
||
#'D:/Projects/POM/DATA/2022年11月/10月报告/全文/',
|
||
#'D:/Projects/POM/DATA/2022年12月/11月报告/全文/',
|
||
#'D:/Projects/POM/DATA/2023年1月/12月报告/全文/',
|
||
#'D:/Projects/POM/DATA/2023年2月/1月报告/全文/',
|
||
#'D:/Projects/POM/DATA/2023年3月/2月报告/全文/',
|
||
'''
|
||
'''
|
||
'D:/Projects/POM/DATA/2023年3月/两会/全文数据3月6日',
|
||
'D:/Projects/POM/DATA/2023年3月/两会/全文数据3月7日',
|
||
'D:/Projects/POM/DATA/2023年3月/两会/全文数据3月8日',
|
||
'D:/Projects/POM/DATA/2023年3月/两会/全文数据3月9日',
|
||
'D:/Projects/POM/DATA/2023年3月/两会/全文数据3月9日',
|
||
'D:/Projects/POM/DATA/2023年3月/两会/全文数据3月10日',
|
||
'D:/Projects/POM/DATA/2023年3月/两会/全文数据3月11日',
|
||
'D:/Projects/POM/DATA/2023年3月/两会/全文数据3月12日',
|
||
'D:/Projects/POM/DATA/2023年3月/两会/全文数据3月13日',
|
||
''' """
|
||
pathO = 'D:/Projects/POM/DATA/search/'
|
||
doWX = True
|
||
doWB = True
|
||
doTT = True
|
||
|
||
splitByCity = True
|
||
|
||
#监测已发现的敏感词
|
||
fFound = [
|
||
#'D:/Projects/POM/DATA/2023年3月/2月报告/汇总/mgc.xlsx',
|
||
#'D:/Projects/POM/DATA/2023年2月/1月报告/汇总/mgc.xlsx',
|
||
#'D:/Projects/POM/DATA/2023年1月/12月报告/汇总/mgc.xlsx',
|
||
#'D:/Projects/POM/DATA/2022年12月/11月报告/汇总/mgc.xlsx',
|
||
#'D:/Projects/POM/DATA/2022年11月/10月报告/汇总/mgc.xlsx',
|
||
#'D:/Projects/POM/DATA/2022年10月/9月报告/汇总/mgc.xlsx',
|
||
#'D:/Projects/POM/DATA/2022年9月/8月报告/汇总/mgc.xlsx',
|
||
#'D:/Projects/POM/DATA/2022年8月/7月报告/汇总/mgc.xlsx',
|
||
#'D:/Projects/POM/DATA/2022年7月/6月报告/汇总/mgc.xlsx'
|
||
'D:/Projects/POM/DATA/2023年3月/两会/汇总/敏感词2023.3.5.xlsx',
|
||
'D:/Projects/POM/DATA/2023年3月/两会/汇总/敏感词2023.3.6.xlsx',
|
||
'D:/Projects/POM/DATA/2023年3月/两会/汇总/敏感词2023.3.7.xlsx',
|
||
'D:/Projects/POM/DATA/2023年3月/两会/汇总/敏感词2023.3.9.xlsx',
|
||
'D:/Projects/POM/DATA/2023年3月/两会/汇总/敏感词扫描结果.xlsx' ]
|
||
|
||
#通报结果
|
||
fInformed = ['D:/Projects/POM/DATA/国办通报/20230303错敏词.xlsx',
|
||
'D:/Projects/POM/DATA/国办通报/20230304错敏词.xlsx']
|
||
|
||
|
||
######################################################################################
|
||
def getWBData(path, hasBody=False):
|
||
dictC = {'LZ':'兰州市', 'LX':'临夏回族自治州', 'JC':'金昌市', 'ZY':'张掖市', 'LN':'陇南市', 'JYG':'嘉峪关市', 'TS':'天水市',
|
||
'GN':'甘南藏族自治州', 'BY':'白银市', 'JQ':'酒泉市', 'QY':'庆阳市', 'PL':'平凉市', 'DX':'定西市', 'WW':'武威市', 'SZ':'省直部门',
|
||
'lz': '兰州市', 'lx': '临夏回族自治州', 'jc': '金昌市', 'zy': '张掖市', 'ln': '陇南市', 'jyg': '嘉峪关市', 'ts': '天水市',
|
||
'gn': '甘南藏族自治州', 'by': '白银市', 'jq': '酒泉市', 'qy': '庆阳市', 'pl': '平凉市', 'dx': '定西市', 'ww': '武威市', 'sz': '省直部门'
|
||
}
|
||
strC = ''
|
||
for k,v in dictC.items():
|
||
if k in path:
|
||
strC = v
|
||
break
|
||
print('-----------------------------------')
|
||
print('CITY =', strC )
|
||
|
||
dirCs = os.listdir(path)
|
||
cs = ['微博id', '微博正文', '头条文章url', '原始图片url', '被转发微博原始图片url', '是否为原创微博', '微博视频url', '发布位置', '发布时间', '发布工具', '点赞数',
|
||
'转发数', '评论数', 'weiboID', '账号名称', '市州']
|
||
dfWB = pd.DataFrame(columns=cs)
|
||
for dirC in dirCs:
|
||
#第一层,不是目录或者目录名里有‘weixin’,跳过;
|
||
sc = os.path.join(path, dirC)
|
||
if not os.path.isdir(sc):
|
||
continue
|
||
if 'weixin' in dirC.lower():
|
||
continue
|
||
if 'tt' in dirC.lower():
|
||
continue
|
||
|
||
# 时段 weibo weibo_1
|
||
cols = ['微博id', '微博正文', '头条文章url', '原始图片url', '被转发微博原始图片url', '是否为原创微博', '微博视频url', '发布位置', '发布时间', '发布工具', '点赞数',
|
||
'转发数', '评论数'] #WB下载工具中的格式
|
||
dfWBC = pd.DataFrame(columns=cols)
|
||
dirCTs = os.listdir(sc)
|
||
for dirCT in dirCTs:
|
||
# 账号名称 清水司法
|
||
sct = os.path.join(path, dirC, dirCT)
|
||
if not os.path.isdir(sct):
|
||
continue
|
||
if 'weixin' in dirC.lower():
|
||
continue
|
||
if 'tt' in dirC.lower():
|
||
continue
|
||
#print('--',dirCT)
|
||
# 账号名称
|
||
wbName = dirCT
|
||
dirAs = os.listdir(sct)
|
||
for dirA in dirAs:
|
||
scta = os.path.join(path, dirC, dirCT, dirA)
|
||
# 文件名
|
||
fileAs = scta
|
||
if len(fileAs) > 0 and os.path.splitext(fileAs)[1] == '.csv':
|
||
wbId = dirA[:-4]
|
||
# 读取文件
|
||
#########print('----',wbName, wbId)
|
||
dfdfwb = pd.read_csv(fileAs, sep=',', header=None, names=cols,
|
||
index_col=None)#, engine='python', encoding='gbk'#utf-8
|
||
dfdfwb = dfdfwb[1:]
|
||
dfdfwb["weiboID"] = wbId
|
||
dfdfwb["账号名称"] = wbName
|
||
|
||
dfWBC = dfWBC.append(dfdfwb)
|
||
print('.', end='')
|
||
#if len(fileAs)>1:
|
||
# print(" +=+= ", fileAs)
|
||
|
||
#print(dfWBC.shape)
|
||
#dfWBC.to_excel("D:/Projects/POM/2021年6月/二季度/全文/WB/WB_"+dirC+".xlsx")cl
|
||
#print(dirC)
|
||
#print( dictC[dirC])
|
||
#print( dfWBC['市州'])
|
||
dfWBC['市州'] = strC
|
||
dfWB = dfWB.append(dfWBC)
|
||
print(' ')
|
||
#print('-',dirC, dfWB.shape[0])
|
||
print('-',dirC, dfWBC.shape[0])
|
||
print('',dfWB.shape[0])
|
||
#dfWB.to_excel("D:/Projects/POM/2021年7月/2021年上半年/WB_ALL.xlsx")
|
||
return dfWB
|
||
|
||
def getWBData_Province(path, hasBody=False):
|
||
dirCs = os.listdir(path)
|
||
cs = ['微博id', '微博正文', '头条文章url', '原始图片url', '被转发微博原始图片url', '是否为原创微博', '微博视频url', '发布位置', '发布时间', '发布工具', '点赞数',
|
||
'转发数', '评论数', 'weiboID', '账号名称', '市州']
|
||
dfWB = pd.DataFrame(columns=cs)
|
||
for dirC in dirCs:
|
||
sc = os.path.join(path, dirC)
|
||
if not os.path.isdir(sc):
|
||
continue
|
||
dfWB = dfWB.append(getWBData(sc, hasBody))
|
||
dfWB['标题']=''
|
||
dfWB.rename(columns={"微博正文": "内容", "发布时间": "日期"},inplace=True)
|
||
return dfWB
|
||
|
||
def getWXData_Province(path, hasBody=False):
|
||
cs = ['公众号', '链接', '日期', '标题', '内容', '阅读数', '在看数', '点赞数', 'get_time', '头条',]
|
||
dfWX = pd.DataFrame(columns=cs)
|
||
|
||
dictC = {'LZ':'兰州市', 'LX':'临夏回族自治州', 'JC':'金昌市', 'ZY':'张掖市', 'LN':'陇南市', 'JYG':'嘉峪关市', 'TS':'天水市',
|
||
'GN':'甘南藏族自治州', 'BY':'白银市', 'JQ':'酒泉市', 'QY':'庆阳市', 'PL':'平凉市', 'DX':'定西市', 'WW':'武威市', 'SZ':'省直部门',
|
||
'lz': '兰州市', 'lx': '临夏回族自治州', 'jc': '金昌市', 'zy': '张掖市', 'ln': '陇南市', 'jyg': '嘉峪关市', 'ts': '天水市',
|
||
'gn': '甘南藏族自治州', 'by': '白银市', 'jq': '酒泉市', 'qy': '庆阳市', 'pl': '平凉市', 'dx': '定西市', 'ww': '武威市', 'sz': '省直部门'
|
||
}
|
||
files=[]
|
||
dirCs = os.listdir(path)
|
||
for dirC in dirCs:
|
||
if dirC[:1]=='.':
|
||
continue
|
||
sc = os.path.join(path, dirC)
|
||
# 判断市州名称
|
||
strC = ''
|
||
for k,v in dictC.items():
|
||
if k in sc:
|
||
strC = v
|
||
break
|
||
|
||
print('-', strC)
|
||
# 市州 dirC PL
|
||
if os.path.isdir(sc):
|
||
dirCCs = os.listdir(sc)
|
||
for dirCC in dirCCs:
|
||
scc = os.path.join(sc,dirCC)
|
||
# 文件
|
||
if dirCC[:1]=='.':
|
||
continue
|
||
if not os.path.isdir(scc):
|
||
#print(dirCC, dirCC[-5:] )
|
||
if (dirCC[-5:]=='.xlsx' or dirCC[-4:]=='.xls') and not dirCC.startswith('~'):
|
||
files.append(scc)
|
||
#print(scc)
|
||
dfcc = pd.read_excel(scc) # , engine='openpyxl'
|
||
dfcc['市州'] = strC
|
||
dfWX = dfWX.append(dfcc)
|
||
print(' ', dirCC, dfcc.shape[0])
|
||
else:
|
||
print('something error 01: ', dirCC)
|
||
else:
|
||
if (dirC[-5:]=='.xlsx' or dirC[-4:]=='.xls') and not dirCC.startswith('~'):
|
||
files.append(sc)
|
||
#print(sc)
|
||
dfc = pd.read_excel(sc)
|
||
dfcc['市州'] = strC
|
||
dfWX = dfWX.append(dfc)
|
||
print(' ', dirC, dfc.shape[0])
|
||
else:
|
||
print('something error 02')
|
||
print(' ', dfWX.shape[0])
|
||
print('ALL WX data', dfWX.shape[0])
|
||
return dfWX
|
||
|
||
|
||
# 从数据目录中读取xlsx文件,拼接到一起
|
||
def getTTData(path, cities, hasBody=False):
|
||
# cityShorten
|
||
cityShorten = {'LZ':'兰州市', 'LX':'临夏回族自治州', 'JC':'金昌市', 'ZY':'张掖市', 'LN':'陇南市', 'JYG':'嘉峪关市',
|
||
'TS':'天水市', 'GN':'甘南藏族自治州', 'BY':'白银市', 'JQ':'酒泉市', 'QY':'庆阳市', 'PL':'平凉市',
|
||
'DX':'定西市', 'WW':'武威市', 'SZ':'省直部门', 'XQ': '兰州新区', 'LZXQ': '兰州新区',
|
||
|
||
'lz': '兰州市', 'lx': '临夏回族自治州', 'jc': '金昌市', 'zy': '张掖市', 'ln': '陇南市', 'jyg': '嘉峪关市',
|
||
'ts': '天水市', 'gn': '甘南藏族自治州', 'by': '白银市', 'jq': '酒泉市', 'qy': '庆阳市', 'pl': '平凉市',
|
||
'dx': '定西市', 'ww': '武威市', 'sz': '省直部门', 'xq': '兰州新区', 'lzxq': '兰州新区',
|
||
|
||
'白银': '白银市', '定西': '定西市', '酒泉': '酒泉市', '嘉峪关': '嘉峪关市', '陇南': '陇南市',
|
||
'临夏': '临夏回族自治州', '平凉': '平凉市', '庆阳': '庆阳市', '天水': '天水市', '武威': '武威市', '新区': '兰州新区',
|
||
'兰州': '兰州市', '张掖': '张掖市', '甘南': '甘南藏族自治州', '省直': '省直部门', '金昌': '金昌市',
|
||
}
|
||
dirCs = os.listdir(path)
|
||
#account date title nread ncomment content url origin
|
||
cs = ['account', 'date', 'title', 'nread', 'ncomment', 'content', 'url', 'origin', 'city']
|
||
|
||
dfTT = pd.DataFrame(columns=cs)
|
||
cityCount = 0
|
||
for dirC in dirCs:
|
||
if dirC[:1] == '.' \
|
||
or not os.path.isdir(os.path.join(path, dirC)) \
|
||
or 'weixin' in dirC.lower() \
|
||
or 'weibo' in dirC.lower() \
|
||
or not cityShorten[dirC] in cities:
|
||
continue
|
||
cityCount += 1
|
||
# City LN
|
||
dfTTC = pd.DataFrame(columns=cs)
|
||
dirCTs = os.listdir(os.path.join(path, dirC))
|
||
for dirCT in dirCTs:
|
||
if dirCT[:1] == '.' \
|
||
or not os.path.isdir(os.path.join(path, dirC, dirCT)) \
|
||
or 'weixin' in dirCT.lower() \
|
||
or 'weibo' in dirCT.lower():
|
||
continue
|
||
if 'tt' in dirCT.lower() or dirC.lower() in dirCT.lower():
|
||
fns = os.listdir(os.path.join(path, dirC, dirCT))
|
||
numc = 0
|
||
accounts = set()
|
||
for fn in fns:
|
||
if os.path.isdir(os.path.join(path, dirC, dirCT, fn)):
|
||
print(' >>',fn)
|
||
sds = os.listdir(os.path.join(path, dirC, dirCT, fn))
|
||
for sd in sds:
|
||
if sd[:1] == '.' or not sd[-5:] == '.xlsx' or sd.count('_') < 2:
|
||
continue
|
||
|
||
ttName = sd[sd.index('_')+1:]
|
||
ttName = ttName[:ttName.index('_')]
|
||
fileAs = os.path.join(path, dirC, dirCT, fn, sd)
|
||
#print(' ', ttName, fileAs)
|
||
if len(fileAs) > 0:
|
||
dfdftt = pd.read_excel(fileAs)
|
||
dfTTC = dfTTC.append(dfdftt, ignore_index=True)
|
||
numc = numc+1
|
||
accounts.add(ttName)
|
||
print('.', end='')
|
||
print(' ')
|
||
|
||
#
|
||
if fn[:1] == '.' or not fn[-5:] == '.xlsx' or fn.count('_') < 2:
|
||
continue
|
||
#print('---',fn)
|
||
# 账号名称
|
||
ttName = fn[fn.index('_')+1:]
|
||
ttName = ttName[:ttName.index('_')]
|
||
fileAs = os.path.join(path, dirC, dirCT, fn)
|
||
#print(' ', ttName, fileAs)
|
||
if len(fileAs) > 0:
|
||
try:
|
||
dfdftt = pd.read_excel(fileAs)
|
||
except:
|
||
print('')
|
||
print("!!!!!!! 读取头条文件出错: ", fileAs)
|
||
|
||
if not dfdftt.empty:
|
||
dfTTC = dfTTC.append(dfdftt, ignore_index=True)
|
||
numc = numc+1
|
||
accounts.add(ttName)
|
||
print('.', end='')
|
||
print(' ')
|
||
print(' +', cityShorten[dirC], 'dir:', dirC, '/', dirCT, '账号数', len(accounts),'文件数', numc, '文章数', dfTTC.shape[0])
|
||
dfTTC['city'] = cityShorten[dirC]
|
||
dfTT = dfTT.append(dfTTC)
|
||
|
||
print('Read TT DIR finished. cities', cityCount, '; lines', dfTT.shape)
|
||
#dfTT.to_excel("D:/Projects/POM/2021年7月/2021年上半年/WB_ALL.xlsx")
|
||
return dfTT
|
||
|
||
|
||
#######################################################
|
||
#######################################################
|
||
|
||
|
||
t0 = datetime.datetime.now()
|
||
df = pd.DataFrame()
|
||
|
||
# WX
|
||
if doWX:
|
||
dfWX = pd.DataFrame()
|
||
for path in paths:
|
||
ddff = getWXData_Province(path)
|
||
print(' read WX data', ddff.shape)
|
||
dfWX = dfWX.append(ddff)
|
||
print('WX data ', dfWX.shape)
|
||
|
||
# 查找关键词
|
||
dfwxd = dfWX[['市州', '公众号', '日期', '标题', '链接', '内容', '阅读数']][dfWX['内容'].str.contains(regSTRA, regex=True, na=False) & dfWX['内容'].str.contains(regSTRB, regex=True, na=False)]
|
||
dfwxd['类型'] = '微信'
|
||
dfwxd['关键词']=''
|
||
dfwxd['上下文']=''
|
||
print("Found ", dfwxd.shape)
|
||
dfwxd = dfwxd.reset_index()
|
||
# 提取上下文
|
||
iiii=0
|
||
for i,r in dfwxd.iterrows():
|
||
string = str(dfwxd.loc[iiii,'内容'])
|
||
its = re.finditer(regSTRAB, string)
|
||
sk = ''
|
||
sp = ''
|
||
for it in its:
|
||
s=0
|
||
e=len(string)
|
||
d = 5
|
||
if it.start()>d:
|
||
s = it.start()-d
|
||
if (it.end()< e-d):
|
||
e = it.end()+d
|
||
sk += it.group() + ';'
|
||
sp += string[s:e] + ';'
|
||
|
||
dfwxd.loc[iiii,'关键词'] = sk[:-1]
|
||
dfwxd.loc[iiii,'上下文'] = sp[:-1]
|
||
iiii = iiii+1
|
||
|
||
dfwxd.rename(columns={"阅读数": "阅读数/评论数", "公众号": "账号名称"},inplace=True)
|
||
dfwxd = dfwxd[['关键词', '上下文', '日期', '市州', '类型', '账号名称', '链接', '标题', '阅读数/评论数', '内容',]]
|
||
df = df.append(dfwxd)
|
||
|
||
# WB
|
||
if doWB:
|
||
dfWB = pd.DataFrame()
|
||
for path in paths:
|
||
dfWBff = getWBData_Province(path)
|
||
print('read WB data', dfWBff.shape)
|
||
dfWB = dfWB.append(dfWBff)
|
||
|
||
print("WB Data ", dfWB.shape)
|
||
|
||
|
||
# 查找关键词
|
||
dfwbd = dfWB[['市州', '账号名称', '标题', '日期', '评论数', '内容']][dfWB['内容'].str.contains(regSTRA, regex=True, na=False) & dfWB['内容'].str.contains(regSTRB, regex=True, na=False)]
|
||
dfwbd['类型'] = '微博'
|
||
dfwbd['关键词'] = ''
|
||
dfwbd['上下文'] = ''
|
||
print("WB Found ", dfwbd.shape)
|
||
|
||
# 提取关键词上下文
|
||
dfwbd = dfwbd.reset_index()
|
||
iiii = 0
|
||
for i, r in dfwbd.iterrows():
|
||
string = str(dfwbd.loc[iiii, '内容'])
|
||
its = re.finditer(regSTRAB, string)
|
||
sk = ''
|
||
sp = ''
|
||
for it in its:
|
||
s = 0
|
||
e = len(string)
|
||
d = 5
|
||
if it.start() > d:
|
||
s = it.start() - d
|
||
if (it.end() < e - d):
|
||
e = it.end() + d
|
||
sk += it.group() + ';'
|
||
sp += string[s:e] + ';'
|
||
dfwbd.loc[iiii, '关键词'] = sk
|
||
dfwbd.loc[iiii, '上下文'] = sp
|
||
iiii = iiii + 1
|
||
|
||
dfwbd.rename(columns={"评论数": "阅读数/评论数"},inplace=True)
|
||
dfwbd = dfwbd[['关键词', '上下文', '日期', '市州', '类型', '账号名称', '标题', '阅读数/评论数', '内容',]]
|
||
df = df.append(dfwbd)
|
||
|
||
#######################################################
|
||
# TT
|
||
if doTT:
|
||
cities = [
|
||
'临夏回族自治州',
|
||
'白银市',
|
||
'定西市',
|
||
'酒泉市',
|
||
'嘉峪关市',
|
||
'平凉市',
|
||
'庆阳市',
|
||
'天水市',
|
||
'武威市',
|
||
'兰州新区',
|
||
'陇南市',
|
||
'兰州市', '张掖市', '甘南藏族自治州', '金昌市',
|
||
'省直部门', # 共12市2州1新区
|
||
]
|
||
|
||
dfTT = pd.DataFrame()
|
||
for strP in paths:
|
||
print("read TT data ", strP)
|
||
ddff = getTTData(strP, cities)
|
||
dfTT = dfTT.append(ddff)
|
||
|
||
print("TT data", dfTT.shape)
|
||
#account date title nread ncomment content url origin city
|
||
|
||
# 查找关键词
|
||
dfttd = dfTT[['city', 'account', 'date', 'title', 'url', 'content', 'nread']][dfTT['content'].str.contains(regSTRA, regex=True, na=False) & dfTT['content'].str.contains(regSTRB, regex=True, na=False)]
|
||
dfttd['类型'] = '头条'
|
||
dfttd['关键词']=''
|
||
dfttd['上下文']=''
|
||
print("Found ", dfttd.shape)
|
||
|
||
# 提取上下文
|
||
dfttd = dfttd.reset_index()
|
||
iiii = 0
|
||
for i,r in dfttd.iterrows():
|
||
string = str(dfttd.loc[iiii, 'content'])
|
||
its = re.finditer(regSTRAB, string)
|
||
sk = ''
|
||
sp = ''
|
||
for it in its:
|
||
s=0
|
||
e=len(string)
|
||
d = 5
|
||
if it.start()>d:
|
||
s = it.start()-d
|
||
if (it.end()< e-d):
|
||
e = it.end()+d
|
||
sk += it.group() + ';'
|
||
sp += string[s:e] + ';'
|
||
|
||
dfttd.loc[iiii,'关键词'] = sk[:-1]
|
||
dfttd.loc[iiii,'上下文'] = sp[:-1]
|
||
iiii = iiii + 1
|
||
|
||
dfttd.rename(columns={'city': "市州", 'account': "账号名称", 'date': "日期", 'title': "标题", 'url':'链接', 'content': "内容", "nread": "阅读数/评论数"},inplace=True)
|
||
dfttd = dfttd[['关键词', '上下文', '日期', '市州', '类型', '账号名称', '链接', '标题', '阅读数/评论数', '内容',]]
|
||
df = df.append(dfttd)
|
||
|
||
|
||
#################################
|
||
print('扫描完成,发现敏感词', df.shape[0])
|
||
|
||
df['date'] = pd.to_datetime(df['日期'])
|
||
df['identifier'] = df['账号名称'].map(str) + '_' + df['date'].map(lambda x:str(x.year)+str(x.month).rjust(2,'0')+str(x.day).rjust(2,'0'))
|
||
|
||
|
||
print('读取已发现的敏感词文件')
|
||
dfFound = pd.DataFrame()
|
||
for f in fFound:
|
||
dff = pd.read_excel(f)
|
||
print(' ', f, dff.shape)
|
||
dfFound = dfFound.append(dff, ignore_index=True)
|
||
#错误 建议 账号类型 账号名称 错误出现位置 发文时间 标题 市州
|
||
dfFound['date'] = pd.to_datetime(dfFound['发文时间'])
|
||
dfFound['identifier'] = dfFound['账号名称'].map(str) + '_' + dfFound['date'].map(lambda x:str(x.year)+str(x.month).rjust(2,'0')+str(x.day).rjust(2,'0'))
|
||
print(' 共', dfFound.shape[0])
|
||
|
||
|
||
print('读取国办通报数据')
|
||
dfInformed = pd.DataFrame()
|
||
for f in fInformed:
|
||
dfff = pd.read_excel(f)
|
||
print(' ', f, dfff.shape[0])
|
||
dfInformed = dfInformed.append(dfff, ignore_index=True)
|
||
#序号 所属省份/部委 市州 公众号名称 运营主体 文章标题 文章链接 文章发布时间 是否转办 问题摘要 整改情况 监测情况
|
||
dfInformed['date'] = pd.to_datetime(dfInformed['文章发布时间'])
|
||
dfInformed['identifier'] = dfInformed['公众号名称'].map(str) + '_' + dfInformed['date'].map(lambda x:str(x.year)+str(x.month).rjust(2,'0')+str(x.day).rjust(2,'0'))
|
||
print(' 共', dfInformed.shape[0])
|
||
|
||
|
||
print('标记被监测出的和被通报的')
|
||
#扫描结果中标记被监测出的和被通报的
|
||
df['监测'] = df['identifier'].isin(dfFound['identifier'])
|
||
df['通报'] = df['identifier'].isin(dfInformed['identifier'])
|
||
|
||
'''
|
||
print('监测结果中标记被扫描出的和被通报的')
|
||
#监测结果中标记被扫描出的和被通报的
|
||
dfFound['扫描'] = dfFound['identifier'].isin(dfScan['identifier'])
|
||
dfFound['通报'] = dfFound['identifier'].isin(dfInformed['identifier'])
|
||
|
||
|
||
print('通报结果中标记被扫描出的和被监测出的')
|
||
#通报结果中标记被扫描出的和被监测出的
|
||
dfInformed['扫描'] = dfInformed['identifier'].isin(dfScan['identifier'])
|
||
dfInformed['监测'] = dfInformed['identifier'].isin(dfFound['identifier'])
|
||
'''
|
||
print('去掉已标记内容')
|
||
dfO = df.loc[(df['监测']==False) & (df['通报']==False)].copy()
|
||
print(dfO.shape)
|
||
|
||
|
||
#################################
|
||
#输出
|
||
sss = datetime.datetime.now().strftime("%Y-%m-%d_%H.%M.%S")
|
||
pathO = pathO + sss + '/'
|
||
if not os.path.exists(pathO):
|
||
os.makedirs(pathO)
|
||
dfO.drop(['date', 'identifier', '监测', '通报'],axis=1, inplace=True)
|
||
dfO.to_excel(pathO + sss + ".xlsx", index=False)
|
||
|
||
|
||
if splitByCity:
|
||
print('按市州输出')
|
||
cities = dfO['市州'].unique()
|
||
for city in cities:
|
||
dft = dfO[dfO['市州'].isin([city])]
|
||
# exec("df%s = dft"%cityNum)
|
||
dft.to_excel(pathO + city+'.xlsx', index=False)
|
||
|
||
|
||
#计时
|
||
t = datetime.datetime.now() - t0
|
||
print('用时{}时{}分{}秒'.format(int(t.seconds/3600),int(t.seconds/60), t.seconds%60)) |