zoo9815 2023-10-11 08:56 采纳率: 75%
浏览 5

如何输出抽取的实体个数?

采用UIE抽取实体时,len(result)只能输出实体类型的个数为6个,我如何修改代码才能输出具体抽取的实体个数呢?

#抽取实体
from pprint import pprint
import json
from paddlenlp import Taskflow

def openreadtxt(file_name):
    data = []
    file = open(file_name,'r',encoding='UTF-8')  #打开文件
    file_data = file.readlines() #读取所有行
    for row in file_data:
        data.append(row) #将每行数据插入data中     
    return data

data_input=openreadtxt('./input/中长期规划.txt')   

schema = ["战略定位", "财税支持", "政策目标", "产业体系", "建设应用", "制度保障", "组织实施"]
few_ie = Taskflow('information_extraction', schema=schema, batch_size=1,task_path='./checkpoint/model_best')

results=few_ie(data_input)

info_count = sum(len(result) for result in results)

with open("./output/out中长期规划.txt", "w+",encoding='UTF-8') as f:    #写入文件,若文件不存在则会先创建再写入,但不会覆盖原文件,而是追加在文件末尾
    for result in results:
        line = json.dumps(result, ensure_ascii=False)  #对中文默认使用的ascii编码.想输出真正的中文需要指定ensure_ascii=False
        f.write(line + "\n")

print("抽取实体个数:", info_count)
for idx, text in enumerate(data_input):
    print(results[idx])


下面是输出的内容

抽取实体个数: 6
{'财税支持': [{'text': '强化财政金融支持', 'start': 6885, 'end': 6893, 'probability': 0.9977543776663893}], '政策目标': [{'text': '10-20 万吨', 'start': 2282, 'end': 2290, 'probability': 0.8295114755887738}, {'text': '5 万辆', 'start': 2256, 'end': 2260, 'probability': 0.8832630322984194}], '产业体系': [{'text': '着力打造产业创新支撑平台', 'start': 2951, 'end': 2963, 'probability': 0.888475244401107}, {'text': '积极开展氢能技术创新国际合作', 'start': 3462, 'end': 3476, 'probability': 0.9399201726605249}], '建设应用': [{'text': '统筹推进氢能基础设施建设', 'start': 3631, 'end': 3643, 'probability': 0.683781604701359}, {'text': '合理布局制氢设施', 'start': 3721, 'end': 3729, 'probability': 0.9262853188766407}, {'text': '有序推进交通领域示范应用', 'start': 4319, 'end': 4331, 'probability': 0.8531930510891073}, {'text': '稳步推进氢能多元化示范应用', 'start': 4214, 'end': 4227, 'probability': 0.9259579090671508}, {'text': '积极开展储能领域示范应用', 'start': 4496, 'end': 4508, 'probability': 0.9929209466887414}, {'text': '逐步探索工业领域替代应用', 'start': 4863, 'end': 4875, 'probability': 0.9958242233518462}, {'text': '合理布局发电领域多元应用', 'start': 4658, 'end': 4670, 'probability': 0.9987073774893602}, {'text': '储能', 'start': 5195, 'end': 5197, 'probability': 0.55036255874505}], '制度保障': [{'text': '建立完善氢能产业标准体系', 'start': 5861, 'end': 5873, 'probability': 0.9817167318170696}, {'text': '建立健全氢能政策体系', 'start': 5640, 'end': 5650, 'probability': 0.9342529675982405}, {'text': '加强全链条安全监管', 'start': 6079, 'end': 6088, 'probability': 0.8695369867737313}], '组织实施': [{'text': '充分发挥统筹协调机制作用', 'start': 6469, 'end': 6481, 'probability': 0.4291306701117037}, {'text': '加强全链条安全监管', 'start': 6079, 'end': 6088, 'probability': 0.9854434161541015}, {'text': '做好规划督导评估', 'start': 7152, 'end': 7160, 'probability': 0.992682947623166}]}

  • 写回答

2条回答 默认 最新

  • 老牛毕设 2023-10-11 09:45
    关注

    在你的代码中,few_ie这个Taskflow对象是用来进行信息抽取的,它返回的结果是一个列表,每个元素是一个字典,字典的键是实体类型的名称,值是相应的实体列表。

    如果你想输出每个实体类型的具体抽取的实体个数,你可以修改代码如下:

    # 其他部分不变
    
    info_count_by_type = {}
    
    for result in results:
        for entity_type, entities in result.items():
            count = len(entities)
            info_count_by_type[entity_type] = info_count_by_type.get(entity_type, 0) + count
    
    with open("./output/out中长期规划.txt", "w+",encoding='UTF-8') as f:    
        for result in results:
            line = json.dumps(result, ensure_ascii=False)  
            f.write(line + "\n")
            
    print("每个实体类型的抽取个数:", info_count_by_type)
    
    

    这段代码会输出每个实体类型抽取的个数,并保存在info_count_by_type字典中。

    评论

报告相同问题?

问题事件

  • 创建了问题 10月11日