import pandas as pd
import os
import openpyxl
import re
### 建立各类型词库
# 建立“宏观”词库
Mac=[]
Mac_path="D:/【Pycharm阶段性学习文件】/依存句法/txt_宏观词典.txt"
with open(Mac_path, 'r', encoding='utf-8') as Mac_file:
for line in Mac_file:
# 去除行尾的换行符或者制表符等特殊字符
Mac_word = line.strip()
Mac.append(Mac_word)
# 建立“未来”词库
Fu=[]
Fu_path="D:/【Pycharm阶段性学习文件】/依存句法/txt_未来词典.txt"
with open(Fu_path, 'r', encoding='utf-8') as Fu_file:
for line in Fu_file:
# 去除行尾的换行符或者制表符等特殊字符
Fu_word = line.strip()
Fu.append(Fu_word)
# 建立“数字化”词库
Math=[]
Math_path="D:/【Pycharm阶段性学习文件】/依存句法/txt_数字化词典.txt"
with open(Math_path, 'r', encoding='utf-8') as Math_file:
for line in Math_file:
# 去除行尾的换行符或者制表符等特殊字符
Math_word = line.strip()
Math.append(Math_word)
def check_column_for_keywords(file_path, column_name, keywords, new_column_name ,save_path):
# 读取Excel文件
df = pd.read_excel(file_path,sheet_name="Sheet1")
# 创建一个新列,默认值为False
df[new_column_name] = False
# 遍历关键词列表
for keyword in keywords:
# 使用apply函数和lambda自定义函数表达式检查每一行中指定列的值是否包含关键词
df[new_column_name] = df[new_column_name] | df[column_name].apply(lambda x: keyword in str(x))
# 保存修改后的DataFrame到新的Excel文件
df.to_excel(save_path, index=False)
print("一个判断结果已添加到列中。")
### 打开文件夹进行操作
for year in range(2001,2002):
# 判断主语中是否含有宏观词汇
file_path_1 = f"C:/Users/86189/Desktop/管理层讨论与分析_词汇汇总/{year}/{year}_merge.xlsx" # 替换为你的Excel文件路径
colunm_name_1 = "主语"
keywords_1 = Mac
new_column_name_1 ="宏观主语_check"
save_path_1 = f'C:/Users/86189/Desktop/管理层讨论与分析_词汇汇总/{year}/{year}_check.xlsx'
check_column_for_keywords(file_path_1, colunm_name_1, keywords_1, new_column_name_1,save_path_1)
# 判断主语修饰语中是否含有宏观词汇
file_path_2 = f"C:/Users/86189/Desktop/管理层讨论与分析_词汇汇总/{year}/{year}_check.xlsx" # 替换为你的Excel文件路径(注意:这里为了接续上一次操作,需要将接收文件名替换为上一次保存的文件名,即check.xlsx)
colunm_name_2 = "主语修饰语"
keywords_2 = Mac
new_column_name_2 ="宏观主语修饰语_check"
save_path_2 = f'C:/Users/86189/Desktop/管理层讨论与分析_词汇汇总/{year}/{year}_check.xlsx'
check_column_for_keywords(file_path_2, colunm_name_2, keywords_2, new_column_name_2,save_path_2)
# 判断句子内容中是否含有未来词汇
file_path_3 = f"C:/Users/86189/Desktop/管理层讨论与分析_词汇汇总/{year}/{year}_check.xlsx"
colunm_name_3 = "句子内容"
keywords_3 = Fu
new_column_name_3 ="句子未来表述_check"
save_path_3 = f'C:/Users/86189/Desktop/管理层讨论与分析_词汇汇总/{year}/{year}_check.xlsx'
check_column_for_keywords(file_path_3, colunm_name_3, keywords_3, new_column_name_3,save_path_3)
# 判断句子内容中是否含有未来词汇
file_path_4 = f"C:/Users/86189/Desktop/管理层讨论与分析_词汇汇总/{year}/{year}_check.xlsx"
colunm_name_4 = "句子内容"
keywords_4 = Math
new_column_name_4 = "句子数字化表述_check"
save_path_4 = f'C:/Users/86189/Desktop/管理层讨论与分析_词汇汇总/{year}/{year}_check.xlsx'
check_column_for_keywords(file_path_4, colunm_name_4, keywords_4, new_column_name_4, save_path_4)
# 最终根据除数字化外的前三类结果,判断句子属性是否为“行动性”
# 读取Excel文件
file_path = f'C:/Users/86189/Desktop/管理层讨论与分析_词汇汇总/{year}/{year}_check.xlsx'
df = pd.read_excel(file_path, sheet_name="Sheet1")
columns_to_check = ["宏观主语_check","宏观主语修饰语_check","句子未来表述_check"]
# 创建一个新列'行动属性'来存储结果,初始化为False
df['行动属性'] = False
# 创建两个个新列来存储结果,初始化为0
df['行动句子个数'] = 0
df['数字行动句子个数'] = 0
# 通过集合的不可重复性找到所有文件名称,便于后续计算数值
check_times = list(set(df['文件名']))
# 遍历DataFrame的每一行
for index, row in df.iterrows():
# 使用all()函数检查指定列的所有值是否都为False
if (row[columns_to_check] == False).all().all():
# 如果所有列的值都是False,则将新列'All_False'的对应值设置为True
df.at[index, '行动属性'] = True
### 进行 “微观完成时内容包含"数字化”的句子总数/微观完成时的句子总数” 数值计算
# 假设我们要查找/判断的列名是"文件名"
column_to_check = '文件名'
# 假设我们要找的是'文件名'中值为'time'的行
for time in check_times:
# 【计算“行动句子个数”】
# 使用条件筛选来找到匹配的行
matching_rows_1 = (df[column_to_check] == time) & (df["行动属性"] == True)
# 并计算True的个数
true_count_1 = len(df[matching_rows_1])
df.loc[df[column_to_check] == time, '行动句子个数'] = true_count_1
# 【计算“数字行动句子个数”】
matching_rows_2 = (df[column_to_check] == time) & (df["行动属性"] == True) & (df["句子数字化表述_check"] == True)
true_count_2 = len(df[matching_rows_2])
df.loc[df[column_to_check] == time, '数字行动句子个数'] = true_count_2
# df.loc[df['ConditionColumn'] == 'Yes', 'NewColumn']
df.to_excel(f'C:/Users/86189/Desktop/管理层讨论与分析_词汇汇总/{year}/{year}_check.xlsx', index=False)
print(f"{year}_check文件终极判断已完成")
# 备份文档并重命名为result,用于后续句子去重使用
df.to_excel(f'C:/Users/86189/Desktop/管理层讨论与分析_词汇汇总/{year}/{year}_result.xlsx', index=False)
### 打开备份文档,相同年份句子去重并进行比率计算
df = pd.read_excel(f'C:/Users/86189/Desktop/管理层讨论与分析_词汇汇总/{year}/{year}_result.xlsx', sheet_name="Sheet1")
# 去除无关的列名
column_to_drop=["句子顺序","主语","主语修饰语","句子内容","宏观主语_check","宏观主语修饰语_check","句子未来表述_check","句子数字化表述_check","行动属性"]
df = df.drop(column_to_drop, axis=1)
# 引入数字化指标一列
df['数字化指标'] = 0
# 进行去重处理
df = df.drop_duplicates(keep='first') #参数keep='first'确保了在重复的行中,第一次出现的行会被保留,而其余重复的行会被删除。
# 除法计算,得到数字化指标
for i in range(0,len(df)):
try:
df.iloc[i,3]=(df.iloc[i,2]/df.iloc[i,1])
except ZeroDivisionError:
df.iloc[i,3]=0
# 保存文件
df.to_excel(f'C:/Users/86189/Desktop/管理层讨论与分析_词汇汇总/{year}/{year}_result.xlsx', index=False)
print(f"{year}_result文件终极判断已完成")
4_按年份合并词汇数据【“依存句法”之“MD&A分析”】
最新推荐文章于 2024-07-24 23:49:50 发布