104 lines
3.2 KiB
Python
104 lines
3.2 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Test script to validate PDF extraction improvements.
|
|
Tests the enhanced extraction logic with various edge cases.
|
|
"""
|
|
|
|
import os
|
|
import sys
|
|
import glob
|
|
from pdf_renamer import extract_names_from_pdf, analyze_failed_extractions
|
|
|
|
def test_pdf_extraction():
|
|
"""Test PDF extraction on all PDFs in the current directory."""
|
|
pdf_files = glob.glob('*.pdf')
|
|
|
|
if not pdf_files:
|
|
print("No PDF files found in current directory.")
|
|
return
|
|
|
|
print(f"Testing extraction on {len(pdf_files)} PDF files...\n")
|
|
|
|
success_count = 0
|
|
failed_files = []
|
|
|
|
for pdf_file in pdf_files:
|
|
print(f"Testing: {pdf_file}")
|
|
result = extract_names_from_pdf(pdf_file)
|
|
|
|
if 'error' in result:
|
|
print(f" ❌ FAILED: {result['error']}")
|
|
failed_files.append(pdf_file)
|
|
else:
|
|
print(f" ✅ SUCCESS: {result['filename']}")
|
|
print(f" Name: {result['first_name']} {result['last_name']}")
|
|
print(f" Grade: {result['grade']}, School: {result['school']}, Gender: {result['gender']}")
|
|
success_count += 1
|
|
|
|
print()
|
|
|
|
print(f"Results: {success_count}/{len(pdf_files)} PDFs extracted successfully")
|
|
|
|
if failed_files:
|
|
print(f"\nFailed files: {', '.join(failed_files)}")
|
|
|
|
# Check for failed extraction log
|
|
log_path = 'failed_extractions.log'
|
|
if os.path.exists(log_path):
|
|
print("\nAnalyzing failed extractions...")
|
|
suggestions = analyze_failed_extractions(log_path)
|
|
print("Suggestions for improvement:")
|
|
print(suggestions)
|
|
else:
|
|
print("No failed extraction log found.")
|
|
|
|
return success_count == len(pdf_files)
|
|
|
|
def test_edge_cases():
|
|
"""Test various edge cases that might cause issues."""
|
|
print("Testing edge cases...\n")
|
|
|
|
# Test cases with different concatenation patterns
|
|
test_cases = [
|
|
# Test multi-part names
|
|
"John Michael Smith",
|
|
# Test different school formats
|
|
"St. Mary's Catholic School",
|
|
"Liberty Christian Academy",
|
|
# Test grade variations
|
|
"Grade 9", "9th Grade", "K", "12",
|
|
# Test gender variations
|
|
"Male", "Female", "M", "F", "Boy", "Girl"
|
|
]
|
|
|
|
from pdf_renamer import extract_student_info_from_text
|
|
|
|
for test_case in test_cases:
|
|
print(f"Testing edge case: '{test_case}'")
|
|
result = extract_student_info_from_text(test_case)
|
|
if result:
|
|
print(f" ✅ Extracted: {result}")
|
|
else:
|
|
print(" ❌ No extraction")
|
|
print()
|
|
|
|
if __name__ == "__main__":
|
|
print("PDF Extraction Validation Test")
|
|
print("=" * 40)
|
|
|
|
# Test actual PDFs
|
|
pdf_success = test_pdf_extraction()
|
|
|
|
print("\n" + "=" * 40)
|
|
|
|
# Test edge cases
|
|
test_edge_cases()
|
|
|
|
print("\n" + "=" * 40)
|
|
if pdf_success:
|
|
print("✅ All PDF extractions successful!")
|
|
else:
|
|
print("❌ Some PDF extractions failed. Check failed_extractions.log for details.")
|
|
|
|
print("\nTo analyze failed extractions in detail, run:")
|
|
print('python -c "from pdf_renamer import analyze_failed_extractions; print(analyze_failed_extractions(\'failed_extractions.log\'))"') |