|
|
import re
|
|
|
|
|
|
# text = "6月15日17时至6月16日17时期间,全网累计停电132.59万户次(5分钟以内短时停电用户23.48万户次),环比减少68.28万户次,其中,重要用户停电0户次,用户停电情况总体平稳。"
|
|
|
|
|
|
|
|
|
def count_change_outage(text):
|
|
|
# 匹配数字和“万”单位
|
|
|
pattern = r"(\d+\.\d+)万"
|
|
|
matches = re.findall(pattern, text)
|
|
|
|
|
|
# 提取累计停电、短时停电和环比变化用户数
|
|
|
total_outage = float(matches[0]) # 累计停电用户数
|
|
|
short_term_outage = float(matches[1]) # 短时停电用户数
|
|
|
change_outage = float(matches[2]) # 环比变化用户数
|
|
|
|
|
|
# 判断是增加还是减少
|
|
|
if "减少" in text:
|
|
|
result = change_outage / (total_outage + change_outage)
|
|
|
type = "减少"
|
|
|
elif "增加" in text:
|
|
|
result = change_outage / (total_outage - change_outage)
|
|
|
type = "增加"
|
|
|
else:
|
|
|
result = None # 或者其他默认值
|
|
|
|
|
|
if result is not None:
|
|
|
percentage = f"{result * 100:.2f}%"
|
|
|
print(f"计算结果:{percentage}")
|
|
|
else:
|
|
|
print("未找到增加或减少的关键字")
|
|
|
|
|
|
short_percentage = f"{short_term_outage / total_outage * 100:.2f}%"
|
|
|
|
|
|
# 匹配“重要用户停电”后面的数字
|
|
|
pattern = r"重要用户停电(\d+)户"
|
|
|
|
|
|
match = re.search(pattern, text)
|
|
|
|
|
|
if match:
|
|
|
important_stop_outage = match.group(1)
|
|
|
print(f"重要用户停电户次:{result}")
|
|
|
else:
|
|
|
important_stop_outage = "0"
|
|
|
print("未找到重要用户停电户次")
|
|
|
|
|
|
return (
|
|
|
total_outage,
|
|
|
short_term_outage,
|
|
|
change_outage,
|
|
|
percentage,
|
|
|
short_percentage,
|
|
|
important_stop_outage,
|
|
|
type,
|
|
|
)
|
|
|
|
|
|
|
|
|
# count_change_outage(text)
|
|
|
|
|
|
|
|
|
def count_outage_sentiment(text):
|
|
|
print("开始分析舆情数据:")
|
|
|
print(text)
|
|
|
# text = "全网监测到涉电力供应类舆情风险信息11条,环比减少2条;"
|
|
|
# text = "涉电力供应类舆情风险信息22条,环比持平。其中1条为官方媒体发布,其余21条均为个人账号发布。"
|
|
|
# 使用正则表达式匹配数字和关键词
|
|
|
pattern = r"信息(\d+)条,环比(增加|减少)(\d+)条"
|
|
|
match = re.search(pattern, text)
|
|
|
num1 = ""
|
|
|
change = ""
|
|
|
num2 = ""
|
|
|
result = ""
|
|
|
|
|
|
if match:
|
|
|
num1 = int(match.group(1)) # 第一个数字,如 11
|
|
|
change = match.group(2) # 变化类型,如 “减少” 或 “增加”
|
|
|
num2 = int(match.group(3)) # 第二个数字,如 2
|
|
|
|
|
|
if change == "减少":
|
|
|
result = f"{num2 / (num1 + num2) * 100:.2f}%"
|
|
|
num2 = num1 + num2
|
|
|
elif change == "增加":
|
|
|
result = f"{num2 / (num1 - num2) * 100:.2f}%"
|
|
|
num2 = num1 - num2
|
|
|
else:
|
|
|
result = None # 如果不是增加或减少,可以处理成其他情况
|
|
|
|
|
|
print(f"第一个数字:{num1}")
|
|
|
print(f"变化类型:{change}")
|
|
|
print(f"第二个数字:{num2}")
|
|
|
if result is not None:
|
|
|
print(f"计算结果:{result}")
|
|
|
else:
|
|
|
print("变化类型未知,无法计算")
|
|
|
|
|
|
else:
|
|
|
# update:2025-07-08 增加持平
|
|
|
pattern = r"信息(\d+)条,环比持平"
|
|
|
match = re.search(pattern, text)
|
|
|
if match:
|
|
|
num1 = int(match.group(1))
|
|
|
change = "持平"
|
|
|
num2 = int(match.group(1))
|
|
|
result = ""
|
|
|
else:
|
|
|
pattern = r"信息(\d+)条,同比(增加|减少)(\d+)条"
|
|
|
match = re.search(pattern, text)
|
|
|
if match:
|
|
|
num1 = int(match.group(1)) # 第一个数字,如 11
|
|
|
change = match.group(2) # 变化类型,如 “减少” 或 “增加”
|
|
|
num2 = int(match.group(3)) # 第二个数字,如 2
|
|
|
|
|
|
if change == "减少":
|
|
|
result = f"{num2 / (num1 + num2) * 100:.2f}%"
|
|
|
num2 = num1 + num2
|
|
|
elif change == "增加":
|
|
|
result = f"{num2 / (num1 - num2) * 100:.2f}%"
|
|
|
num2 = num1 - num2
|
|
|
else:
|
|
|
result = None # 如果不是增加或减少,可以处理成其他情况
|
|
|
|
|
|
print("未匹配到符合条件的内容")
|
|
|
|
|
|
return num1, change, num2, result
|