4_按年份合并词汇数据【“依存句法”之“MD&A分析”】

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文件终极判断已完成")


  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值