前言
通过上文PaddleOCR环境搭建并简单提取文字
已经可以实现从图片提取文字。
通过以下代码循环获取文本列表。
txts = [line[1][0] for line in result]
接下去可以使用PaddleNLP进行关键信息抽取
PaddleNLP
PaddleNLP是一款简单易用且功能强大的自然语言处理开发库。聚合业界优质预训练模型并提供开箱即用的开发体验,覆盖NLP多场景的模型库搭配产业实践范例可满足开发者灵活定制的需求。
官方gitee仓库:https://gitee.com/monkeycc/PaddleNLP
安装PaddleNLP
打开Anaconda Prompt
安装paddlenlp
pip install paddlenlp -i https://pypi.tuna.tsinghua.edu.cn/simple
使用一键预测模型
这里我们引用PaddleNLP的一键预测功能无需训练,直接输入数据即可通过抽取结果。
from paddlenlp import Taskflow
# 获取信息抽取模型information_extraction
ie = Taskflow('information_extraction', schema=[])
txts = [line[1][0] for line in result]
# 合并文本
all_context = "\n".join(txts)
schema = ['甲方', '乙方', '工程名称','工程地点']
ie.set_schema(schema)
# nlp模型推理
nlp_result = ie(all_context)
print(nlp_result)
输出:
[{
‘甲方’: [{‘text’: ‘叶县环境保护局’, ‘start’: 7, ‘end’: 14, ‘probability’:
0.9188739300160371}],
‘乙方’: [{‘text’: ‘叶县建昆重政工程有限公司’, ‘start’: 18, ‘end’: 30, ‘probability’: 0.8437942288489282}],
‘工程名称’: [{‘text’:‘叶县环境空气质量自动监测站建设工程’, ‘start’: 144, ‘end’: 161, ‘probability’:
0.8328638234375312}],
‘工程地点’: [{‘text’: ‘叶县’, ‘start’: 7, ‘end’: 9, ‘probability’: 0.8829175051535643}]
}]
分析结果得出数据结构为[{}]的形式嵌套,即列表里嵌套字典。
使用下列代码格式化结果:
for key in schema:
value = nlp_result[0][key][0]['text']
print(key+':'+value)
输出:
甲方:叶县环境保护局
乙方:叶县建昆重政工程有限公司
工程名称:叶县环境空气质量自动监测站建设工程
工程地点:叶县
完整代码:
from paddleocr import PaddleOCR, draw_ocr
from PIL import Image
# paddleocr目前支持中英文、英文、法语、德语、韩语、日语等80个语种,可以通过修改lang参数进行切换
ocr = PaddleOCR(use_angle_cls=False, lang="ch") # need to run only once to download and load model into memory
img_path = "./test_img/hetong2.jpg"
result = ocr.ocr(img_path, cls=False)
# 引用nlp
from paddlenlp import Taskflow
# 获取信息抽取模型information_extraction
ie = Taskflow('information_extraction', schema=[])
txts = [line[1][0] for line in result]
print(txts)
# 合并文本
all_context = "\n".join(txts)
schema = ['甲方', '乙方', '工程名称','工程地点']
ie.set_schema(schema)
# nlp模型推理
nlp_result = ie(all_context)
print(nlp_result)
result = []
# 格式化预测结果
for key in schema:
value = nlp_result[0][key][0]['text']
print(key+':'+value)