OCR- ja dokumenttianalyysipromptit
Poimikaa tekstiä, taulukoita ja rakennetta dokumenttikuvista.
OCR- ja dokumenttianalyysipromptit on ilmainen Tekoälyn prompt engineering-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Tekoälyn prompt engineering-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Tekoälyn prompt engineering-kurssilla on yhteensä 4 oppituntia.
LLM-mallit asiakirjojen lukijoina
OCR (Optical Character Recognition) edellytti perinteisesti erikoisohjelmistoa tekstin poimimiseen kuvista. Näköön kykenevät LLM-mallit voivat nyt lukea kuvissa olevaa tekstiä ja myös ymmärtää sen sisällön – ne eivät ainoastaan poimi merkkejä, vaan jäsentävät myös rakennetta, taulukoita, käsialaa ja asiayhteyttä.
Yleisiä asiakirjojen analysointitehtäviä:
- Tekstin poimiminen skannatuista asiakirjoista
- Kuittien, laskujen ja lomakkeiden lukeminen
- Taulukoiden ja kaavioiden jäsentäminen
- Käsinkirjoitettujen muistiinpanojen puhtaaksikirjoittaminen
- Tekstillä painettujen tarrojen ja kylttien lukeminen
Perustason tekstinpoimintakehote
Yksinkertaiseen tekstin poimimiseen asiakirjakuvasta:
import anthropic, base64
client = anthropic.Anthropic(api_key='YOUR_API_KEY')
def extract_text(image_path, extraction_prompt):
with open(image_path, 'rb') as f:
img_b64 = base64.standard_b64encode(f.read()).decode('utf-8')
r = client.messages.create(
model='claude-opus-4-5', max_tokens=1000,
messages=[{'role': 'user', 'content': [
{'type': 'image', 'source': {'type': 'base64', 'media_type': 'image/jpeg', 'data': img_b64}},
{'type': 'text', 'text': extraction_prompt}
]}]
)
return r.content[0].text
# Basic extraction
basic_prompt = 'Extract all text from this document image exactly as it appears. Preserve line breaks.'
# Structure-preserving extraction
structured_prompt = 'Extract all text from this document image. Preserve: paragraph structure, line breaks, and any visible formatting. Do not add any text not present in the image.'
print('Text extraction functions defined.')Taulukon rakenteen säilyttäminen
Kun asiakirja sisältää taulukon, sen poimiminen pelkkänä tekstinä hävittää rakenteen. Käyttäkää kehotteita, joissa taulukkomuoto pyydetään säilyttämään eksplisiittisesti:
table_prompt = '''
Extract all text from this document image.
If the document contains any tables, preserve the table structure using markdown table format:
| Column 1 | Column 2 | Column 3 |
|----------|----------|----------|
| Value | Value | Value |
For any text outside tables, use plain text preserving paragraph structure.
Do not invent or infer any data not visible in the image.
'''
# For structured output:
table_json_prompt = '''
Extract the table from this image.
Return JSON:
{
"headers": ["column name"],
"rows": [["cell value", "cell value"]],
"caption": "table caption if present or null"
}
If a cell is empty or illegible, use null.
'''
print('Table extraction prompts defined.')Kuitin rivitietojen poiminta
Kuiteilla on tietty rakenne: otsake (myyjä), rivikohdat ja loppusummat. Kuittikohtainen kehote poimii tämän rakenteen luotettavasti:
import json
receipt_prompt = '''
Extract all information from this receipt image.
Return JSON:
{
"merchant": {
"name": str,
"address": str or null,
"phone": str or null
},
"transaction": {
"date": "YYYY-MM-DD or as written",
"time": "HH:MM or as written or null",
"receipt_number": str or null,
"payment_method": str or null
},
"items": [
{"description": str, "quantity": number or null, "unit_price": number or null, "total": number}
],
"subtotal": number or null,
"tax": number or null,
"tip": number or null,
"total": number,
"currency": "3-letter ISO code"
}
For any field not visible, use null. For numbers, use numeric type (not string).
'''
def extract_receipt(image_path):
text = extract_text(image_path, receipt_prompt)
return json.loads(text)
print('Receipt extraction function defined.')Käsinkirjoitetun muistiinpanon puhtaaksikirjoittaminen
Käsinkirjoitetun sisällön puhtaaksikirjoittamisessa kehotteissa on huomioitava haasteet, kuten epäselvät sanat, yliviivattu teksti ja lyhenteet:
handwriting_prompt = '''
Transcribe the handwritten text in this image as accurately as possible.
Handling rules:
- If a word is illegible, write [ILLEGIBLE]
- If a word is partially legible, write [PARTIAL: best_guess]
- If text is crossed out, include it with strikethrough notation: ~~crossed out text~~
- Preserve line breaks as they appear
- If there are arrows, circles, or annotations, note them in brackets: [arrow pointing right]
- Do not correct spelling or grammar
After transcription, estimate overall legibility: high (>90% readable) | medium (70-90%) | low (<70%)
Format:
TRANSCRIPTION:
[transcribed text here]
LEGIBILITY: [rating]
'''
print(handwriting_prompt)Lomakekenttien poiminta
Painetuissa lomakkeissa on nimettyjä kenttiä ja niihin syötettyjä arvoja. Lomakkeiden poimintakehote yhdistää nimet ja arvot:
form_prompt = '''
Extract all form fields and their values from this document image.
For each field:
- Field label: the printed label (e.g., "First Name:", "Date of Birth:")
- Field value: the filled-in value (handwritten or typed)
- Filled: whether the field has been filled in (true/false)
Return JSON:
{
"form_title": str or null,
"fields": [
{
"label": str,
"value": str or null,
"filled": true | false
}
],
"signature_present": true | false,
"date_signed": str or null
}
If the value is illegible, use "[ILLEGIBLE]".
If the field is blank, value should be null and filled should be false.
'''
print('Form field extraction prompt defined.')
print('Handles: printed forms, questionnaires, applications.')Asiakirjan luokittelu ennen poimintaa
Ketjuttakaa luokitteluvaihe ennen poimintaa, jotta kullekin asiakirjatyypille voidaan käyttää oikeaa poimintamallia:
import json
DOC_SCHEMAS = {
'receipt': receipt_prompt,
'form': form_prompt,
'table': table_json_prompt,
'letter': 'Extract all text preserving paragraph structure. Identify: sender, recipient, date, subject, body.',
'label': 'Extract all text from this label. Include: product name, ingredients/contents, weight, expiry date, barcode numbers.'
}
def classify_and_extract(image_path):
# Step 1: Classify document type
classify_prompt = 'What type of document is this? Return JSON: {"type": "receipt|form|table|letter|label|other", "confidence": "high|medium|low"}'
classification_text = extract_text(image_path, classify_prompt)
doc_type = json.loads(classification_text)['type']
# Step 2: Apply correct schema
schema = DOC_SCHEMAS.get(doc_type, 'Extract all visible text from this document.')
extracted = extract_text(image_path, schema)
return {'type': doc_type, 'data': extracted}
print('Document classify-then-extract pipeline defined.')Heikkolaatuisten kuvien käsittely
Kaikki asiakirjakuvat eivät ole selkeitä. Kehotteiden tulee käsitellä heikkolaatuisia kuvia hallitusti:
low_quality_prompt = '''
Extract text from this document image. The image may be low quality, blurry, or poorly lit.
Extraction guidelines:
- Extract all text you can read with reasonable confidence
- For unclear sections, use [UNCLEAR] as a placeholder
- For completely unreadable sections, use [UNREADABLE: approximately N words]
- Do not guess or hallucinate words you cannot see clearly
- Note image quality issues at the end: "Image quality: [good/fair/poor]. Issues: [description]"
Be conservative — it is better to mark something as unclear than to guess incorrectly.
'''
print(low_quality_prompt)
print('\nConservative approach: unclear beats hallucinated.')Monisivuisen asiakirjan yhteenveto
Kun monisivuinen asiakirja lähetetään useina kuvina, yhdistäkää sivukohtainen poiminta ja kokoava käsittelyvaihe:
def extract_multi_page_document(image_paths):
# Step 1: Extract text from each page
page_texts = []
for i, path in enumerate(image_paths):
page_text = extract_text(path, f'Extract all text from page {i+1} of this document. Preserve structure.')
page_texts.append(f'=== PAGE {i+1} ===\n{page_text}')
full_text = '\n\n'.join(page_texts)
# Step 2: Synthesize summary and key information
r = client.messages.create(
model='claude-opus-4-5', max_tokens=500,
messages=[{'role': 'user', 'content': f'''
Here is the extracted text from a {len(image_paths)}-page document:\n\n{full_text}\n\n
Provide:
1. Document type and title
2. 3-sentence summary
3. Key data points extracted
Return JSON: {{"type": str, "title": str, "summary": str, "key_data": [str]}}
'''}]
)
return json.loads(r.content[0].text)
print('Multi-page document pipeline defined.')OCR-poiminnan jälkeinen validointi
OCR-tulokset on validoitava ennen niiden käyttöä seuraavissa järjestelmissä. Yleisiä validointitarkistuksia:
import re
from datetime import datetime
def validate_receipt_extraction(data):
errors = []
# Validate total is present and numeric
if data.get('total') is None:
errors.append('total is missing')
elif not isinstance(data['total'], (int, float)):
errors.append(f'total is not numeric: {data["total"]}')
# Validate date format
if data.get('transaction', {}).get('date'):
date_str = data['transaction']['date']
try:
datetime.strptime(date_str, '%Y-%m-%d')
except ValueError:
errors.append(f'date format invalid: {date_str}')
# Validate line items total approximately equals subtotal
if data.get('items') and data.get('subtotal'):
items_total = sum(item.get('total', 0) for item in data['items'] if item.get('total'))
if abs(items_total - data['subtotal']) > 0.05:
errors.append(f'Items total {items_total} does not match subtotal {data["subtotal"]}')
return errors
print('Receipt validation function defined.')Jäsennellyn tiedon poiminta kaavioista ja kuvaajista
Asiakirjakuvien kaaviot ja kuvaajat sisältävät tietoa, joka jää perinteiseltä OCR:ltä piiloon mutta jonka näköön kykenevät LLM-mallit pystyvät lukemaan. Kaavion poimintakehotteessa mallia pyydetään lukemaan taustalla olevat data-arvot:
chart_prompt = '''
Extract the data from this chart or graph image.
Identify:
1. Chart type (bar, line, pie, scatter, table)
2. Title and axis labels
3. All data series names
4. All data points with their labels/values
5. Any notable trend or pattern
Return JSON:
{
"chart_type": str,
"title": str or null,
"x_axis_label": str or null,
"y_axis_label": str or null,
"data_series": [
{"name": str, "values": [{"label": str, "value": number}]}
],
"key_insight": str
}
If exact values are not readable, provide best estimates with a note.
'''
print(chart_prompt)Pikatarkistus
Miten käsinkirjoitetun sisällön kuvasta puhtaaksikirjoittamisessa tulisi toimia epäselvien sanojen kanssa?
OCR ja asiakirjojen analysointi – tärkeimmät opit
Näköön kykenevät LLM-mallit mahdollistavat monipuolisen asiakirjojen analysoinnin, joka ulottuu merkintunnistusta pidemmälle:
- Perustason poiminta: säilyttäkää rivinvaihdot ja kappalerakenne; määritelkää tämä eksplisiittisesti
- Taulukot: käyttäkää Markdown-taulukkomuotoa tai JSON-rivien ja otsakkeiden skeemaa rakenteen säilyttämiseksi
- Kuitit: käyttäkää erillistä skeemaa, jossa on kentät myyjälle, tuotteille ja loppusummille
- Käsiala: ohjeistakaa käyttämään merkintää [ILLEGIBLE] lukukelvottomassa ja [PARTIAL] osittain luettavassa tekstissä – älkää koskaan arvatko
- Lomakkeet: yhdistäkää nimike–arvo-parit ja sisällyttäkää kunkin kentän täytetty/täyttämätön-tila
- Luokitelkaa asiakirjan tyyppi ensin ja käyttäkää sen jälkeen asianmukaista poimintaskeemaa
- Validoikaa poimitut tiedot ohjelmallisesti: pakolliset kentät, numeeriset tyypit, päivämäärämuodot ja laskennalliset tarkistukset
- Heikkolaatuiset kuvat: varovainen poiminta on parempi kuin itsevarma hallusinointi
Opi Tekoälyn prompt engineering tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 53
- Oppitunnit
- 199
Usein kysytyt kysymykset
Onko oppitunti ”OCR- ja dokumenttianalyysipromptit” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Tekoälyn prompt engineering-oppimispolun 3 oppituntia, myös oppitunnin “OCR- ja dokumenttianalyysipromptit”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Tekoälyn prompt engineering-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”OCR- ja dokumenttianalyysipromptit”?
Poimikaa tekstiä, taulukoita ja rakennetta dokumenttikuvista. Harjoittelet Tekoälyn prompt engineering-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Tekoälyn prompt engineering-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Tekoälyn prompt engineering-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.
Kuinka kauan ”OCR- ja dokumenttianalyysipromptit”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Tekoälyn prompt engineering-oppitunnilla?
Kyllä. Jokainen Tekoälyn prompt engineering-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Kuvien kuvailu- ja kuvatekstipromptit
- Visuaalinen kysymys–vastaus
- Usean kuvan vertailupromptit
- OCR- ja dokumenttianalyysipromptit