Мое приложение включает в себя сканирование через телефонную камеру и обнаружение текста. Единственное, что касается моей заявки, - это правильные английские слова. У меня есть список ~ 354 000 действительных английских слов, с которыми я могу сравнить свое сканированное слово.Android, Java - Исправить слово OCR-ed до действительного словаря английского слова в реальном времени
Поскольку мое приложение постоянно обнаруживает текст, мне нужна эта функциональность очень быстро. Я применил дистанционную методику Левенштейна. Для каждого слова, я:
- Хранить содержимое текстового файла в
Arraylist<String>
используяScanner
- Расчет расстояния Левенштейна слова с каждым из 354k слов
- Возвращаемые слово, соответствующее минимальному расстоянию стоимость
Проблема в том, что она очень медленная. Без применения этого приложения мое приложение сможет обрабатывать более 20 слов примерно за 70-100 миллисекунд. Когда я включаю эту процедуру исправления, мое приложение занимает больше 1 минуту (60000 мс) за одно слово.
Мне было интересно, подходит ли эта техника для моего случая. Если нет, с каким другим испытанным способом я должен пойти? Любая помощь будет принята с благодарностью. Я знаю, что это возможно, глядя на то, как клавиатуры Android могут мгновенно исправлять неверно введенные слова.
Другие Failed усилия:
- Яро расстояние. (похожие)
- Внутренний телефон
SpellCheckerSession
. (Не подходит моему случаю Результата получения с помощью обратного вызова является вопросом.)
@Andy вырубку список не является вариант, к сожалению. Может ли быть какая-либо техника хеширования или картографирования, которую я мог бы включить здесь? –
Я не обязательно имею в виду «вырезать список», как полностью отбрасывая слова; Я имею в виду, что вам нужен способ разбить список таким образом, чтобы вы не искали слова, которые невозможно сопоставить. Например, я предполагаю, что у вас есть представление о том, как долго будет слово - можете ли вы проверить только слова этой длины +/- 1, скажем? –
@ Энди Скажи, даже если я как-то сужу список слов до одной десятой, это все равно означает 6 секунд на слово. Принимая во внимание, что смартфоны могут делать это мгновенно. Мне бы очень хотелось узнать об этом методе –