如何使用 Claude 转录文档
Claude 3 非常擅长读取非结构化文本以及图像和 PDF 中的信息,并将其转换为结构化文本。我们将看几个示例,但首先让我们设置运行笔记本所需的代码。
%pip install anthropic IPython
import base64
from anthropic import Anthropic
client = Anthropic()
MODEL_NAME = "claude-3-opus-20240229"
def get_base64_encoded_image(image_path):
with open(image_path, "rb") as image_file:
binary_data = image_file.read()
base64_encoded_data = base64.b64encode(binary_data)
base64_string = base64_encoded_data.decode('utf-8')
return base64_string
转录键入文本
与传统的 OCR 系统相比,使用 Claude 3 的优势在于,由于 Claude 3 强大的推理能力,您可以精确指定要转录的内容。对于此图像,让我们仅转录答案中的代码。
from IPython.display import Image
Image(filename='../images/transcribe/stack_overflow.png')
message_list = [
{
"role": 'user',
"content": [
{"type": "image", "source": {"type": "base64", "media_type": "image/png", "data": get_base64_encoded_image("../images/transcribe/stack_overflow.png")}},
{"type": "text", "text": "转录答案中的代码。只输出代码。"}
]
}
]
response = client.messages.create(
model=MODEL_NAME,
max_tokens=2048,
messages=message_list
)
print(response.content[0].text)
import os
import base64
image = 'test.jpg'
encoded_string = ""
with open(image, "rb") as image_file:
encoded_string = base64.b64encode(image_file.read())
file = encoded_string
转录手写文本
这很好,但让我们尝试一些更难的。Claude 3 在转录手写文本方面也非常出色。让我们要求 Claude 3 转录这个手写的处方便笺。
Image(filename='../images/transcribe/school_notes.png')
message_list = [
{
"role": 'user',
"content": [
{"type": "image", "source": {"type": "base64", "media_type": "image/png", "data": get_base64_encoded_image("../images/transcribe/school_notes.png")}},
{"type": "text", "text": "转录此文本。只输出文本,不要输出其他任何内容。"}
]
}
]
response = client.messages.create(
model=MODEL_NAME,
max_tokens=2048,
messages=message_list
)
print(response.content[0].text)
细胞组织层次
1) 细胞组合成组织。
2) 组织组合成器官。
3) 器官组合成器官系统
4) 器官系统组合成生物体
生物体 -> 能够独立进行生命过程的生物。
- 多细胞生物有专门化的细胞来执行特定功能。
> 这使它们更有效率,并且通常寿命更长。
组织 = 一组执行共同功能的相似细胞。
1) 动物由四种基本组织构成
> 神经组织、上皮组织、结缔组织和肌肉组织
2) 植物有三种组织
> 输导组织、保护组织和基本组织
转录表格
我们来尝试结合键入和手写文本?这在保险和报告表格等各种文档中很常见。
Image(filename='../images/transcribe/vehicle_form.jpg')
message_list = [
{
"role": 'user',
"content": [
{"type": "image", "source": {"type": "base64", "media_type": "image/jpeg", "data": get_base64_encoded_image("../images/transcribe/vehicle_form.jpg")}},
{"type": "text", "text": "准确转录此表格。"}
]
}
]
response = client.messages.create(
model=MODEL_NAME,
max_tokens=2048,
messages=message_list
)
print(response.content[0].text)
车辆事故报告表
使用此表格报告事故、伤害、医疗情况、犯罪活动、交通事件或学生行为事件。如果可能,应在事件发生后 24 小时内完成报告。
报告日期:2024 年 2 月 29 日
涉及人员
姓名:John Doe 地址:123 Main St
身份证明:■ 驾照号码 474921 □ 护照号码 ___________
□ 其他:____________________
电话:(678) 999-8212 电子邮件:john@gmail.com
事件
事件日期:2024 年 2 月 29 日 ■ 时间:9:01 ■ 上午 □ 下午
地点:第 2 街和第 3 街的拐角处
描述事件:红色汽车撞了蓝色汽车
_______________________________________________________
_______________________________________________________
伤害
是否有人受伤?□ 是 ■ 否
如果受伤,请描述伤势:________________________________________
_______________________________________________________________
_______________________________________________________________
证人
事件是否有证人?□ 是 ■ 否
如果是,请输入证人的姓名和联系信息:__________________________
_______________________________________________________________
_______________________________________________________________
第 1 页,共 2 页
复杂的文档问答
借助 Claude 3,我们可以超越简单的转录,询问有关非结构化文档中信息的具体问题。
Image(filename='../images/transcribe/page.jpeg')
message_list = [
{
"role": 'user',
"content": [
{"type": "image", "source": {"type": "base64", "media_type": "image/jpeg", "data": get_base64_encoded_image("../images/transcribe/page.jpeg")}},
{"type": "text", "text": "对于现场支持,最关键的问题是什么?"}
]
}
]
response = client.messages.create(
model=MODEL_NAME,
max_tokens=2048,
messages=message_list
)
print(response.content[0].text)
根据图像中显示的现场支持重要性层级金字塔,最关键的问题是产品质量/责任问题。这位于金字塔的最底层,表明它是现场支持处理的最关键或最重要的问题。
非结构化信息 -> JSON
让我们看看如何使用 Claude 将图像中的非结构化信息转换为结构化的 JSON 输出。
Image(filename='../images/transcribe/org_chart.jpeg')
message_list = [
{
"role": 'user',
"content": [
{"type": "image", "source": {"type": "base64", "media_type": "image/jpeg", "data": get_base64_encoded_image("../images/transcribe/org_chart.jpeg")}},
{"type": "text", "text": "将此组织结构图转换为 JSON,指示谁向谁汇报。只输出 JSON,不要输出其他任何内容。"}
]
}
]
response = client.messages.create(
model=MODEL_NAME,
max_tokens=2048,
messages=message_list
)
print(response.content[0].text)
{
"President": {
"name": "John Smith",
"directReports": [
{
"name": "Susan Jones",
"title": "VP Marketing",
"directReports": [
{
"name": "Alice Johnson",
"title": "Manager"
},
{
"name": "Tim Moore",
"title": "Manager"
}
]
},
{
"name": "Rachel Parker",
"title": "VP Sales",
"directReports": [
{
"name": "Michael Gross",
"title": "Manager"
},
{
"name": "Kim Dole",
"title": "Manager"
}
]
},
{
"name": "Tom Allen",
"title": "VP Production",
"directReports": [
{
"name": "Kathy Roberts",
"title": "Manager"
},
{
"name": "Betsy Foster",
"title": "Manager"
}
]
}
]
}
}