我正在开发一个简单的 JavaScript 代码来从
text
中提取 image
。为此,我正在使用像 Tesseract.
这样的图像处理库
但我发现,
Tesseract
并不是100%准确。 (或者可能是我不知道如何正确使用它)
例如,将图像文本转换为字符串数组并一一扫描每个字符串后,我得到以下不相同的字符串。
年龄 + 67 性别:女性 年龄:45 性别:女性 年龄 + 45 性别: 男
年龄:44 性别:男 36 岁 性别:女 年龄:56 性别:男
年龄+63 性别:男 年龄:62 性别:女 年龄:37 性别:男
我在
+
和space
的基础上分割了字符串,像这样
const AgeAndGenderArray = line.split(" ") || line.split("+");
我得到了以下输出。
['年龄',
'+', '67'
, '性别', ':', '女', '年龄', ':', '45', '性别', ':', '女', '年龄', '+'
, '45', '性别', ':', '男']
['年龄', ':', '44', '性别', ':', '男', '年龄', '36', '性别', ':', '女', '年龄', ':', '56', '性别',
':'
, '男']
['年龄',
'+63'
, '性别', ':', '男', '年龄', ':', '62', '性别', ':', '女', '年龄', ':', '37', '性别', ':', '男']
如果您观察,所有输入字符串并不完全相同。有些正在吃
Age + 67
,有些人正在经历Age +63
。某处有+
,某处有:
。所以我无法从中提取文本。
我期待这样的输出:
63 Male
62 Female
37 Male
那么如何解析如此多样化的字符串?
我的代码:
const processImage = () => {
Tesseract.recognize(file, "eng", { logger: (m) => console.log(m) }).then(
({ data: { text } }) => {
console.log(text);
const parsedCandidates = parseOCRResult(text);
setCandidates(parsedCandidates);
}
);
console.log(file);
};
const parseOCRResult = (text) => {
// parsing logic of strings
}
使用正则表达式
Age[^\d]+
进行拆分。它将搜索“年龄”后跟任何字符,但在找到数字时停止
let input = `Age + 67 Gender : Female Age : 45 Gender : Female Age + 45 Gender : Male
Age : 44 Gender : Male Age 36 Gender : Female Age : 56 Gender : Male
Age +63 Gender : Male Age : 62 Gender : Female Age : 37 Gender : Male`
let results = input.split(/Age[^\d]+/)
// clean the results
results = results.map(item => item.replace(' Gender :', '').trim()).filter(i => i.length)
console.log(results)