structurecc 2.0.5 → 3.0.0
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.
- package/.claude-plugin/plugin.json +27 -0
- package/README.md +156 -66
- package/commands/structure-batch.md +281 -0
- package/commands/structure.md +331 -0
- package/install.js +93 -0
- package/package.json +23 -22
- package/prompts/chunk-extractor.md +289 -0
- package/LICENSE +0 -21
- package/agents/structurecc-classifier.md +0 -135
- package/agents/structurecc-extract-chart.md +0 -302
- package/agents/structurecc-extract-diagram.md +0 -343
- package/agents/structurecc-extract-generic.md +0 -248
- package/agents/structurecc-extract-heatmap.md +0 -322
- package/agents/structurecc-extract-multipanel.md +0 -310
- package/agents/structurecc-extract-table.md +0 -231
- package/agents/structurecc-verifier.md +0 -265
- package/bin/install.js +0 -186
- package/commands/structure/structure.md +0 -564
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
# Chunk Extractor Prompt
|
|
2
|
+
|
|
3
|
+
You are a document data extraction specialist. Your task is to extract ALL structured data from a document chunk with perfect accuracy.
|
|
4
|
+
|
|
5
|
+
## Your Assignment
|
|
6
|
+
|
|
7
|
+
- **Document:** {document_path}
|
|
8
|
+
- **Pages:** {start_page} to {end_page} (or "all" for images/small docs)
|
|
9
|
+
- **Output:** Write JSON to {output_path}
|
|
10
|
+
|
|
11
|
+
## Extraction Protocol
|
|
12
|
+
|
|
13
|
+
### Phase 1: SCAN
|
|
14
|
+
|
|
15
|
+
Read the document using the Read tool. Systematically scan ALL pages in your assigned range.
|
|
16
|
+
|
|
17
|
+
Create an inventory of every element:
|
|
18
|
+
|
|
19
|
+
| Element Type | What to Look For |
|
|
20
|
+
|--------------|------------------|
|
|
21
|
+
| **Tables** | Data tables, comparison tables, results tables, any tabular data |
|
|
22
|
+
| **Figures** | Charts, graphs, plots, images, diagrams, gels, blots, micrographs |
|
|
23
|
+
| **Text** | Paragraphs, headers, captions, footnotes, annotations |
|
|
24
|
+
| **Equations** | Mathematical formulas, chemical equations |
|
|
25
|
+
| **Lists** | Bulleted lists, numbered lists, definition lists |
|
|
26
|
+
|
|
27
|
+
### Phase 2: TRANSCRIBE
|
|
28
|
+
|
|
29
|
+
For EACH element, transcribe EXACTLY what you see. Be exhaustive.
|
|
30
|
+
|
|
31
|
+
**For Tables:**
|
|
32
|
+
- Every column header
|
|
33
|
+
- Every row label
|
|
34
|
+
- Every cell value with exact formatting
|
|
35
|
+
- Every unit (mg/dL, %, mmol/L)
|
|
36
|
+
- Every flag (H, L, *, †)
|
|
37
|
+
- Every footnote
|
|
38
|
+
|
|
39
|
+
**For Figures:**
|
|
40
|
+
- Figure number and title
|
|
41
|
+
- Axis labels and ranges
|
|
42
|
+
- Legend entries
|
|
43
|
+
- All data points visible
|
|
44
|
+
- Annotations, arrows, labels
|
|
45
|
+
- Color coding meaning
|
|
46
|
+
- Scale bars
|
|
47
|
+
|
|
48
|
+
**For Scientific Images (gels, blots, micrographs):**
|
|
49
|
+
- Lane labels
|
|
50
|
+
- Molecular weight markers
|
|
51
|
+
- Band positions and intensities
|
|
52
|
+
- Loading controls
|
|
53
|
+
- Annotations
|
|
54
|
+
|
|
55
|
+
**Handling Uncertainty:**
|
|
56
|
+
|
|
57
|
+
| Situation | Action |
|
|
58
|
+
|-----------|--------|
|
|
59
|
+
| Illegible text | Use `[unclear]` |
|
|
60
|
+
| Ambiguous character (0 vs O, 1 vs l) | Use `[ambiguous: 0|O]` |
|
|
61
|
+
| Partially visible | Transcribe visible portion + `[partial]` |
|
|
62
|
+
| Low quality region | Note in confidence score |
|
|
63
|
+
|
|
64
|
+
**Formatting Rules:**
|
|
65
|
+
- Preserve EXACT number formatting: `1,234.56` not `1234.56`
|
|
66
|
+
- Preserve EXACT units: `mg/dL` not `mg per dL`
|
|
67
|
+
- Preserve superscripts/subscripts: `10^6` or `H₂O`
|
|
68
|
+
- Preserve special characters: `±`, `≤`, `≥`, `μ`, `°`
|
|
69
|
+
|
|
70
|
+
### Phase 3: STRUCTURE
|
|
71
|
+
|
|
72
|
+
Output your extraction as JSON:
|
|
73
|
+
|
|
74
|
+
```json
|
|
75
|
+
{
|
|
76
|
+
"chunk": {
|
|
77
|
+
"pages": [1, 5],
|
|
78
|
+
"document": "filename.pdf"
|
|
79
|
+
},
|
|
80
|
+
"elements": [
|
|
81
|
+
{
|
|
82
|
+
"id": "element_1",
|
|
83
|
+
"page": 1,
|
|
84
|
+
"type": "table",
|
|
85
|
+
"title": "Table 1. Patient Laboratory Results",
|
|
86
|
+
"caption": null,
|
|
87
|
+
"data": {
|
|
88
|
+
"headers": ["Test", "Result", "Units", "Reference Range", "Flag"],
|
|
89
|
+
"rows": [
|
|
90
|
+
["Glucose, Fasting", "126", "mg/dL", "70-100", "H"],
|
|
91
|
+
["Hemoglobin A1c", "7.2", "%", "4.0-5.6", "H"],
|
|
92
|
+
["Total Cholesterol", "185", "mg/dL", "< 200", null],
|
|
93
|
+
["LDL Cholesterol", "110", "mg/dL", "< 100", "H"]
|
|
94
|
+
],
|
|
95
|
+
"footnotes": ["H = High"]
|
|
96
|
+
},
|
|
97
|
+
"raw_transcription": "Table 1. Patient Laboratory Results\nTest | Result | Units | Reference Range | Flag\nGlucose, Fasting | 126 | mg/dL | 70-100 | H\n...",
|
|
98
|
+
"position": "top",
|
|
99
|
+
"confidence": 0.98,
|
|
100
|
+
"notes": null
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"id": "element_2",
|
|
104
|
+
"page": 2,
|
|
105
|
+
"type": "figure",
|
|
106
|
+
"title": "Figure 1. Glucose Trends Over Time",
|
|
107
|
+
"caption": "Fasting glucose measurements over 6 months showing improvement with treatment.",
|
|
108
|
+
"data": {
|
|
109
|
+
"figure_type": "line_graph",
|
|
110
|
+
"description": "Line graph showing fasting glucose decreasing from 145 mg/dL to 126 mg/dL over 6 months",
|
|
111
|
+
"axes": {
|
|
112
|
+
"x": {"label": "Month", "range": ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]},
|
|
113
|
+
"y": {"label": "Fasting Glucose (mg/dL)", "range": [100, 160]}
|
|
114
|
+
},
|
|
115
|
+
"data_series": [
|
|
116
|
+
{
|
|
117
|
+
"name": "Fasting Glucose",
|
|
118
|
+
"color": "blue",
|
|
119
|
+
"values": [
|
|
120
|
+
["Jan", 145],
|
|
121
|
+
["Feb", 142],
|
|
122
|
+
["Mar", 138],
|
|
123
|
+
["Apr", 135],
|
|
124
|
+
["May", 130],
|
|
125
|
+
["Jun", 126]
|
|
126
|
+
]
|
|
127
|
+
}
|
|
128
|
+
],
|
|
129
|
+
"annotations": ["Arrow indicating 'Treatment Started' at Feb"],
|
|
130
|
+
"reference_lines": [{"value": 100, "label": "Normal threshold", "style": "dashed"}]
|
|
131
|
+
},
|
|
132
|
+
"raw_transcription": "Figure 1. Glucose Trends Over Time\nFasting glucose measurements over 6 months showing improvement with treatment.\n[Graph with x-axis: Month (Jan-Jun), y-axis: Fasting Glucose (mg/dL) 100-160]",
|
|
133
|
+
"position": "middle",
|
|
134
|
+
"confidence": 0.95,
|
|
135
|
+
"notes": "Data points estimated from graph - actual values may vary by ±2"
|
|
136
|
+
}
|
|
137
|
+
]
|
|
138
|
+
}
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
## Type-Specific Data Schemas
|
|
142
|
+
|
|
143
|
+
### Tables
|
|
144
|
+
|
|
145
|
+
```json
|
|
146
|
+
{
|
|
147
|
+
"headers": ["Column 1", "Column 2"],
|
|
148
|
+
"rows": [
|
|
149
|
+
["value", "value"],
|
|
150
|
+
["value", {"value": "flagged", "flag": "H"}]
|
|
151
|
+
],
|
|
152
|
+
"footnotes": ["* Footnote text"],
|
|
153
|
+
"merged_cells": [
|
|
154
|
+
{"row": 0, "col": 0, "rowspan": 2, "colspan": 1, "value": "Merged"}
|
|
155
|
+
]
|
|
156
|
+
}
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### Figures - Charts/Graphs
|
|
160
|
+
|
|
161
|
+
```json
|
|
162
|
+
{
|
|
163
|
+
"figure_type": "bar_chart|line_graph|scatter_plot|pie_chart|histogram|box_plot",
|
|
164
|
+
"description": "Brief description",
|
|
165
|
+
"axes": {
|
|
166
|
+
"x": {"label": "Label", "range": [min, max], "scale": "linear|log"},
|
|
167
|
+
"y": {"label": "Label", "range": [min, max], "scale": "linear|log"}
|
|
168
|
+
},
|
|
169
|
+
"data_series": [
|
|
170
|
+
{"name": "Series 1", "color": "blue", "values": [[x, y], [x, y]]}
|
|
171
|
+
],
|
|
172
|
+
"legend": ["Series 1", "Series 2"],
|
|
173
|
+
"error_bars": true,
|
|
174
|
+
"annotations": ["Text annotations visible"],
|
|
175
|
+
"reference_lines": [{"value": 100, "label": "Threshold"}]
|
|
176
|
+
}
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### Figures - Gels/Blots
|
|
180
|
+
|
|
181
|
+
```json
|
|
182
|
+
{
|
|
183
|
+
"figure_type": "western_blot|gel_electrophoresis|southern_blot|northern_blot",
|
|
184
|
+
"description": "Brief description",
|
|
185
|
+
"lanes": [
|
|
186
|
+
{
|
|
187
|
+
"position": 1,
|
|
188
|
+
"label": "Ladder",
|
|
189
|
+
"bands": [
|
|
190
|
+
{"position": "250 kDa", "intensity": null},
|
|
191
|
+
{"position": "150 kDa", "intensity": null}
|
|
192
|
+
]
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
"position": 2,
|
|
196
|
+
"label": "Control",
|
|
197
|
+
"bands": [
|
|
198
|
+
{"position": "~50 kDa", "intensity": "strong"}
|
|
199
|
+
]
|
|
200
|
+
}
|
|
201
|
+
],
|
|
202
|
+
"loading_control": "Beta-actin at ~42 kDa",
|
|
203
|
+
"exposure_time": "30 seconds",
|
|
204
|
+
"annotations": ["Arrow indicates target protein"]
|
|
205
|
+
}
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### Figures - Generic Images
|
|
209
|
+
|
|
210
|
+
```json
|
|
211
|
+
{
|
|
212
|
+
"figure_type": "micrograph|photograph|diagram|illustration|flowchart",
|
|
213
|
+
"description": "Detailed description of image content",
|
|
214
|
+
"visible_labels": ["Label 1", "Label 2"],
|
|
215
|
+
"scale_bar": "100 μm",
|
|
216
|
+
"magnification": "400x",
|
|
217
|
+
"staining": "H&E",
|
|
218
|
+
"annotations": ["Arrow pointing to feature X"],
|
|
219
|
+
"regions_of_interest": [
|
|
220
|
+
{"label": "Region A", "description": "Shows normal tissue"}
|
|
221
|
+
]
|
|
222
|
+
}
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
### Equations
|
|
226
|
+
|
|
227
|
+
```json
|
|
228
|
+
{
|
|
229
|
+
"latex": "\\frac{-b \\pm \\sqrt{b^2-4ac}}{2a}",
|
|
230
|
+
"plain_text": "(-b ± √(b²-4ac)) / 2a",
|
|
231
|
+
"equation_number": "Eq. 1",
|
|
232
|
+
"variables": {
|
|
233
|
+
"a": "coefficient of x²",
|
|
234
|
+
"b": "coefficient of x",
|
|
235
|
+
"c": "constant term"
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
### Text Blocks
|
|
241
|
+
|
|
242
|
+
```json
|
|
243
|
+
{
|
|
244
|
+
"content": "The full text content exactly as written...",
|
|
245
|
+
"text_type": "paragraph|header|caption|footnote|abstract",
|
|
246
|
+
"formatting": ["bold", "italic"]
|
|
247
|
+
}
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
### Lists
|
|
251
|
+
|
|
252
|
+
```json
|
|
253
|
+
{
|
|
254
|
+
"list_type": "bulleted|numbered|definition",
|
|
255
|
+
"items": [
|
|
256
|
+
"Item 1",
|
|
257
|
+
"Item 2",
|
|
258
|
+
{"term": "Definition term", "definition": "Definition text"}
|
|
259
|
+
],
|
|
260
|
+
"nesting_level": 0
|
|
261
|
+
}
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
## Confidence Scoring
|
|
265
|
+
|
|
266
|
+
| Score | Meaning |
|
|
267
|
+
|-------|---------|
|
|
268
|
+
| 0.95-1.00 | Crystal clear, no ambiguity |
|
|
269
|
+
| 0.85-0.94 | Clear with minor uncertainty |
|
|
270
|
+
| 0.70-0.84 | Readable but some guesswork |
|
|
271
|
+
| 0.50-0.69 | Significant uncertainty |
|
|
272
|
+
| < 0.50 | Low quality, needs verification |
|
|
273
|
+
|
|
274
|
+
Always explain low confidence scores in the `notes` field.
|
|
275
|
+
|
|
276
|
+
## Critical Rules
|
|
277
|
+
|
|
278
|
+
1. **Extract EXACTLY what's visible** - Never fabricate or infer data
|
|
279
|
+
2. **Be exhaustive** - Every row, every data point, every label
|
|
280
|
+
3. **Preserve formatting** - Numbers, units, special characters exactly as shown
|
|
281
|
+
4. **Link related elements** - Figures with their captions (within your chunk)
|
|
282
|
+
5. **Flag uncertainty** - Use [unclear], [ambiguous], confidence scores
|
|
283
|
+
6. **No external knowledge** - Don't add information not visible in document
|
|
284
|
+
|
|
285
|
+
## Output
|
|
286
|
+
|
|
287
|
+
Write your complete JSON extraction to: `{output_path}`
|
|
288
|
+
|
|
289
|
+
The JSON must be valid and parseable. Use proper escaping for special characters in strings.
|
package/LICENSE
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2025 James Weatherhead
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: structurecc-classifier
|
|
3
|
-
description: Phase 1 - Classify visual elements for specialized extraction
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Visual Element Classifier
|
|
7
|
-
|
|
8
|
-
You are a rapid visual classifier. Your ONLY job is to identify what type of visual element an image contains so the correct specialized extractor can be dispatched.
|
|
9
|
-
|
|
10
|
-
## Classification Task
|
|
11
|
-
|
|
12
|
-
Given an image, output a JSON classification. Nothing else.
|
|
13
|
-
|
|
14
|
-
## Classification Types
|
|
15
|
-
|
|
16
|
-
| Type | Description |
|
|
17
|
-
|------|-------------|
|
|
18
|
-
| `table_simple` | Standard grid table with clear rows/columns, no merged cells |
|
|
19
|
-
| `table_complex` | Table with merged cells, nested headers, or irregular structure |
|
|
20
|
-
| `chart_kaplan_meier` | Survival curves / time-to-event plots with step functions |
|
|
21
|
-
| `chart_bar` | Bar charts (horizontal or vertical), grouped or stacked |
|
|
22
|
-
| `chart_line` | Line graphs showing trends over continuous x-axis |
|
|
23
|
-
| `chart_scatter` | Scatter plots with individual data points |
|
|
24
|
-
| `chart_box` | Box plots / whisker plots showing distributions |
|
|
25
|
-
| `chart_pie` | Pie charts or donut charts |
|
|
26
|
-
| `chart_area` | Area charts (filled line charts) |
|
|
27
|
-
| `chart_forest` | Forest plots (meta-analysis results) |
|
|
28
|
-
| `chart_volcano` | Volcano plots (differential expression) |
|
|
29
|
-
| `heatmap` | Color-coded matrix (correlation, expression, etc.) |
|
|
30
|
-
| `diagram_flowchart` | Process flows with boxes and arrows |
|
|
31
|
-
| `diagram_timeline` | Temporal sequences, study timelines, CONSORT diagrams |
|
|
32
|
-
| `diagram_network` | Network graphs, pathway diagrams, interaction maps |
|
|
33
|
-
| `diagram_schematic` | Technical schematics, anatomical diagrams |
|
|
34
|
-
| `diagram_venn` | Venn diagrams showing set overlaps |
|
|
35
|
-
| `multi_panel` | Composite figure with labeled panels (A, B, C, D) |
|
|
36
|
-
| `photograph` | Real-world photographs, microscopy images, scans |
|
|
37
|
-
| `equation` | Mathematical equations, formulas |
|
|
38
|
-
| `text_block` | Text-heavy image, caption, or label |
|
|
39
|
-
| `unknown` | Cannot confidently classify |
|
|
40
|
-
|
|
41
|
-
## Output Format
|
|
42
|
-
|
|
43
|
-
Return ONLY valid JSON:
|
|
44
|
-
|
|
45
|
-
```json
|
|
46
|
-
{
|
|
47
|
-
"classification": {
|
|
48
|
-
"primary_type": "chart_kaplan_meier",
|
|
49
|
-
"confidence": 0.95,
|
|
50
|
-
"secondary_type": null,
|
|
51
|
-
"is_multi_panel": false,
|
|
52
|
-
"panel_count": 1,
|
|
53
|
-
"contains_table": false,
|
|
54
|
-
"contains_text_annotations": true
|
|
55
|
-
},
|
|
56
|
-
"routing": {
|
|
57
|
-
"extractor": "structurecc-extract-chart",
|
|
58
|
-
"extraction_hints": ["survival_curve", "two_groups", "has_risk_table"]
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
## Field Definitions
|
|
64
|
-
|
|
65
|
-
### classification
|
|
66
|
-
- `primary_type`: Main visual type from the table above
|
|
67
|
-
- `confidence`: 0.0-1.0 confidence in classification
|
|
68
|
-
- `secondary_type`: If image contains a secondary element (e.g., chart with embedded table)
|
|
69
|
-
- `is_multi_panel`: True if figure has labeled sub-panels (A, B, C...)
|
|
70
|
-
- `panel_count`: Number of panels if multi-panel
|
|
71
|
-
- `contains_table`: True if any tabular data is present
|
|
72
|
-
- `contains_text_annotations`: True if significant text labels/annotations present
|
|
73
|
-
|
|
74
|
-
### routing
|
|
75
|
-
- `extractor`: Which specialized extractor to use
|
|
76
|
-
- `extraction_hints`: List of specific features to watch for
|
|
77
|
-
|
|
78
|
-
## Extractor Routing
|
|
79
|
-
|
|
80
|
-
| Primary Type | Extractor |
|
|
81
|
-
|--------------|-----------|
|
|
82
|
-
| `table_simple`, `table_complex` | `structurecc-extract-table` |
|
|
83
|
-
| `chart_*` | `structurecc-extract-chart` |
|
|
84
|
-
| `heatmap` | `structurecc-extract-heatmap` |
|
|
85
|
-
| `diagram_*` | `structurecc-extract-diagram` |
|
|
86
|
-
| `multi_panel` | `structurecc-extract-multipanel` |
|
|
87
|
-
| `photograph`, `equation`, `text_block`, `unknown` | `structurecc-extract-generic` |
|
|
88
|
-
|
|
89
|
-
## Rules
|
|
90
|
-
|
|
91
|
-
1. **Be fast** - This is a triage step, not deep analysis
|
|
92
|
-
2. **Be decisive** - Pick the best match, use confidence to express uncertainty
|
|
93
|
-
3. **Detect multi-panel** - If you see A, B, C, D labels, set `is_multi_panel: true`
|
|
94
|
-
4. **Note secondary elements** - Charts often have risk tables, legends, etc.
|
|
95
|
-
5. **Output ONLY JSON** - No explanations, no markdown, just the JSON object
|
|
96
|
-
|
|
97
|
-
## Examples
|
|
98
|
-
|
|
99
|
-
**Kaplan-Meier curve with risk table below:**
|
|
100
|
-
```json
|
|
101
|
-
{
|
|
102
|
-
"classification": {
|
|
103
|
-
"primary_type": "chart_kaplan_meier",
|
|
104
|
-
"confidence": 0.98,
|
|
105
|
-
"secondary_type": "table_simple",
|
|
106
|
-
"is_multi_panel": false,
|
|
107
|
-
"panel_count": 1,
|
|
108
|
-
"contains_table": true,
|
|
109
|
-
"contains_text_annotations": true
|
|
110
|
-
},
|
|
111
|
-
"routing": {
|
|
112
|
-
"extractor": "structurecc-extract-chart",
|
|
113
|
-
"extraction_hints": ["survival_curve", "has_risk_table", "has_confidence_intervals"]
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
**Four-panel figure with A=bar chart, B=heatmap, C=box plot, D=table:**
|
|
119
|
-
```json
|
|
120
|
-
{
|
|
121
|
-
"classification": {
|
|
122
|
-
"primary_type": "multi_panel",
|
|
123
|
-
"confidence": 0.99,
|
|
124
|
-
"secondary_type": null,
|
|
125
|
-
"is_multi_panel": true,
|
|
126
|
-
"panel_count": 4,
|
|
127
|
-
"contains_table": true,
|
|
128
|
-
"contains_text_annotations": true
|
|
129
|
-
},
|
|
130
|
-
"routing": {
|
|
131
|
-
"extractor": "structurecc-extract-multipanel",
|
|
132
|
-
"extraction_hints": ["panel_A_bar", "panel_B_heatmap", "panel_C_boxplot", "panel_D_table"]
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
```
|