S SmartDocs
系列: Ricky python 92 行 · 更新於 2026-03-15

test_debug.py

Ricky/RAG_project/test_debug.py

# test_debug.py
from processors.pdf_processor import process_pdfs
from processors.image_processor import process_images

print("=" * 60)
print("🔍 第一步:檢查 PDF 提取結果")
print("=" * 60)

pdf_docs = process_pdfs()

if len(pdf_docs) == 0:
    print("❌ 完全無提取到任何 PDF 內容!")
else:
    for doc in pdf_docs:
        source = doc.metadata.get('source', 'unknown')
        content = doc.page_content.strip()
        length = len(content)
        
        print(f"\n📄 檔案: {source}")
        print(f"   字元數: {length}")
        
        if length < 10:
            print(f"   ❌ 幾乎空白!呢個 PDF 可能係掃描圖片版")
        elif length < 50:
            print(f"   ⚠️ 內容極少,可能提取唔完整")
        else:
            print(f"   ✅ 有內容")
        
        # 顯示前 200 個字元
        preview = content[:200] if content else "(空白)"
        print(f"   預覽: {preview}")
        print("-" * 40)

print(f"\n📊 PDF 總共產生 {len(pdf_docs)} 個 chunks")


print("\n" + "=" * 60)
print("🔍 第二步:檢查圖片提取結果")
print("=" * 60)

try:
    img_docs = process_images()
    
    if len(img_docs) == 0:
        print("❌ 完全無提取到任何圖片內容!")
    else:
        for doc in img_docs:
            source = doc.metadata.get('source', 'unknown')
            content = doc.page_content.strip()
            length = len(content)
            
            print(f"\n🖼️ 圖片: {source}")
            print(f"   字元數: {length}")
            
            if length < 10:
                print(f"   ❌ 幾乎空白!OCR 提取失敗")
            else:
                print(f"   ✅ 有內容")
            
            preview = content[:200] if content else "(空白)"
            print(f"   預覽: {preview}")
            print("-" * 40)
    
    print(f"\n📊 圖片總共產生 {len(img_docs)} 個 documents")

except Exception as e:
    print(f"❌ 圖片處理出錯: {e}")


print("\n" + "=" * 60)
print("📋 診斷總結")
print("=" * 60)
print(f"PDF chunks 數量: {len(pdf_docs)}")

# 統計有幾多個 chunk 係空白或太短
empty_chunks = [d for d in pdf_docs if len(d.page_content.strip()) < 10]
short_chunks = [d for d in pdf_docs if 10 <= len(d.page_content.strip()) < 50]
good_chunks = [d for d in pdf_docs if len(d.page_content.strip()) >= 50]

print(f"  ❌ 空白/極短 (< 10字): {len(empty_chunks)} 個")
print(f"  ⚠️ 太短 (10-50字): {len(short_chunks)} 個")
print(f"  ✅ 正常 (> 50字): {len(good_chunks)} 個")

if len(empty_chunks) > len(good_chunks):
    print("\n🚨 結論: 大部分 PDF 提取失敗!")
    print("   你嘅 PDF 好大機會係掃描圖片版")
    print("   需要改用 OCR 方案 (pytesseract + pdf2image)")
elif len(good_chunks) > 0:
    print("\n✅ 結論: PDF 提取基本正常")
    print("   問題可能在 chunk 切割或搜索策略")
else:
    print("\n⚠️ 結論: 需要進一步檢查")

相關文章