langparse 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. langparse/__init__.py +55 -0
  2. langparse/autoparser.py +25 -0
  3. langparse/chunkers/__init__.py +12 -0
  4. langparse/chunkers/blocks.py +151 -0
  5. langparse/chunkers/profiles.py +53 -0
  6. langparse/chunkers/registry.py +38 -0
  7. langparse/chunkers/semantic.py +242 -0
  8. langparse/chunkers/text.py +96 -0
  9. langparse/chunkers/workbook.py +942 -0
  10. langparse/cli.py +329 -0
  11. langparse/config.py +169 -0
  12. langparse/core/__init__.py +0 -0
  13. langparse/core/chunker.py +16 -0
  14. langparse/core/engine.py +37 -0
  15. langparse/core/parser.py +35 -0
  16. langparse/core/rendering.py +49 -0
  17. langparse/engines/__init__.py +1 -0
  18. langparse/engines/pdf/__init__.py +1 -0
  19. langparse/engines/pdf/deepdoc/__init__.py +55 -0
  20. langparse/engines/pdf/deepdoc/layout_recognizer.py +235 -0
  21. langparse/engines/pdf/deepdoc/model_loader.py +101 -0
  22. langparse/engines/pdf/deepdoc/ocr.py +641 -0
  23. langparse/engines/pdf/deepdoc/operators.py +684 -0
  24. langparse/engines/pdf/deepdoc/pdf_parser.py +1894 -0
  25. langparse/engines/pdf/deepdoc/postprocess.py +339 -0
  26. langparse/engines/pdf/deepdoc/recognizer.py +418 -0
  27. langparse/engines/pdf/deepdoc/rendering.py +210 -0
  28. langparse/engines/pdf/deepdoc/table_structure_recognizer.py +559 -0
  29. langparse/engines/pdf/deepdoc/tokenizer.py +30 -0
  30. langparse/engines/pdf/deepdoc/utils.py +36 -0
  31. langparse/engines/pdf/deepdoc_engine.py +164 -0
  32. langparse/engines/pdf/mineru.py +259 -0
  33. langparse/engines/pdf/mineru_client.py +318 -0
  34. langparse/engines/pdf/mineru_service.py +225 -0
  35. langparse/engines/pdf/ocr.py +101 -0
  36. langparse/engines/pdf/other.py +20 -0
  37. langparse/engines/pdf/simple.py +134 -0
  38. langparse/engines/pdf/vision_llm.py +27 -0
  39. langparse/errors.py +70 -0
  40. langparse/logging.py +27 -0
  41. langparse/metrics.py +129 -0
  42. langparse/parsers/__init__.py +0 -0
  43. langparse/parsers/docx_parser.py +114 -0
  44. langparse/parsers/excel_parser.py +220 -0
  45. langparse/parsers/markdown_parser.py +34 -0
  46. langparse/parsers/pdf_parser.py +31 -0
  47. langparse/parsers/registry.py +48 -0
  48. langparse/parsers/sniff.py +72 -0
  49. langparse/progress.py +77 -0
  50. langparse/py.typed +0 -0
  51. langparse/services/__init__.py +11 -0
  52. langparse/services/batch_service.py +339 -0
  53. langparse/services/benchmark_service.py +202 -0
  54. langparse/services/fidelity.py +154 -0
  55. langparse/services/output_paths.py +86 -0
  56. langparse/services/parse_service.py +523 -0
  57. langparse/services/quality.py +65 -0
  58. langparse/services/workbook_ambiguity_benchmark.py +563 -0
  59. langparse/services/workbook_quality_benchmark.py +230 -0
  60. langparse/types.py +97 -0
  61. langparse/workbooks/__init__.py +103 -0
  62. langparse/workbooks/adapters.py +474 -0
  63. langparse/workbooks/assembly.py +993 -0
  64. langparse/workbooks/blocks.py +209 -0
  65. langparse/workbooks/bundle-v1.schema.json +71 -0
  66. langparse/workbooks/bundle.py +341 -0
  67. langparse/workbooks/classification.py +393 -0
  68. langparse/workbooks/continuation.py +577 -0
  69. langparse/workbooks/evaluation/__init__.py +45 -0
  70. langparse/workbooks/evaluation/evaluator.py +381 -0
  71. langparse/workbooks/evaluation/schema.py +419 -0
  72. langparse/workbooks/labels.py +14 -0
  73. langparse/workbooks/lineage.py +117 -0
  74. langparse/workbooks/modeling/__init__.py +52 -0
  75. langparse/workbooks/modeling/cache.py +20 -0
  76. langparse/workbooks/modeling/config.py +87 -0
  77. langparse/workbooks/modeling/contract.py +628 -0
  78. langparse/workbooks/modeling/disambiguation.py +800 -0
  79. langparse/workbooks/modeling/openai_adapter.py +192 -0
  80. langparse/workbooks/modeling/policy.py +79 -0
  81. langparse/workbooks/modeling/ports.py +44 -0
  82. langparse/workbooks/modeling/pricing.py +17 -0
  83. langparse/workbooks/modeling/types.py +251 -0
  84. langparse/workbooks/objects.py +229 -0
  85. langparse/workbooks/quality/__init__.py +23 -0
  86. langparse/workbooks/quality/bundle.py +53 -0
  87. langparse/workbooks/quality/evaluator.py +266 -0
  88. langparse/workbooks/quality/facts.py +142 -0
  89. langparse/workbooks/quality/schema.py +462 -0
  90. langparse/workbooks/reference_types.py +73 -0
  91. langparse/workbooks/references.py +178 -0
  92. langparse/workbooks/regions.py +932 -0
  93. langparse/workbooks/rendering.py +222 -0
  94. langparse/workbooks/tables.py +477 -0
  95. langparse/workbooks/types.py +257 -0
  96. langparse-0.1.0.dist-info/METADATA +790 -0
  97. langparse-0.1.0.dist-info/RECORD +101 -0
  98. langparse-0.1.0.dist-info/WHEEL +5 -0
  99. langparse-0.1.0.dist-info/entry_points.txt +2 -0
  100. langparse-0.1.0.dist-info/licenses/LICENSE +192 -0
  101. langparse-0.1.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,257 @@
