(pdf_path: Path, references_start_page: int, max_pages: int)
| 40 | |
| 41 | |
| 42 | def _reference_lines_from_pdf(pdf_path: Path, references_start_page: int, max_pages: int) -> list[tuple[str, int]]: |
| 43 | if fitz is None or references_start_page < 1 or max_pages < 1: |
| 44 | return [] |
| 45 | doc = fitz.open(pdf_path) |
| 46 | try: |
| 47 | start_index = max(0, references_start_page - 1) |
| 48 | stop_index = min(len(doc), start_index + max_pages) |
| 49 | lines: list[tuple[str, int]] = [] |
| 50 | for page_index in range(start_index, stop_index): |
| 51 | page_number = page_index + 1 |
| 52 | for raw_line in doc[page_index].get_text("text").splitlines(): |
| 53 | line = normalize_whitespace(raw_line) |
| 54 | if not line: |
| 55 | continue |
| 56 | if line.lower() in {"references", "bibliography", "参考文献"}: |
| 57 | continue |
| 58 | lines.append((line, page_number)) |
| 59 | return lines |
| 60 | finally: |
| 61 | doc.close() |
| 62 | |
| 63 | |
| 64 | def _group_numbered_references(lines: list[tuple[str, int]]) -> list[tuple[str, int]]: |
no test coverage detected