While BLEU was originally designed for machine translation, it has become the de facto standard for evaluating any text generated from PDFs against a "ground truth" (perfect human-generated text).
Whether you are running Optical Character Recognition (OCR) on a scanned historical document, using a Large Language Model (LLM) to summarize a contract, or translating a French PDF into English, you need a ruler to measure success. Enter (Bilingual Evaluation Understudy). bleu pdf
from nltk.translate.bleu_score import sentence_bleu, SmoothingFunction reference = [["The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog"]] The "Hypothesis" (What your OCR/LLM extracted from the PDF) hypothesis = ["The", "quick", "brown", "fox", "jumps", "over", "the", "dog"] Apply smoothing to handle missing n-grams smoother = SmoothingFunction().method1 Calculate BLEU (using 1-gram to 4-grams) score = sentence_bleu(reference, hypothesis, smoothing_function=smoother) print(f"BLEU Score: {score:.2f}") # Output: ~0.82 While BLEU was originally designed for machine translation,