import unittest from olmocr.bench.synth.mine_html_templates import extract_html_metadata class TestExtractHtmlMetadata(unittest.TestCase): def test_extract_metadata_portuguese_document(self): """Test metadata extraction from a Portuguese document with mixed content.""" html_content = """ Test Document
Header content here

Política de Metadados

Este é um documento de teste com texto em português.

Contém múltiplos parágrafos para simular conteúdo real.

Image placeholder 1

Mais texto após a imagem.

""" metadata = extract_html_metadata(html_content) # Check language extraction self.assertEqual(metadata['primary_language'], 'pt') # Check rotation values (always fixed) self.assertTrue(metadata['is_rotation_valid']) self.assertEqual(metadata['rotation_correction'], 0) # Check table/diagram detection # With 1 image (500 chars) and small text content, image ratio > 50% self.assertFalse(metadata['is_table']) self.assertTrue(metadata['is_diagram']) # Image estimate dominates def test_extract_metadata_table_heavy_document(self): """Test metadata extraction from a document that is mostly tables.""" html_content = """

Small intro text

Cell 1Cell 2Cell 3
Data AData BData C
More dataMore dataMore data
Even more dataEven more dataEven more data
Lots of dataLots of dataLots of data
Table contentTable contentTable content
Final rowFinal rowFinal row
""" metadata = extract_html_metadata(html_content) self.assertEqual(metadata['primary_language'], 'en') self.assertTrue(metadata['is_table']) # Should be True as >50% is table self.assertFalse(metadata['is_diagram']) def test_extract_metadata_image_heavy_document(self): """Test metadata extraction from a document that is mostly images.""" html_content = """

Brief text

Image 1
Image 2
Image 3
Image 4
Image 5
""" metadata = extract_html_metadata(html_content) self.assertEqual(metadata['primary_language'], 'es') self.assertFalse(metadata['is_table']) self.assertTrue(metadata['is_diagram']) # Should be True as >50% is images def test_extract_metadata_language_with_region(self): """Test that language codes with regions (e.g., pt-BR) are shortened.""" html_content = """

Texto em português brasileiro

""" metadata = extract_html_metadata(html_content) # Should convert pt-BR to pt self.assertEqual(metadata['primary_language'], 'pt') def test_extract_metadata_no_html_tag(self): """Test extraction when there's no html tag (defaults to 'en').""" html_content = """

Content without html tag

""" metadata = extract_html_metadata(html_content) self.assertEqual(metadata['primary_language'], 'en') # Should default to 'en' def test_extract_metadata_mixed_content(self): """Test a document with mixed content types.""" html_content = """ Política de Metadados para Livros e Capítulos de Livro UFPA
Biblioteca Central UFPA
LIVRO ABERTO portal do livro aberto da UFPA
SIBI/UFPA

Política de Metadados para Livros e Capítulos de Livro UFPA

Essa política de metadados possui o objetivo de garantir a consistência do trabalho executado no Portal do Livro Aberto. Dessa forma, foi desenvolvido com base no esquema de metadados do Dublin Core com adaptações para a realidade brasileira e local.

METADADOS VALOR REPETITIVO CONDIÇÃO
dc.type Tipo de documento Não Obrigatório
dc.title Título e subtítulo (se houver) Não Obrigatório
dc.title.alternative Título alternativo Sim Opcional
dc.creator Autor Sim Opcional
dc.creator.Lattes URL do currículo Lattes do autor Sim Opcional
dc.creator.ORCID ORCID do autor Sim Opcional
dc.description.affiliation Afiliação do autor Sim Opcional
dc.contributor.organizer Organizador Sim Opcional
dc.contributor.organizerLattes URL do currículo Lattes do organizador Sim Opcional
dc.contributor.organizerORCID ORCID do organizador Sim Opcional
dc.description.affiliationOrganizer Afiliação do organizador Sim Opcional
dc.contributor.coordinator Coordenador Sim Opcional
dc.contributor.coordinatorLattes URL do currículo Lattes do coordenador Sim Opcional
dc.contributor.coordinatorORCID ORCID do coordenador Sim Opcional
dc.contributor.affiliationCoordinator Afiliação do coordenador Sim Opcional
dc.contributor.editor Editor Sim Opcional
dc.contributor.editorLattes URL do currículo Lattes do editor Sim Opcional
dc.contributor.editorORCID ORCID do editor Sim Opcional
dc.description.affiliationEditor Afiliação do editor Sim Opcional
""" metadata = extract_html_metadata(html_content) self.assertEqual(metadata['primary_language'], 'pt') self.assertTrue(metadata['is_table']) self.assertFalse(metadata['is_diagram']) def test_extract_metadata_empty_body(self): """Test extraction with empty or minimal content.""" html_content = """ """ metadata = extract_html_metadata(html_content) self.assertEqual(metadata['primary_language'], 'de') self.assertFalse(metadata['is_table']) self.assertFalse(metadata['is_diagram']) self.assertTrue(metadata['is_rotation_valid']) self.assertEqual(metadata['rotation_correction'], 0) if __name__ == '__main__': unittest.main()