Android Tess-Two OCR unmappable character 'fi'

В моем приложении Android есть функция OCR, использующая библиотеку tess-two. У меня есть эта проблема при чтении строки, содержащей "fi" . После baseApi.getUTF8Text(), метод получения распознанного текста OCR, возвращаемая строка в "fi" равна "fi" < < < - - - Обращайте пристальное внимание на эту строку. Это не 2-символьная строка, а односимвольная строка. Вы можете воспроизвести это путем копирования и вставки. Теперь я думаю, что это может быть проблема кодировки UTF8 или и т.д., С которыми у меня недостаточно знаний. Когда я пытался сделать string.replace( "fi" , "fi" ), Android Studio строит с помощью erors unmappable character для кодирования utf-8. Я пробовал искать в google, но он распознал его как обычный "fi" , а не "fi" .

Есть ли способ исправить этот символ?

Ответ 1

Вы можете избежать распознавания лигатуры путем внесения в нее черного списка перед вызовом baseApi.setImage:

baseApi.setVariable(TessBaseAPI.VAR_CHAR_BLACKLIST, "fi");

Чтобы запретить Android Studio выбрасывать ошибку unmappable character в вашем java-коде, конвертировать кодировку вашего файла в UTF-8 с помощью выбора "UTF-8" из селектор в правом нижнем углу окна Android Studio.

Ответ 2

Вот что я нашел, FWIW: персонаж 'fi' является лигатурой (более на: Unicode Character 'LATIN SMALL LIGATURE FI' (U + FB01))

Вот быстрая и грязная программа для поиска и замены "fi" любыми другими символами:

public class LigatureFI
{

    static char ligature_fi = 0xFB01;

    public static void main(String[] args)
    {
        String sligature_fi = Character.toString(ligature_fi);
        String string = new String("fififififififififififififififi");
        System.out.println(string);
        string = string.replaceAll(sligature_fi, "FI");
        System.out.println(string);
    }

}

Если ваша IDE жалуется, что "fi" не находится в кодировке cp1252, сохраните ее как UTF8.

НТН.