1
+ from __future__ import annotations
2
+
3
+ import hashlib
4
+ from dataclasses import dataclass, field
5
+ from typing import TYPE_CHECKING, Any
6
+
7
+ from langparse.types import ParsedStructure, StructuredData
8
+ from langparse.workbooks.reference_types import WorkbookReferenceFacts
9
+
10
+ if TYPE_CHECKING:
11
+ from langparse.workbooks.lineage import WorkbookLineage
12
+
13
+
14
+ def stable_id(prefix: str, *parts: str) -> str:
15
+ """Build a compact deterministic identifier from source identity parts."""
16
+
17
+ payload = "\x1f".join((prefix, *parts)).encode("utf-8")
18
+ digest = hashlib.sha256(payload).hexdigest()[:16]
19
+ return f"{prefix}_{digest}"
20
+
21
+
22
+ @dataclass(frozen=True)
23
+ class SourceRef:
24
+ sheet_name: str
25
+ range: str
26
+
27
+ @property
28
+ def key(self) -> str:
29
+ return f"{self.sheet_name}!{self.range}"
30
+
31
+
32
+ @dataclass(frozen=True)
33
+ class RegionAnchor:
34
+ kind: str
35
+ source_ref: SourceRef
36
+ name: str | None = None
37
+ scope: str = "workbook"
38
+
39
+
40
+ @dataclass
41
+ class CellSnapshot:
42
+ coordinate: str
43
+ raw_value: Any = None
44
+ display_value: str = ""
45
+ formula: str | None = None
46
+ cached_value: Any = None
47
+ data_type: str = ""
48
+ number_format: str = "General"
49
+ style_id: str = ""
50
+ merge_anchor: str | None = None
51
+ rowspan: int = 1
52
+ colspan: int = 1
53
+ hyperlink: str | None = None
54
+ comment: str | None = None
55
+ hidden: bool = False
56
+ visual_style_id: str = ""
57
+
58
+
59
+ @dataclass
60
+ class SheetSnapshot:
61
+ name: str
62
+ index: int
63
+ visibility: str = "visible"
64
+ used_range: str | None = None
65
+ print_area: list[str] = field(default_factory=list)
66
+ row_heights: dict[int, float] = field(default_factory=dict)
67
+ column_widths: dict[str, float] = field(default_factory=dict)
68
+ hidden_rows: list[int] = field(default_factory=list)
69
+ hidden_columns: list[str] = field(default_factory=list)
70
+ merged_ranges: list[str] = field(default_factory=list)
71
+ cells: dict[str, CellSnapshot] = field(default_factory=dict)
72
+ objects: list[StructuredData] = field(default_factory=list)
73
+ metadata: StructuredData = field(default_factory=dict)
74
+ region_anchors: list[RegionAnchor] = field(default_factory=list)
75
+
76
+
77
+ @dataclass
78
+ class WorkbookSnapshot:
79
+ source: str
80
+ filename: str
81
+ sheets: list[SheetSnapshot] = field(default_factory=list)
82
+ metadata: StructuredData = field(default_factory=dict)
83
+
84
+ reference_facts: WorkbookReferenceFacts = field(default_factory=WorkbookReferenceFacts)
85
+
86
+
87
+ @dataclass
88
+ class CandidateRegion:
89
+ source_ref: SourceRef
90
+ cell_refs: list[str] = field(default_factory=list)
91
+ kind: str = "unknown"
92
+ confidence: float = 1.0
93
+ features: StructuredData = field(default_factory=dict)
94
+ diagnostics: list[StructuredData] = field(default_factory=list)
95
+ reason_codes: list[str] = field(default_factory=list)
96
+
97
+
98
+ @dataclass
99
+ class HeaderColumn:
100
+ column_id: str
101
+ coordinate: str
102
+ path: list[str] = field(default_factory=list)
103
+ source_refs: list[SourceRef] = field(default_factory=list)
104
+ inferred_type: str = "unknown"
105
+ unit: str | None = None
106
+
107
+
108
+ @dataclass
109
+ class LogicalRow:
110
+ row_id: str
111
+ source_ref: SourceRef
112
+ role: str
113
+ values: list[Any] = field(default_factory=list)
114
+ source_cells: list[str] = field(default_factory=list)
115
+ section_path: list[str] = field(default_factory=list)
116
+ confidence: float = 1.0
117
+ metadata: StructuredData = field(default_factory=dict)
118
+
119
+
120
+ @dataclass
121
+ class TableFragment:
122
+ fragment_id: str
123
+ source_ref: SourceRef
124
+ page_number: int | None = None
125
+ total_pages: int | None = None
126
+ title_row_numbers: list[int] = field(default_factory=list)
127
+ context_row_numbers: list[int] = field(default_factory=list)
128
+ header_row_numbers: list[int] = field(default_factory=list)
129
+ confidence: float = 1.0
130
+ diagnostics: list[StructuredData] = field(default_factory=list)
131
+
132
+
133
+ @dataclass
134
+ class TableSection:
135
+ section_id: str
136
+ title: str
137
+ source_ref: SourceRef
138
+ row_ids: list[str] = field(default_factory=list)
139
+ parent_path: list[str] = field(default_factory=list)
140
+
141
+
142
+ @dataclass
143
+ class LogicalTable:
144
+ table_id: str
145
+ title: str = ""
146
+ context: list[str] = field(default_factory=list)
147
+ columns: list[HeaderColumn] = field(default_factory=list)
148
+ rows: list[LogicalRow] = field(default_factory=list)
149
+ fragments: list[TableFragment] = field(default_factory=list)
150
+ sections: list[TableSection] = field(default_factory=list)
151
+ source_refs: list[SourceRef] = field(default_factory=list)
152
+ confidence: float = 1.0
153
+ diagnostics: list[StructuredData] = field(default_factory=list)
154
+ continuation_id: str | None = None
155
+ continuation_role: str | None = None
156
+
157
+
158
+ @dataclass
159
+ class TableContinuation:
160
+ continuation_id: str
161
+ logical_table: LogicalTable
162
+ member_table_ids: list[str] = field(default_factory=list)
163
+ source_refs: list[SourceRef] = field(default_factory=list)
164
+ confidence: float = 1.0
165
+ reason_codes: list[str] = field(default_factory=list)
166
+
167
+
168
+ @dataclass
169
+ class TextLine:
170
+ text: str
171
+ source_refs: list[SourceRef] = field(default_factory=list)
172
+
173
+
174
+ @dataclass
175
+ class FormField:
176
+ field_id: str
177
+ label: str
178
+ value: Any = None
179
+ label_source_refs: list[SourceRef] = field(default_factory=list)
180
+ value_source_refs: list[SourceRef] = field(default_factory=list)
181
+ confidence: float = 1.0
182
+
183
+
184
+ @dataclass
185
+ class FormBlock:
186
+ form_id: str
187
+ title: str = ""
188
+ fields: list[FormField] = field(default_factory=list)
189
+ free_text: list[TextLine] = field(default_factory=list)
190
+ source_refs: list[SourceRef] = field(default_factory=list)
191
+ confidence: float = 1.0
192
+ diagnostics: list[StructuredData] = field(default_factory=list)
193
+
194
+
195
+ @dataclass
196
+ class MatrixHeader:
197
+ value: str
198
+ source_refs: list[SourceRef] = field(default_factory=list)
199
+
200
+
201
+ @dataclass
202
+ class MatrixBlock:
203
+ matrix_id: str
204
+ title: str = ""
205
+ row_headers: list[MatrixHeader] = field(default_factory=list)
206
+ column_headers: list[MatrixHeader] = field(default_factory=list)
207
+ values: list[list[Any]] = field(default_factory=list)
208
+ source_refs: list[SourceRef] = field(default_factory=list)
209
+ value_source_refs: list[list[SourceRef | None]] = field(default_factory=list)
210
+ confidence: float = 1.0
211
+ diagnostics: list[StructuredData] = field(default_factory=list)
212
+
213
+
214
+ @dataclass
215
+ class TextBlock:
216
+ text_id: str
217
+ lines: list[TextLine] = field(default_factory=list)
218
+ source_refs: list[SourceRef] = field(default_factory=list)
219
+ confidence: float = 1.0
220
+ diagnostics: list[StructuredData] = field(default_factory=list)
221
+
222
+
223
+ @dataclass
224
+ class WorkbookBlock:
225
+ block_id: str
226
+ kind: str
227
+ source_refs: list[SourceRef] = field(default_factory=list)
228
+ cell_refs: list[str] = field(default_factory=list)
229
+ confidence: float = 1.0
230
+ metadata: StructuredData = field(default_factory=dict)
231
+ diagnostics: list[StructuredData] = field(default_factory=list)
232
+ logical_table: LogicalTable | None = None
233
+ form: FormBlock | None = None
234
+ matrix: MatrixBlock | None = None
235
+ text: TextBlock | None = None
236
+
237
+
238
+ @dataclass
239
+ class SheetIR:
240
+ sheet_id: str
241
+ name: str
242
+ index: int
243
+ blocks: list[WorkbookBlock] = field(default_factory=list)
244
+ visibility: str = "visible"
245
+ metadata: StructuredData = field(default_factory=dict)
246
+
247
+
248
+ @dataclass
249
+ class WorkbookIR(ParsedStructure):
250
+ workbook_id: str
251
+ source: str
252
+ sheets: list[SheetIR] = field(default_factory=list)
253
+ filename: str = ""
254
+ snapshot: WorkbookSnapshot | None = None
255
+ metadata: StructuredData = field(default_factory=dict)
256
+ table_continuations: list[TableContinuation] = field(default_factory=list)
257
+ lineage: WorkbookLineage | None = None