Как проанализировать строку, полученную в результате преобразования изображения в текст, с помощью Tesseract?

Я разрабатываю простой код 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), что позволяет изменять содержимое и структуру веб-страницы.


99
1

Ответ:

Решено

используйте 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)