1_依存句法提取主语和主语修饰语【“依存句法”之“MD&A分析”】

import os
from pyltp import SentenceSplitter, Segmentor, Postagger, Parser
import pandas as pd
import openpyxl

# 加载LTP模型
LTP_DIR='D:\ltp_3.4.0\ltp_data_v3.4.0'  # LTP模型目录的路径
cws_model_path = os.path.join(LTP_DIR, 'cws.model')  # 分词模型路径
pos_model_path = os.path.join(LTP_DIR, 'pos.model')  # 词性标注模型路径
par_model_path = os.path.join(LTP_DIR, 'parser.model')  # 依存句法分析模型路径
segmentor = Segmentor(cws_model_path) # 加载分词模型
postagger = Postagger(pos_model_path) # 加载词性标注模型
parser = Parser(par_model_path) # 加载依存句法分析模型

# 待分析的句子
sentence = "政府官员喜欢吃红水果,政府员工也喜欢吃水果。"

# 分句
sentences = SentenceSplitter.split(sentence)

# 分词
words = segmentor.segment(sentences[0])
print(words)
# 词性标注
postags = postagger.postag(words)
print(postags)
# 依存句法分析
arcs = parser.parse(words, postags)
print(arcs)
# 找到主语和主语修饰语
order = 0 # 用于为第一个for遍历的“主语”元素进行排序,便于后续在word中定位找到对应的词汇
subject = []
subject_modifier = []
for arc in arcs:
    ### 找出主语——主谓关系分析
    if arc[1] == 'SBV' and words[arc[0]-1]!=arc and postags[order]=="n": # 首先满足主谓关系,其次判断不是关系中的谓语【 words[arc[0]-1] 处理说明:ROOT节点的索引是 0 ,第一个词开始的索引依次为1,2,3,···】
        subject.append(words[order])
        order2 = 0 # 用于为第二个for遍历的“主语修饰语”元素进行排序
        for arc2 in arcs:
            ### 找出主语修饰语——定中关系分析
            if arc2[0] == order+1 and arc2[1] == 'ATT': # 找到主语后随后立即寻找和该主语相关的修饰语【其中:order+1 起到关联主语的作用】
                subject_modifier.append(words[order2])
            order2 = order2+1
    order = order+1

# 输出结果
print("主语:", subject)
print("主语修饰语:", subject_modifier)
# 转化为字符串类型
subject_str=','.join(subject)
subject_modifier_str=','.join(subject_modifier)

# 创建一个新的Excel工作簿
workbook = openpyxl.Workbook()

# 选择默认的工作表
worksheet = workbook.active

# *遍历“主语”和“主语修饰语”列表,将内容添加到同一行的两个格子里
worksheet.cell(row=2, column=1, value=subject_str) # 此处row和column起始数值均为1
worksheet.cell(row=2, column=2, value=subject_modifier_str)


# 在第一行加入索引
index_1 = "主语"
worksheet.cell(row=1, column=1, value=index_1)
index_2 = "主语修饰语"
worksheet.cell(row=1, column=2, value=index_2)
# *指定保存位置并保存Excel文件
save_path = 'C:/Users/86189/Desktop/管理层讨论与分析_词汇/2001.xlsx'  # 替换为你的保存路径
workbook.save(save_path)

# 释放模型
segmentor.release()
postagger.release()
parser.release()

# 代码解释:
# 首先,我们需要加载LTP模型,包括分词模型、词性标注模型和依存句法分析模型。
# 然后,我们初始化分词器、词性标注器和依存句法分析器。
# 接下来,我们将待分析的句子进行分句,然后对每个句子进行分词、词性标注和依存句法分析。
# 在依存句法分析结果中,我们通过遍历弧(arc)来找到主谓关系(SBV),并获取主语和主语修饰语。
# 最后,我们输出主语和主语修饰语的结果,并写入excel文件中






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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值