@regolithco/ocr 1.0.1 → 1.0.3
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/README.md +51 -0
- package/dist/node.d.ts +1 -1
- package/dist/node.js +46 -4
- package/dist/node.js.map +1 -1
- package/dist/parsers/shipMiningOrder.js +104 -59
- package/dist/parsers/shipMiningOrder.js.map +1 -1
- package/dist/parsers/shipRock.js +90 -31
- package/dist/parsers/shipRock.js.map +1 -1
- package/dist/parsers/utils.d.ts +18 -0
- package/dist/parsers/utils.js +18 -0
- package/dist/parsers/utils.js.map +1 -1
- package/package.json +8 -3
- package/dist/parser.d.ts +0 -2
- package/dist/parser.js +0 -3
- package/dist/parser.js.map +0 -1
package/README.md
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# @regolithco/ocr
|
|
2
|
+
|
|
3
|
+
OCR utilities using PaddleOCR, designed for RegolithCo applications. This library provides OCR capabilities for parsing specific game assets like Mining Orders and Rocks, with support for Browser environments.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
yarn add @regolithco/ocr
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
This library exports specific parsers for game entities.
|
|
14
|
+
|
|
15
|
+
### Parsing Shipping Orders
|
|
16
|
+
|
|
17
|
+
```typescript
|
|
18
|
+
import { parseShipMiningOrder } from '@regolithco/ocr'
|
|
19
|
+
|
|
20
|
+
// In Node.js environment
|
|
21
|
+
const result = await parseShipMiningOrder('path/to/image.png')
|
|
22
|
+
console.log(result)
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### Parsing Rocks
|
|
26
|
+
|
|
27
|
+
```typescript
|
|
28
|
+
import { parseShipRock } from '@regolithco/ocr'
|
|
29
|
+
|
|
30
|
+
const result = await parseShipRock('path/to/image.png')
|
|
31
|
+
console.log(result)
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Development
|
|
35
|
+
|
|
36
|
+
Clone the repository and install dependencies:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
yarn install
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Scripts
|
|
43
|
+
|
|
44
|
+
- `yarn build`: Compile TypeScript to `dist/`.
|
|
45
|
+
- `yarn test`: Run unit tests using Jest.
|
|
46
|
+
- `yarn debug`: Run the PaddleOCR debug script on test images.
|
|
47
|
+
- `yarn debug:choose`: Run the debug script with an interactive file chooser.
|
|
48
|
+
|
|
49
|
+
## License
|
|
50
|
+
|
|
51
|
+
ISC
|
package/dist/node.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import Ocr from '@gutenye/ocr-node';
|
|
1
|
+
import type Ocr from '@gutenye/ocr-node';
|
|
2
2
|
import { ShipRockCapture, ShipMiningOrderCapture } from '@regolithco/common/dist/gen/schema.types.js';
|
|
3
3
|
export declare const initPaddle: () => Promise<Ocr | null>;
|
|
4
4
|
export declare const recognizeText: (imagePath: string) => Promise<string>;
|
package/dist/node.js
CHANGED
|
@@ -1,18 +1,60 @@
|
|
|
1
|
-
import Ocr from '@gutenye/ocr-node';
|
|
2
1
|
import { parseShipMiningOrder as parseShipMiningOrderText } from './parsers/shipMiningOrder.js';
|
|
3
2
|
import { parseShipRock as parseShipRockText } from './parsers/shipRock.js';
|
|
4
3
|
let ocrInstance = null;
|
|
4
|
+
let ocrConstructorPromise = null;
|
|
5
|
+
const loadNodeOcr = async () => {
|
|
6
|
+
if (!ocrConstructorPromise) {
|
|
7
|
+
ocrConstructorPromise = import('@gutenye/ocr-node')
|
|
8
|
+
.then((module) => module.default)
|
|
9
|
+
.catch((error) => {
|
|
10
|
+
ocrConstructorPromise = null;
|
|
11
|
+
const instructions = 'The Node OCR helpers require @gutenye/ocr-node. Install it locally (e.g. "yarn add -D @gutenye/ocr-node") to run the terminal utilities.';
|
|
12
|
+
if (error instanceof Error) {
|
|
13
|
+
error.message = `${instructions}\n${error.message}`;
|
|
14
|
+
throw error;
|
|
15
|
+
}
|
|
16
|
+
throw new Error(instructions);
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
return ocrConstructorPromise;
|
|
20
|
+
};
|
|
5
21
|
export const initPaddle = async () => {
|
|
6
22
|
if (!ocrInstance) {
|
|
7
|
-
|
|
23
|
+
const OcrCtor = await loadNodeOcr();
|
|
24
|
+
ocrInstance = await OcrCtor.create();
|
|
8
25
|
}
|
|
9
26
|
return ocrInstance;
|
|
10
27
|
};
|
|
11
28
|
export const recognizeText = async (imagePath) => {
|
|
12
29
|
const ocr = await initPaddle();
|
|
13
30
|
const results = await ocr.detect(imagePath);
|
|
14
|
-
//
|
|
15
|
-
const
|
|
31
|
+
// Heuristic: Split lines that have massive horizontal gaps, as they likely span multiple UI panels
|
|
32
|
+
const processedLines = [];
|
|
33
|
+
for (const result of results) {
|
|
34
|
+
const text = result.text;
|
|
35
|
+
const box = result.box; // [[x,y], [x,y], [x,y], [x,y]]
|
|
36
|
+
const width = Math.abs(box[1][0] - box[0][0]);
|
|
37
|
+
const height = Math.abs(box[2][1] - box[1][1]);
|
|
38
|
+
// If the box is extremely wide relative to its height and has few characters, it might be a joined line
|
|
39
|
+
// Or more reliably, if we had character-level boxes we could check gaps.
|
|
40
|
+
// Paddle node might not give char boxes easily.
|
|
41
|
+
// But we can check if the line contains a lot of spaces and is very wide.
|
|
42
|
+
// Fallback: If text contains multiple spaces and is wide, it might belong to different columns.
|
|
43
|
+
// However, without char boxes, splitting is risky.
|
|
44
|
+
const charWidth = width / text.length;
|
|
45
|
+
if (charWidth > height * 2 && text.includes(' ')) {
|
|
46
|
+
// High likelihood of a gap. Split by double spaces.
|
|
47
|
+
const parts = text.split(/\s{2,}/);
|
|
48
|
+
processedLines.push(...parts);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
processedLines.push(text);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
const fullText = processedLines.join('\n');
|
|
55
|
+
console.log('--- PADDLE OCR RAW RESULTS ---');
|
|
56
|
+
console.log(JSON.stringify(results, null, 2));
|
|
57
|
+
console.log('------------------------------');
|
|
16
58
|
console.log('--- PADDLE OCR OUTPUT ---');
|
|
17
59
|
console.log(fullText);
|
|
18
60
|
console.log('-------------------------');
|
package/dist/node.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import { RefineryEnum, RefineryMethodEnum, ShipOreEnum, } from '@regolithco/common';
|
|
2
2
|
import { cleanLine, findBestMatch } from './utils.js';
|
|
3
|
+
// Managed word arrays for OCR variations
|
|
4
|
+
const PROCESS_TIME_KEYWORDS = ['PROCESS TIME', 'TIME'];
|
|
5
|
+
const EXPENSE_LABELS = {
|
|
6
|
+
'TOTAL COST': 'Refinery Fee',
|
|
7
|
+
'REFINERY FEE': 'Refinery Fee',
|
|
8
|
+
'SERVICE FEE': 'Service Fee',
|
|
9
|
+
};
|
|
10
|
+
const EXIT_SECTION_KEYWORDS = ['TOTAL COST', 'USER DETAILS', 'PROCESSING TIME', 'SELECT STORAGE OPTION'];
|
|
3
11
|
export const parseShipMiningOrder = (ocrText) => {
|
|
4
12
|
const lines = ocrText
|
|
5
13
|
.split('\n')
|
|
@@ -76,72 +84,103 @@ export const parseShipMiningOrder = (ocrText) => {
|
|
|
76
84
|
}
|
|
77
85
|
// 2. Method
|
|
78
86
|
if (!method) {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
87
|
+
// Find all matches in the line and pick the left-most one
|
|
88
|
+
// We gather candidates: { method, index }
|
|
89
|
+
let bestMethodIdx = Infinity;
|
|
90
|
+
let bestMethod;
|
|
91
|
+
for (const m of allMethods) {
|
|
92
|
+
const humanM = m.replace(/_/g, ' ');
|
|
93
|
+
// 1. Exact Scan
|
|
94
|
+
// Check 1: match ENUM string directly
|
|
95
|
+
let idx = lineUpper.indexOf(m.toString().toUpperCase());
|
|
96
|
+
// Check 2: match space separated
|
|
97
|
+
const idxHuman = lineUpper.indexOf(humanM.toUpperCase());
|
|
98
|
+
if (idxHuman !== -1) {
|
|
99
|
+
if (idx === -1 || idxHuman < idx) {
|
|
100
|
+
idx = idxHuman;
|
|
89
101
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
102
|
+
}
|
|
103
|
+
// 2. Fuzzy Scan (if exact not found, OR to be safe? usually exact is better but let's assume if exact exists it's correct)
|
|
104
|
+
// If we found an exact match, we trust that index.
|
|
105
|
+
// If NOT, we try fuzzy.
|
|
106
|
+
if (idx === -1) {
|
|
107
|
+
const target = humanM.toUpperCase();
|
|
108
|
+
if (lineUpper.length >= target.length) {
|
|
109
|
+
// Sliding window
|
|
110
|
+
for (let i = 0; i <= lineUpper.length - target.length; i++) {
|
|
111
|
+
const substr = lineUpper.substring(i, i + target.length);
|
|
93
112
|
const dist = findBestMatch(substr, [m], 3);
|
|
94
|
-
|
|
95
|
-
|
|
113
|
+
// Optimization: If we already have a bestMethod at index 10, and we are at i=20, we can stop scanning this method?
|
|
114
|
+
// Yes, because any match here would be "to the right" of the current best.
|
|
115
|
+
if (i > bestMethodIdx)
|
|
96
116
|
break;
|
|
117
|
+
if (dist) {
|
|
118
|
+
idx = i;
|
|
119
|
+
break; // Found the left-most fuzzy match for THIS method
|
|
97
120
|
}
|
|
98
121
|
}
|
|
99
122
|
}
|
|
100
|
-
|
|
101
|
-
|
|
123
|
+
}
|
|
124
|
+
if (idx !== -1) {
|
|
125
|
+
if (idx < bestMethodIdx) {
|
|
126
|
+
bestMethodIdx = idx;
|
|
127
|
+
bestMethod = m;
|
|
128
|
+
}
|
|
102
129
|
}
|
|
103
130
|
}
|
|
131
|
+
if (bestMethod) {
|
|
132
|
+
method = bestMethod;
|
|
133
|
+
}
|
|
104
134
|
}
|
|
105
135
|
// 3. Process Time
|
|
106
|
-
if (!processDurationS &&
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
136
|
+
if (!processDurationS && PROCESS_TIME_KEYWORDS.some((k) => lineUpper.includes(k))) {
|
|
137
|
+
const parseDuration = (str) => {
|
|
138
|
+
let d = 0;
|
|
139
|
+
let h = 0;
|
|
140
|
+
let m = 0;
|
|
141
|
+
let found = false;
|
|
142
|
+
const dMatch = str.match(/(\d+)\s*D/i);
|
|
143
|
+
if (dMatch) {
|
|
144
|
+
d = parseInt(dMatch[1], 10);
|
|
145
|
+
found = true;
|
|
146
|
+
}
|
|
147
|
+
const hMatch = str.match(/(\d+)\s*H/i);
|
|
148
|
+
if (hMatch) {
|
|
149
|
+
h = parseInt(hMatch[1], 10);
|
|
150
|
+
found = true;
|
|
151
|
+
}
|
|
152
|
+
const mMatch = str.match(/(\d+)\s*M/i);
|
|
153
|
+
if (mMatch) {
|
|
154
|
+
m = parseInt(mMatch[1], 10);
|
|
155
|
+
found = true;
|
|
156
|
+
}
|
|
157
|
+
return found ? d * 86400 + h * 3600 + m * 60 : null;
|
|
158
|
+
};
|
|
159
|
+
const val = parseDuration(lineUpper);
|
|
160
|
+
if (val !== null) {
|
|
161
|
+
processDurationS = val;
|
|
125
162
|
}
|
|
126
|
-
if (
|
|
127
|
-
|
|
163
|
+
else if (idx + 1 < lines.length) {
|
|
164
|
+
// Try next line
|
|
165
|
+
const nextVal = parseDuration(lines[idx + 1].toUpperCase());
|
|
166
|
+
if (nextVal !== null) {
|
|
167
|
+
processDurationS = nextVal;
|
|
168
|
+
}
|
|
128
169
|
}
|
|
129
170
|
}
|
|
130
171
|
// 3.5. Expenses
|
|
131
|
-
const
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
if (matches) {
|
|
141
|
-
const rawAmount = matches[matches.length - 1].replace(/,/g, '');
|
|
172
|
+
for (const [label, mappedName] of Object.entries(EXPENSE_LABELS)) {
|
|
173
|
+
const idx = lineUpper.indexOf(label);
|
|
174
|
+
if (idx !== -1) {
|
|
175
|
+
// Found the label. We want the number that follows it.
|
|
176
|
+
const relevantText = lineUpper.substring(idx + label.length);
|
|
177
|
+
// Find the FIRST number in this substring
|
|
178
|
+
const match = relevantText.match(/(\d[\d,.]*)/);
|
|
179
|
+
if (match) {
|
|
180
|
+
const rawAmount = match[1].replace(/,/g, '');
|
|
142
181
|
const amount = parseInt(rawAmount);
|
|
143
182
|
if (!isNaN(amount)) {
|
|
144
|
-
|
|
183
|
+
// Only add if not already present
|
|
145
184
|
if (!expenses.find((e) => e.name === mappedName)) {
|
|
146
185
|
expenses.push({
|
|
147
186
|
__typename: 'WorkOrderExpense',
|
|
@@ -157,19 +196,18 @@ export const parseShipMiningOrder = (ocrText) => {
|
|
|
157
196
|
// 4. Ores Section Management
|
|
158
197
|
let exitingSection = false;
|
|
159
198
|
if (!inMaterialsSection) {
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
199
|
+
const hasMaterialsSelected = lineUpper.includes('MATERIALS SELECTED');
|
|
200
|
+
const hasYield = lineUpper.includes('YIELD');
|
|
201
|
+
const hasRefine = lineUpper.includes('REFINE') && !lineUpper.includes('TO REFINE');
|
|
202
|
+
const hasQty = lineUpper.includes('OTY');
|
|
203
|
+
if (hasMaterialsSelected || (hasYield && (hasRefine || hasQty))) {
|
|
163
204
|
inMaterialsSection = true;
|
|
164
205
|
continue;
|
|
165
206
|
}
|
|
166
207
|
}
|
|
167
208
|
else {
|
|
168
|
-
// Check for exit conditions
|
|
169
|
-
if (lineUpper.includes(
|
|
170
|
-
lineUpper.includes('USER DETAILS') ||
|
|
171
|
-
lineUpper.includes('PROCESSING TIME') ||
|
|
172
|
-
lineUpper.includes('Select Storage Option'.toUpperCase())) {
|
|
209
|
+
// Check for exit conditions
|
|
210
|
+
if (EXIT_SECTION_KEYWORDS.some((k) => lineUpper.includes(k))) {
|
|
173
211
|
exitingSection = true;
|
|
174
212
|
}
|
|
175
213
|
}
|
|
@@ -233,6 +271,13 @@ export const parseShipMiningOrder = (ocrText) => {
|
|
|
233
271
|
}
|
|
234
272
|
}
|
|
235
273
|
if (numbers.length >= 2) {
|
|
274
|
+
// Heuristic to filter "phantom" rows (often 3 numbers, last one small)
|
|
275
|
+
// e.g. "AGRICIUM 391 381 10" vs Valid "TIN 830 706"
|
|
276
|
+
// usage of // usually implies a comment or structural noise we should ignore for filtering decision
|
|
277
|
+
if (numbers.length === 3 && numbers[2] <= 20 && !lineUpper.includes('//')) {
|
|
278
|
+
// Likely an artifact row, skip it
|
|
279
|
+
continue;
|
|
280
|
+
}
|
|
236
281
|
const yieldVal = numbers[1];
|
|
237
282
|
shipOres.push({
|
|
238
283
|
__typename: 'RefineryRowCapture',
|
|
@@ -248,7 +293,7 @@ export const parseShipMiningOrder = (ocrText) => {
|
|
|
248
293
|
}
|
|
249
294
|
return {
|
|
250
295
|
__typename: 'ShipMiningOrderCapture',
|
|
251
|
-
refinery,
|
|
296
|
+
refinery: refinery !== null && refinery !== void 0 ? refinery : null,
|
|
252
297
|
method,
|
|
253
298
|
processDurationS,
|
|
254
299
|
expenses: expenses.length > 0 ? expenses : undefined,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shipMiningOrder.js","sourceRoot":"","sources":["../../src/parsers/shipMiningOrder.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"shipMiningOrder.js","sourceRoot":"","sources":["../../src/parsers/shipMiningOrder.ts"],"names":[],"mappings":"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"}
|
package/dist/parsers/shipRock.js
CHANGED
|
@@ -1,53 +1,88 @@
|
|
|
1
1
|
import { ShipOreEnum, AsteroidTypeEnum, DepositTypeEnum, } from '@regolithco/common';
|
|
2
2
|
import { cleanLine, levenshtein } from './utils.js';
|
|
3
|
+
// Managed word arrays for OCR variations
|
|
4
|
+
const SCAN_RESULTS_KEYWORDS = ['SCAN RESULTS'];
|
|
5
|
+
const MASS_KEYWORDS = ['MASS', 'NASS'];
|
|
6
|
+
const RESISTANCE_KEYWORDS = ['RESIST', 'RESISTANCE', 'RESISTANC', 'SISTAN'];
|
|
7
|
+
const INSTABILITY_KEYWORDS = ['INSTAB', 'INSTABILITY', 'INSTABILIT', 'ABIT', 'STAB'];
|
|
8
|
+
const COMPOSITION_KEYWORDS = ['COMPOSITION', 'COMP0SITI0N'];
|
|
9
|
+
const INERT_KEYWORDS = ['INERT', 'MATERIAL', 'MATERIALS'];
|
|
10
|
+
const ASTEROID_TYPE_MAP = {
|
|
11
|
+
[AsteroidTypeEnum.Mtype]: ['M-TYPE'],
|
|
12
|
+
[AsteroidTypeEnum.Ctype]: ['C-TYPE'],
|
|
13
|
+
[AsteroidTypeEnum.Stype]: ['S-TYPE'],
|
|
14
|
+
[AsteroidTypeEnum.Etype]: ['E-TYPE', 'E TYPE'],
|
|
15
|
+
[AsteroidTypeEnum.Itype]: ['I-TYPE'],
|
|
16
|
+
[AsteroidTypeEnum.Ptype]: ['P-TYPE'],
|
|
17
|
+
[AsteroidTypeEnum.Qtype]: ['Q-TYPE'],
|
|
18
|
+
};
|
|
3
19
|
export const parseShipRock = (ocrText) => {
|
|
4
20
|
// Split into lines to preserve spatial context
|
|
5
21
|
const lines = ocrText
|
|
6
22
|
.split('\n')
|
|
7
23
|
.map(cleanLine)
|
|
8
24
|
.filter((l) => l.length > 0);
|
|
25
|
+
// Validation: Check for required anchors to ensure this is a valid Rock Info panel
|
|
26
|
+
const linesUpper = lines.map((l) => l.toUpperCase());
|
|
27
|
+
const hasScan = linesUpper.some((l) => SCAN_RESULTS_KEYWORDS.some((k) => l.includes(k)));
|
|
28
|
+
const hasMass = linesUpper.some((l) => MASS_KEYWORDS.some((k) => l.includes(k)));
|
|
29
|
+
const hasRes = linesUpper.some((l) => RESISTANCE_KEYWORDS.some((k) => l.includes(k)));
|
|
30
|
+
const hasInst = linesUpper.some((l) => INSTABILITY_KEYWORDS.some((k) => l.includes(k)));
|
|
31
|
+
const hasComp = linesUpper.some((l) => COMPOSITION_KEYWORDS.some((k) => l.includes(k)));
|
|
32
|
+
// Require at least 3 anchors to be considered a valid rock scan
|
|
33
|
+
const anchors = [hasScan, hasMass, hasRes, hasInst, hasComp];
|
|
34
|
+
const anchorCount = anchors.filter(Boolean).length;
|
|
35
|
+
if (anchorCount < 3) {
|
|
36
|
+
return {
|
|
37
|
+
__typename: 'ShipRockCapture',
|
|
38
|
+
mass: 0,
|
|
39
|
+
ores: [],
|
|
40
|
+
};
|
|
41
|
+
}
|
|
9
42
|
// Default values
|
|
10
43
|
let mass = 0;
|
|
11
44
|
let inst;
|
|
12
45
|
let res;
|
|
13
46
|
let rockType;
|
|
14
47
|
const ores = [];
|
|
48
|
+
const allNumbers = [];
|
|
15
49
|
const allOres = Object.values(ShipOreEnum);
|
|
16
|
-
const asteroidMap = {
|
|
17
|
-
'M-TYPE': AsteroidTypeEnum.Mtype,
|
|
18
|
-
'C-TYPE': AsteroidTypeEnum.Ctype,
|
|
19
|
-
'S-TYPE': AsteroidTypeEnum.Stype,
|
|
20
|
-
'E-TYPE': AsteroidTypeEnum.Etype,
|
|
21
|
-
'E TYPE': AsteroidTypeEnum.Etype,
|
|
22
|
-
'I-TYPE': AsteroidTypeEnum.Itype,
|
|
23
|
-
'P-TYPE': AsteroidTypeEnum.Ptype,
|
|
24
|
-
'Q-TYPE': AsteroidTypeEnum.Qtype,
|
|
25
|
-
};
|
|
26
50
|
// Iterate lines to find tokens
|
|
27
51
|
for (const line of lines) {
|
|
28
52
|
const lineUpper = line.toUpperCase();
|
|
53
|
+
// Collect all plausible numbers for fallback
|
|
54
|
+
const numberRegex = /([\d,]+(?:\.[\d,]+)?)/g;
|
|
55
|
+
let match;
|
|
56
|
+
while ((match = numberRegex.exec(line)) !== null) {
|
|
57
|
+
const val = parseFloat(match[1].replace(/,/g, ''));
|
|
58
|
+
if (!isNaN(val))
|
|
59
|
+
allNumbers.push(val);
|
|
60
|
+
}
|
|
29
61
|
// 1. Mass
|
|
30
62
|
if (!mass) {
|
|
31
|
-
//
|
|
32
|
-
const
|
|
63
|
+
// Flexible Mass: "MASS: 1234" or "NASS: 1234"
|
|
64
|
+
const massRegex = new RegExp(`(?:${MASS_KEYWORDS.join('|')})\\s*[:=\\s]\\s*([\\d,]+(?:\\.\\d+)?)`, 'i');
|
|
65
|
+
const massMatch = line.match(massRegex);
|
|
33
66
|
if (massMatch) {
|
|
34
|
-
const
|
|
67
|
+
const rawVal = massMatch[1].replace(/,/g, '');
|
|
68
|
+
const val = parseFloat(rawVal);
|
|
35
69
|
if (!isNaN(val))
|
|
36
70
|
mass = val;
|
|
37
71
|
}
|
|
38
72
|
}
|
|
39
73
|
// 2. Instability
|
|
40
74
|
if (inst === undefined) {
|
|
41
|
-
const
|
|
75
|
+
const instRegex = new RegExp(`(?:${INSTABILITY_KEYWORDS.join('|')})[^\\d]*([\\d,.]+)`, 'i');
|
|
76
|
+
const match = line.match(instRegex);
|
|
42
77
|
if (match)
|
|
43
|
-
inst = parseFloat(match[1]);
|
|
78
|
+
inst = parseFloat(match[1].replace(/,/g, ''));
|
|
44
79
|
}
|
|
45
80
|
// 3. Resistance
|
|
46
81
|
if (res === undefined) {
|
|
47
|
-
|
|
48
|
-
const match = line.match(
|
|
82
|
+
const resRegex = new RegExp(`(?:${RESISTANCE_KEYWORDS.join('|')})[^\\d]*([\\d,.]+)`, 'i');
|
|
83
|
+
const match = line.match(resRegex);
|
|
49
84
|
if (match) {
|
|
50
|
-
let val = parseFloat(match[1]);
|
|
85
|
+
let val = parseFloat(match[1].replace(/,/g, ''));
|
|
51
86
|
if (line.includes('%') && val > 1)
|
|
52
87
|
val /= 100;
|
|
53
88
|
res = val;
|
|
@@ -55,14 +90,17 @@ export const parseShipRock = (ocrText) => {
|
|
|
55
90
|
}
|
|
56
91
|
// 4. Rock Type
|
|
57
92
|
if (!rockType) {
|
|
58
|
-
for (const [
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
93
|
+
for (const [type, aliases] of Object.entries(ASTEROID_TYPE_MAP)) {
|
|
94
|
+
for (const alias of aliases) {
|
|
95
|
+
const cleanKey = alias.replace(/[- ]/g, '[\\- _\\.]?');
|
|
96
|
+
const regex = new RegExp(cleanKey, 'i');
|
|
97
|
+
if (regex.test(line)) {
|
|
98
|
+
rockType = type;
|
|
99
|
+
break;
|
|
100
|
+
}
|
|
65
101
|
}
|
|
102
|
+
if (rockType)
|
|
103
|
+
break;
|
|
66
104
|
}
|
|
67
105
|
// Deposit types if not asteroid
|
|
68
106
|
if (!rockType) {
|
|
@@ -77,10 +115,10 @@ export const parseShipRock = (ocrText) => {
|
|
|
77
115
|
}
|
|
78
116
|
}
|
|
79
117
|
// 5. Ores
|
|
80
|
-
// Refined logic:
|
|
81
|
-
const words = lineUpper.split(
|
|
118
|
+
// Refined logic: Split by most delimiters to isolate tokens. Identify Ores. Look for adjacent %.
|
|
119
|
+
const words = lineUpper.split(/[^A-Z0-9%.-]+/).filter((w) => w.length > 0);
|
|
82
120
|
for (let i = 0; i < words.length; i++) {
|
|
83
|
-
const w = words[i]
|
|
121
|
+
const w = words[i];
|
|
84
122
|
if (w.length < 3)
|
|
85
123
|
continue;
|
|
86
124
|
// Check if w is an Ore (Best match)
|
|
@@ -89,7 +127,7 @@ export const parseShipRock = (ocrText) => {
|
|
|
89
127
|
for (const ore of allOres) {
|
|
90
128
|
let dist = levenshtein(w, ore.toUpperCase());
|
|
91
129
|
// Special cases
|
|
92
|
-
if (w
|
|
130
|
+
if (INERT_KEYWORDS.includes(w)) {
|
|
93
131
|
if (ore === ShipOreEnum.Inertmaterial)
|
|
94
132
|
dist = 0;
|
|
95
133
|
}
|
|
@@ -134,7 +172,8 @@ export const parseShipRock = (ocrText) => {
|
|
|
134
172
|
if (percentVal > 0) {
|
|
135
173
|
if (percentVal > 1)
|
|
136
174
|
percentVal /= 100;
|
|
137
|
-
|
|
175
|
+
percentVal = Math.round(percentVal * 10000) / 10000;
|
|
176
|
+
if (!ores.find((o) => o.ore === bestOre) && bestOre !== ShipOreEnum.Inertmaterial) {
|
|
138
177
|
ores.push({
|
|
139
178
|
ore: bestOre,
|
|
140
179
|
percent: percentVal,
|
|
@@ -145,11 +184,31 @@ export const parseShipRock = (ocrText) => {
|
|
|
145
184
|
}
|
|
146
185
|
}
|
|
147
186
|
}
|
|
187
|
+
// Fallbacks for Instability and Resistance if not found
|
|
188
|
+
if (inst === undefined || res === undefined) {
|
|
189
|
+
// Heuristic: If only two numbers and mass is known, assign the others
|
|
190
|
+
const filtered = allNumbers.filter((n) => n !== mass);
|
|
191
|
+
if (filtered.length === 2) {
|
|
192
|
+
if (inst === undefined)
|
|
193
|
+
inst = filtered[0];
|
|
194
|
+
if (res === undefined)
|
|
195
|
+
res = filtered[1] > 1 ? filtered[1] / 100 : filtered[1];
|
|
196
|
+
}
|
|
197
|
+
else if (filtered.length > 0) {
|
|
198
|
+
// If only one is missing, try to assign
|
|
199
|
+
if (inst === undefined) {
|
|
200
|
+
inst = filtered[0];
|
|
201
|
+
}
|
|
202
|
+
else if (res === undefined) {
|
|
203
|
+
res = filtered[0] > 1 ? filtered[0] / 100 : filtered[0];
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
148
207
|
return {
|
|
149
208
|
__typename: 'ShipRockCapture',
|
|
150
209
|
mass,
|
|
151
210
|
inst,
|
|
152
|
-
res,
|
|
211
|
+
res: res !== null && res !== void 0 ? res : 0,
|
|
153
212
|
rockType,
|
|
154
213
|
ores,
|
|
155
214
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shipRock.js","sourceRoot":"","sources":["../../src/parsers/shipRock.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,WAAW,EACX,gBAAgB,EAChB,eAAe,GAEhB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAEnD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,OAAe,EAAmB,EAAE;IAChE,+CAA+C;IAC/C,MAAM,KAAK,GAAG,OAAO;SAClB,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,SAAS,CAAC;SACd,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAE9B,
|
|
1
|
+
{"version":3,"file":"shipRock.js","sourceRoot":"","sources":["../../src/parsers/shipRock.ts"],"names":[],"mappings":"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"}
|
package/dist/parsers/utils.d.ts
CHANGED
|
@@ -1,3 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trims whitespace from the beginning and end of a string.
|
|
3
|
+
* @param text The string to clean.
|
|
4
|
+
* @returns The trimmed string.
|
|
5
|
+
*/
|
|
1
6
|
export declare const cleanLine: (text: string) => string;
|
|
7
|
+
/**
|
|
8
|
+
* Calculates the Levenshtein distance between two strings using dynamic programming.
|
|
9
|
+
* @param a The first string.
|
|
10
|
+
* @param b The second string.
|
|
11
|
+
* @returns The Levenshtein edit distance.
|
|
12
|
+
*/
|
|
2
13
|
export declare const levenshtein: (a: string, b: string) => number;
|
|
14
|
+
/**
|
|
15
|
+
* Finds the best match for a given text from a list of candidates based on Levenshtein distance.
|
|
16
|
+
* @param text The text to match.
|
|
17
|
+
* @param candidates A list of candidate strings.
|
|
18
|
+
* @param threshold The maximum allowed distance for a match (default: 2).
|
|
19
|
+
* @returns The best matching candidate, or null if no candidate is within the threshold.
|
|
20
|
+
*/
|
|
3
21
|
export declare const findBestMatch: <T extends string>(text: string, candidates: T[], threshold?: number) => T | null;
|
package/dist/parsers/utils.js
CHANGED
|
@@ -1,6 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trims whitespace from the beginning and end of a string.
|
|
3
|
+
* @param text The string to clean.
|
|
4
|
+
* @returns The trimmed string.
|
|
5
|
+
*/
|
|
1
6
|
export const cleanLine = (text) => {
|
|
2
7
|
return text.trim();
|
|
3
8
|
};
|
|
9
|
+
/**
|
|
10
|
+
* Calculates the Levenshtein distance between two strings using dynamic programming.
|
|
11
|
+
* @param a The first string.
|
|
12
|
+
* @param b The second string.
|
|
13
|
+
* @returns The Levenshtein edit distance.
|
|
14
|
+
*/
|
|
4
15
|
export const levenshtein = (a, b) => {
|
|
5
16
|
const matrix = Array.from({ length: a.length + 1 }, () => Array(b.length + 1).fill(0));
|
|
6
17
|
for (let i = 0; i <= a.length; i++)
|
|
@@ -15,6 +26,13 @@ export const levenshtein = (a, b) => {
|
|
|
15
26
|
}
|
|
16
27
|
return matrix[a.length][b.length];
|
|
17
28
|
};
|
|
29
|
+
/**
|
|
30
|
+
* Finds the best match for a given text from a list of candidates based on Levenshtein distance.
|
|
31
|
+
* @param text The text to match.
|
|
32
|
+
* @param candidates A list of candidate strings.
|
|
33
|
+
* @param threshold The maximum allowed distance for a match (default: 2).
|
|
34
|
+
* @returns The best matching candidate, or null if no candidate is within the threshold.
|
|
35
|
+
*/
|
|
18
36
|
export const findBestMatch = (text, candidates, threshold = 2) => {
|
|
19
37
|
let bestDist = Infinity;
|
|
20
38
|
let bestMatch = null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/parsers/utils.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAY,EAAU,EAAE;IAChD,OAAO,IAAI,CAAC,IAAI,EAAE,CAAA;AACpB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAS,EAAE,CAAS,EAAU,EAAE;IAC1D,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;IACtF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IACpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IAEpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAC1C,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;QAClG,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;AACnC,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,CAAmB,IAAY,EAAE,UAAe,EAAE,YAAoB,CAAC,EAAY,EAAE;IAChH,IAAI,QAAQ,GAAG,QAAQ,CAAA;IACvB,IAAI,SAAS,GAAa,IAAI,CAAA;IAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;IAEpC,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;QACpC,MAAM,IAAI,GAAG,WAAW,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;QAC9C,IAAI,IAAI,GAAG,QAAQ,IAAI,IAAI,IAAI,SAAS,EAAE,CAAC;YACzC,QAAQ,GAAG,IAAI,CAAA;YACf,SAAS,GAAG,IAAI,CAAA;QAClB,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/parsers/utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAY,EAAU,EAAE;IAChD,OAAO,IAAI,CAAC,IAAI,EAAE,CAAA;AACpB,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAS,EAAE,CAAS,EAAU,EAAE;IAC1D,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;IACtF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IACpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IAEpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAC1C,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;QAClG,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;AACnC,CAAC,CAAA;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAmB,IAAY,EAAE,UAAe,EAAE,YAAoB,CAAC,EAAY,EAAE;IAChH,IAAI,QAAQ,GAAG,QAAQ,CAAA;IACvB,IAAI,SAAS,GAAa,IAAI,CAAA;IAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;IAEpC,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;QACpC,MAAM,IAAI,GAAG,WAAW,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;QAC9C,IAAI,IAAI,GAAG,QAAQ,IAAI,IAAI,IAAI,SAAS,EAAE,CAAC;YACzC,QAAQ,GAAG,IAAI,CAAA;YACf,SAAS,GAAG,IAAI,CAAA;QAClB,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,17 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@regolithco/ocr",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"description": "OCR utilities using PaddleOCR",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/node.js",
|
|
7
7
|
"browser": "dist/browser.js",
|
|
8
8
|
"types": "dist/node.d.ts",
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "https://github.com/RegolithCo/RegolithCo-OCR"
|
|
12
|
+
},
|
|
9
13
|
"publishConfig": {
|
|
10
14
|
"access": "public"
|
|
11
15
|
},
|
|
12
16
|
"engines": {
|
|
13
17
|
"node": ">=22 <24"
|
|
14
|
-
},
|
|
18
|
+
},
|
|
15
19
|
"files": [
|
|
16
20
|
"dist"
|
|
17
21
|
],
|
|
@@ -20,6 +24,7 @@
|
|
|
20
24
|
"prepublishOnly": "yarn run build",
|
|
21
25
|
"debug": "tsx scripts/debug_paddle.ts",
|
|
22
26
|
"debug:choose": "tsx scripts/debug_paddle.ts --choose",
|
|
27
|
+
"validate": "tsx scripts/validate_images.ts",
|
|
23
28
|
"test": "node --experimental-vm-modules node_modules/jest/bin/jest.js"
|
|
24
29
|
},
|
|
25
30
|
"keywords": [
|
|
@@ -31,7 +36,6 @@
|
|
|
31
36
|
"license": "ISC",
|
|
32
37
|
"dependencies": {
|
|
33
38
|
"@gutenye/ocr-browser": "^1.4.8",
|
|
34
|
-
"@gutenye/ocr-node": "^1.4.8",
|
|
35
39
|
"@regolithco/common": "^1.4.7",
|
|
36
40
|
"graphql": "^16.12.0",
|
|
37
41
|
"loglevel": "^1.9.2",
|
|
@@ -40,6 +44,7 @@
|
|
|
40
44
|
"devDependencies": {
|
|
41
45
|
"@clack/prompts": "^0.11.0",
|
|
42
46
|
"@faker-js/faker": "8",
|
|
47
|
+
"@gutenye/ocr-node": "^1.4.8",
|
|
43
48
|
"@types/jest": "^30.0.0",
|
|
44
49
|
"@types/lodash": "^4.17.20",
|
|
45
50
|
"@types/node": "^24.5.2",
|
package/dist/parser.d.ts
DELETED
package/dist/parser.js
DELETED
package/dist/parser.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AACA,cAAc,uBAAuB,CAAC;AACtC,cAAc,8BAA8B,CAAC"}
|