【ERNIE + PaddleOCR】 快速生成latex表格代码

一、项目背景

在撰写论文时,使用LaTeX编辑表格往往相当繁琐,需要深入掌握其语法,并参照已有论文模板进行细致调试。而现在,借助PaddleOCR和ERNIE等智能工具,我们可以迅速提取模板论文的表格信息并自动生成规范表格,极大地提升了工作效率和准确性。方便大家快速的对论文表格进行调整。

二、项目方案

首先利用PaddleOCR的表格识别功能,对论文里的表格进行识别,然后将结果的html代码进行解析,通过ERNIE转换html代码转换为latex代码。

html代码不需要再过多的处理,可以直接进行转换,十分方便。

三、数据说明

准备好论文的表格图片。

四、代码实现

4.1 环境安装

安装所需环境,需要安装PaddleOCR,最好从源代码进行安装,目前该项目更新较快,使用新版本更不容易出现错误。源代码安装首先根据requirements.txt安装所需环境以及一些必要的包(使用中报错提示需要安装一些额外的包)

In [ ]

%cd ~

# 首先建议你先从github上下载PaddleOCR的源码,https://github.com/PaddlePaddle/PaddleOCR.git
# 先不要使用左侧套件里的PaddleOCR,它的版本使用起来有各种小问题。
# 我这里先下载好了源代码并上传解压。
!unzip PaddleOCR-main.zip

# 安装源码所依赖环境
%cd ~/PaddleOCR-main
!pip install --user -r requirements.txt
!pip install --user paddleclas PyMuPDF==1.19.0
!pip install --user premailer openpyxl

# 运行setup安装
!python setup.py build install

4.2 PaddleOCR表格识别

有两种方法可以使用版面分析和文本识别,一种是命令行运行,一种是python代码运行。

命令行方式运行

In [ ]

%cd ~/work

!paddleocr --image_dir=table.png --type=structure --layout=false

python脚本方式运行

In [ ]

import os
import cv2
from paddleocr import PPStructure,save_structure_res

table_engine = PPStructure(layout=False, show_log=True)

save_folder = './output'
img_path = 'table.png'
img = cv2.imread(img_path)
result = table_engine(img)
save_structure_res(result, save_folder, os.path.basename(img_path).split('.')[0])

for line in result:
    line.pop('img')
    print(line)

运行完毕后的文件在work的output文件夹里。

4.3 ERNIE生成latex

之后使用ERNIE Bot进行转换。

In [ ]

# 安装ERNIE Bot
!pip install --upgrade erniebot

设计prompt在后续使用

In [ ]

# 设计prompt

prompt = (
    "我给你一个html代码,它里面是一个table表格,"
    "帮我转换为latex的代码。"
    "html代码为:"
)

获得PadedleOCR返回的html数据

In [ ]

# 表格识别结果文件
file_path = '/home/aistudio/work/output/table/res_0.txt'

html_list = []

with open(file_path, 'r', encoding='utf-8') as file:  
    # 逐行读取文件内容
    for line in file:  
        # 尝试将字符串转换为字典  
        try:  
            data_dict = eval(line)  
            # 在这里处理数据
            if data_dict['type'] == 'table' and isinstance(data_dict['res'], dict):
                html = data_dict['res']['html']
                html_list.append(html)
        except Exception as e:  
            # 如果转换失败,打印错误信息  
            print(f"Error evaluating line in {filename}: {e}")

五、效果展示

使用ernie-3.5来进行转换,得到转换的结果,获得基本的latex表格代码。

In [ ]

import erniebot

models = erniebot.Model.list()
print(models)

# Set authentication params
erniebot.api_type = "aistudio"
erniebot.access_token = "你的token"

# 这里用了一个图片,所以list里只有一个list元素
for html in html_list:
    response = erniebot.ChatCompletion.create(
        model="ernie-3.5",
        messages=[{"role": "user", "content": prompt+html}]
    )
    print(response.get_result())

此项目已发布应用,可以来体验一下。https://aistudio.baidu.com/application/detail/28910

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
抱歉,作为AI语言模型,我只能提供文本内容的生成,无法提供代码生成。以下是一个使用paddle框架ernie-gen模型基于样式的文本生成的示例代码供您参考: ```python import paddle from paddlenlp.transformers import ErnieModel, ErnieForGeneration # 加载预训练模型 model = ErnieModel.from_pretrained('ernie-1.0') ernie_gen = ErnieForGeneration.from_pretrained('ernie-1.0') # 设置生成参数 gen_params = { 'max_len': 128, # 生成文本的最大长度 'do_sample': True, # 是否开启采样 'top_k': 50, # 采样时的概率分布中,取前k个概率最大的词 'top_p': 0.9, # 采样时的概率分布中,取概率之和大于p的最小集合中的词 'temperature': 1.0, # 采样时的softmax温度参数 } # 定义样式和生成的文本 style = '科技' text = '人工智能' # 对样式进行编码 style_ids = paddle.to_tensor([model.cls_token_id] + model.convert_tokens_to_ids(style) + [model.sep_token_id]) # 对文本进行编码 text_ids = paddle.to_tensor([model.cls_token_id] + model.convert_tokens_to_ids(text) + [model.sep_token_id]) # 生成文本 generated_ids = ernie_gen.generate(style_ids, text_ids, **gen_params) # 解码生成的文本 generated_text = model.convert_ids_to_tokens(generated_ids.numpy().tolist()[0]) generated_text = ''.join(generated_text).replace('[CLS]', '').replace('[SEP]', '') print(generated_text) ``` 这段代码可以生成一段以“科技”为样式、以“人工智能”为输入的文本。您可以根据需要修改样式和输入文本,调整生成参数来得到不同的生成结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

军哥说AI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值