LTP pdf 处理带orc 图片公式 训练数据


您提出了一个非常好的观点。确实,LTP和Label Studio在某些功能上有重叠,但它们的主要用途不同。LTP主要用于自动化的文本处理,而Label Studio主要用于人工标注。考虑到您的需求,我们可以只使用LTP,并结合OCR和其他工具来处理PDF文件,包括图片、数学公式、物理公式和化学公式。

以下是一个更完整的解决方案,结合了多个工具:

  1. 使用pdfminer进行基本的文本提取
  2. 使用pytesseract进行OCR处理图片
  3. 使用mathpix-ocr处理数学公式(需要申请API密钥)
  4. 使用LTP进行中文文本处理
  5. 使用正则表达式识别物理和化学公式

首先,安装必要的库:

pip install pdfminer.six pytesseract pillow ltp mathpix-ocr

然后,这里是一个完整的Python脚本:

import io
import os
from pdfminer.high_level import extract_text_to_fp
from pdfminer.layout import LAParams
from PIL import Image
import pytesseract
from ltp import LTP
import re
import json
import mathpix
import base64

# 设置Mathpix API凭证
mathpix.config['app_id'] = 'YOUR_APP_ID'
mathpix.config['app_key'] = 'YOUR_APP_KEY'

# 初始化LTP
ltp = LTP()

def extract_text_from_pdf(pdf_path):
    """从PDF提取文本"""
    output = io.StringIO()
    with open(pdf_path, 'rb') as pdf_file:
        extract_text_to_fp(pdf_file, output, laparams=LAParams(), page_numbers=None, maxpages=0, 
                           caching=True, codec='utf-8')
    return output.getvalue()

def perform_ocr(image_path):
    """对图片进行OCR"""
    return pytesseract.image_to_string(Image.open(image_path), lang='chi_sim+eng')

def process_math_formula(image_path):
    """使用Mathpix处理数学公式"""
    image_uri = "data:image/jpg;base64," + base64.b64encode(open(image_path, "rb").read()).decode()
    r = mathpix.latex({
        'src': image_uri,
        'formats': ['latex_simplified']
    })
    return r['latex_simplified']

def is_formula(text):
    """简单地判断是否为物理或化学公式"""
    formula_pattern = r'[A-Za-z0-9+\-=()[\]{}]+$'
    return bool(re.match(formula_pattern, text))

def process_text(text):
    """使用LTP处理文本"""
    seg, hidden = ltp.seg([text])
    pos = ltp.pos(hidden)
    ner = ltp.ner(hidden)
    
    words = seg[0]
    pos_tags = pos[0]
    ner_tags = ner[0]
    
    return words, pos_tags, ner_tags

def create_dataset(pdf_path, image_folder):
    """创建数据集"""
    dataset = []
    
    # 提取PDF文本
    text = extract_text_from_pdf(pdf_path)
    paragraphs = text.split('\n\n')
    
    for para in paragraphs:
        words, pos_tags, ner_tags = process_text(para)
        
        # 初始化标签
        labels = ['O'] * len(words)
        
        # 处理命名实体
        for start, end, tag in ner_tags:
            labels[start] = 'B-' + tag
            for i in range(start + 1, end):
                labels[i] = 'I-' + tag
        
        # 处理可能的公式
        for i, word in enumerate(words):
            if is_formula(word):
                labels[i] = 'B-FORMULA'
        
        dataset.append({
            'text': ' '.join(words),
            'labels': labels
        })
    
    # 处理图片
    for image_file in os.listdir(image_folder):
        if image_file.endswith(('.png', '.jpg', '.jpeg')):
            image_path = os.path.join(image_folder, image_file)
            
            # 尝试作为数学公式处理
            try:
                formula = process_math_formula(image_path)
                dataset.append({
                    'text': formula,
                    'labels': ['B-MATH_FORMULA'] + ['I-MATH_FORMULA'] * (len(formula.split()) - 1)
                })
            except Exception:
                # 如果不是数学公式,进行普通OCR
                ocr_text = perform_ocr(image_path)
                words, pos_tags, ner_tags = process_text(ocr_text)
                dataset.append({
                    'text': ' '.join(words),
                    'labels': ['O'] * len(words)  # 这里可以根据需要进行更复杂的标注
                })
    
    return dataset

# 使用函数
pdf_path = 'your_textbook.pdf'
image_folder = 'extracted_images'
dataset = create_dataset(pdf_path, image_folder)

# 保存数据集
with open('dataset.json', 'w', encoding='utf-8') as f:
    json.dump(dataset, f, ensure_ascii=False, indent=2)

print("数据集创建完成,已保存为 dataset.json")

这个脚本做了以下几件事:

  1. 从PDF提取文本。
  2. 使用LTP处理提取的文本,进行分词、词性标注和命名实体识别。
  3. 使用简单的规则识别可能的物理和化学公式。
  4. 使用Mathpix OCR处理数学公式图片。
  5. 使用pytesseract处理其他图片。
  6. 将所有处理后的数据组合成一个适合训练的数据集格式。

使用这个脚本的注意事项:

  1. 您需要申请Mathpix API的凭证并填入脚本中。
  2. 您需要安装Tesseract OCR并确保它在系统路径中。
  3. 您需要提前将PDF中的图片提取到一个文件夹中(这里假设为'extracted_images'文件夹)。
  4. 这个脚本使用了一个非常简单的方法来识别公式,您可能需要根据实际情况改进这个方法。

这个数据集格式应该适合用于微调chinese-roberta-wwm-ext模型。每个数据项包含了文本和对应的标签序列,其中标签使用了BIO(Begin-Inside-Outside)标注方案。

要进一步改进这个过程,您可以考虑:

  1. 使用更复杂的规则或机器学习方法来识别公式。
  2. 对于物理和化学公式,可能需要特殊的处理方法,比如使用专门的OCR工具或规则。
  3. 添加更多的标签类型,比如区分不同学科的知识点。
  4. 使用更高级的PDF解析工具,如PyMuPDF,可能可以更好地处理PDF的布局和结构。

最后,记住这个过程可能需要多次迭代和人工校验来确保数据质量。如果您在使用这个脚本时遇到任何问题,或者需要针对特定类型的内容进行优化,请随时询问。

声明:八零秘林|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - LTP pdf 处理带orc 图片公式 训练数据


记忆碎片 · 精神拾荒