OCR ve Belge Analizi İstemleri
Belge görüntülerinden metinleri, tabloları ve yapıyı çıkarın.
OCR ve Belge Analizi İstemleri, CoddyKit'te ücretsiz bir AI Prompt Engineering dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, AI Prompt Engineering öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. AI Prompt Engineering kursu toplamda 4 dersten oluşur.
Belge Okuyucuları Olarak LLM'ler
OCR (Optik Karakter Tanıma), görüntülerden metin çıkarmak için geleneksel olarak özel yazılımlar gerektiriyordu. Görsel LLM'ler artık görüntülerdeki metni okuyabilir ve içeriği anlayabilir — yalnızca karakterleri çıkarmakla kalmaz, yapıyı, tabloları, el yazısını ve bağlamı da ayrıştırabilir.
Yaygın belge analizi görevleri:
- Taranmış belgelerden metin çıkarma
- Makbuzları, faturaları ve formları okuma
- Tabloları ve grafiklerini ayrıştırma
- El yazısıyla yazılmış notları yazıya geçirme
- Basılı etiketleri ve tabelaları okuma
Temel Metin Çıkarma İstemi
Bir belge görüntüsünden basit metin çıkarma için:
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.')Tablo Yapısını Koruma
Bir belgede tablo bulunduğunda, tabloyu düz metin olarak çıkarmak yapıyı kaybettirir. Tablo biçimini açıkça koruyan istemler kullanın:
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.')Makbuz Kalemlerine Ayırma
Makbuzların belirli bir yapısı vardır — başlık (satıcı), satır kalemleri ve toplamlar. Makbuza özgü bir istem bu yapıyı güvenilir biçimde çıkarır:
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.')El Yazısıyla Yazılmış Notları Yazıya Geçirme
El yazısıyla yazılmış içeriği yazıya geçirmek, istemlerin zorlukları dikkate almasını gerektirir — okunamayan sözcükler, üzeri çizilmiş metinler ve kısaltmalar:
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)Form Alanlarını Çıkarma
Basılı formlarda etiketli alanlar ve girilmiş değerler bulunur. Form çıkarma istemi, etiketleri değerlerle eşleştirir:
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.')Çıkarmadan Önce Belge Sınıflandırma
Her belge türü için doğru çıkarma şemasını uygulamak üzere çıkarmadan önce bir sınıflandırma adımı ekleyin:
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.')Düşük Kaliteli Görüntüleri Ele Alma
Her belge görüntüsü net değildir. İstemler, kalitesi düşmüş görüntüleri uygun biçimde ele almalıdır:
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.')Çok Sayfalı Belge Özeti
Birden çok görüntü olarak gönderilen çok sayfalı belgelerde, sayfa sayfa çıkarmayı bir sentez adımıyla birleştirin:
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 Çıkarmasından Sonra Doğrulama
OCR çıktıları sonraki sistemlerde kullanılmadan önce doğrulanmalıdır. Yaygın doğrulama kontrolleri:
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.')Çizelgelerden ve Grafiklerden Yapılandırılmış Veri Çıkarma
Belge görüntülerindeki çizelgeler ve grafikler, geleneksel OCR için görünmez ancak görsel LLM'ler tarafından okunabilir veriler içerir. Bir çizelge çıkarma istemi, modelden altta yatan veri değerlerini okumasını ister:
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)Hızlı Kontrol
Bir görüntüdeki el yazısıyla yazılmış içerik yazıya geçirilirken okunamayan sözcükler için önerilen yaklaşım nedir?
OCR ve Belge Analizi — Önemli Noktalar
Görsel LLM'ler, karakter tanımanın ötesine geçen esnek belge analizi sağlar:
- Temel çıkarma: satır sonlarını ve paragraf yapısını koruyun; bunu açıkça belirtin
- Tablolar: yapıyı korumak için Markdown tablo biçimini veya JSON satırları/başlıkları şemasını kullanın
- Makbuzlar: satıcı, kalemler ve toplamlar alanlarını içeren özel bir şema kullanın
- El yazısı: okunamayan içerik için [ILLEGIBLE], kısmen okunabilen içerik için [PARTIAL] kullanılmasını belirtin — asla tahminde bulunmayın
- Formlar: etiket-değer çiftlerini eşleştirin; her alan için dolduruldu/doldurulmadı durumunu ekleyin
- Önce belge türünü sınıflandırın, ardından uygun çıkarma şemasını uygulayın
- Çıkarılan verileri program aracılığıyla doğrulayın: zorunlu alanlar, sayısal türler, tarih biçimleri ve matematiksel kontroller
- Düşük kaliteli görüntüler: temkinli çıkarım, kendinden emin uydurmadan daha iyidir
Yapay zeka eğitmeniyle AI Prompt Engineering öğren — ücretsiz
Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.
- Kurslar
- 53
- Dersler
- 199
Sıkça Sorulan Sorular
“OCR ve Belge Analizi İstemleri” dersi ücretsiz mi?
Evet — “OCR ve Belge Analizi İstemleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve AI Prompt Engineering kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. AI Prompt Engineering kursu toplamda 4 dersten oluşur.
“OCR ve Belge Analizi İstemleri” dersinde ne öğreneceğim?
Belge görüntülerinden metinleri, tabloları ve yapıyı çıkarın. AI Prompt Engineering ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
AI Prompt Engineering öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te AI Prompt Engineering, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“OCR ve Belge Analizi İstemleri” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu AI Prompt Engineering dersinde kod yazıp çalıştırabilir miyim?
Evet. Her AI Prompt Engineering dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Görüntü Açıklama ve Altyazı İstemleri
- Görsel Soru Yanıtlama
- Birden Çok Görüntüyü Karşılaştırma İstemleri
- OCR ve Belge Analizi İstemleri