test_knowledge_chunking.py 1.2 KB

12345678910111213141516171819202122232425262728293031323334
  1. from zbt.domains.knowledge.chunking import DocumentChunker
  2. def test_chunker_preserves_short_paragraph_boundaries() -> None:
  3. chunker = DocumentChunker(max_chars=36, overlap_chars=8)
  4. chunks = chunker.split(
  5. "等待期为30天。\n\n意外伤害不受等待期限制。\n\n报销需提供发票和诊断证明。"
  6. )
  7. assert chunks == [
  8. "等待期为30天。",
  9. "意外伤害不受等待期限制。",
  10. "报销需提供发票和诊断证明。",
  11. ]
  12. assert all(len(chunk) <= 36 for chunk in chunks)
  13. def test_chunker_splits_long_paragraph_with_context_overlap() -> None:
  14. chunker = DocumentChunker(max_chars=24, overlap_chars=6)
  15. content = "第一条说明等待期规则,疾病医疗等待期为三十天。第二条说明意外伤害不受等待期限制。"
  16. chunks = chunker.split(content)
  17. assert len(chunks) >= 2
  18. assert all(len(chunk) <= 24 for chunk in chunks)
  19. assert chunks[0][-6:] == chunks[1][:6]
  20. assert "".join([chunks[0], *[chunk[6:] for chunk in chunks[1:]]]) == content
  21. def test_chunker_rejects_blank_document() -> None:
  22. chunker = DocumentChunker()
  23. assert chunker.split(" \n\n ") == []