Я разрабатываю простой код JavaScript для извлечения text
из image
. Для этого я использую библиотеку обработки изображений, например Tesseract.
Но я обнаружил, что Tesseract
не является на 100% точным. (или, может быть, я не знаю, как его правильно использовать)
Например, после преобразования текста изображения в массив строк и сканирования каждой строки одну за другой я получаю следующие строки, которые не совпадают.
Возраст + 67 Пол : Женский Возраст : 45 Пол : Женский Возраст + 45 Пол : Мужской
Возраст: 44 Пол: мужской Возраст 36 Пол: женский Возраст: 56 Пол: мужской
Возраст +63 Пол: Мужской Возраст: 62 Пол: Женский Возраст: 37 Пол: Мужской
Я разделил строку на основе +
и space
вот так
const ageAndGenderArray = line.split(" ") || line.split("+");
и я получил следующий вывод.
['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']
Если вы заметили, все входные строки не совсем одинаковы. У некоторых естьAge + 67
, а у некоторых Age +63
. Где-то есть +
, а где-то :
. Поэтому я не могу извлечь из него текст.
Я ожидаю такого вывода:
63 Male
62 Female
37 Male
Как же разобрать такую разнообразную строку?
Мой код:
const processImage = () => {
Tesseract.recognize(file, "eng", { logger: (m) => console.info(m) }).then(
({ data: { text } }) => {
console.info(text);
const parsedCandidates = parseOCRResult(text);
setCandidates(parsedCandidates);
}
);
console.info(file);
};
const parseOCRResult = (text) => {
// parsing logic of strings
}
🤔 А знаете ли вы, что...
JavaScript можно использовать для манипуляции DOM (Document Object Model), что позволяет изменять содержимое и структуру веб-страницы.
используйте Regex 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.info(results)