2016-07-15 7 views
0

Мое приложение включает в себя сканирование через телефонную камеру и обнаружение текста. Единственное, что касается моей заявки, - это правильные английские слова. У меня есть список ~ 354 000 действительных английских слов, с которыми я могу сравнить свое сканированное слово.Android, Java - Исправить слово OCR-ed до действительного словаря английского слова в реальном времени

Поскольку мое приложение постоянно обнаруживает текст, мне нужна эта функциональность очень быстро. Я применил дистанционную методику Левенштейна. Для каждого слова, я:

  1. Хранить содержимое текстового файла в Arraylist<String> используя Scanner
  2. Расчет расстояния Левенштейна слова с каждым из 354k слов
  3. Возвращаемые слово, соответствующее минимальному расстоянию стоимость

Проблема в том, что она очень медленная. Без применения этого приложения мое приложение сможет обрабатывать более 20 слов примерно за 70-100 миллисекунд. Когда я включаю эту процедуру исправления, мое приложение занимает больше 1 минуту (60000 мс) за одно слово.

Мне было интересно, подходит ли эта техника для моего случая. Если нет, с каким другим испытанным способом я должен пойти? Любая помощь будет принята с благодарностью. Я знаю, что это возможно, глядя на то, как клавиатуры Android могут мгновенно исправлять неверно введенные слова.

Другие Failed усилия:

  • Яро расстояние. (похожие)
  • Внутренний телефон SpellCheckerSession. (Не подходит моему случаю Результата получения с помощью обратного вызова является вопросом.)
+0

@Andy вырубку список не является вариант, к сожалению. Может ли быть какая-либо техника хеширования или картографирования, которую я мог бы включить здесь? –

+1

Я не обязательно имею в виду «вырезать список», как полностью отбрасывая слова; Я имею в виду, что вам нужен способ разбить список таким образом, чтобы вы не искали слова, которые невозможно сопоставить. Например, я предполагаю, что у вас есть представление о том, как долго будет слово - можете ли вы проверить только слова этой длины +/- 1, скажем? –

+0

@ Энди Скажи, даже если я как-то сужу список слов до одной десятой, это все равно означает 6 секунд на слово. Принимая во внимание, что смартфоны могут делать это мгновенно. Мне бы очень хотелось узнать об этом методе –

ответ

0

Моего решения, которое работает: Я создал таблицу MYSQL и загрузил список допустимых английских слов в нем. Он решает все проблемы, затронутые в вопросе.

Вот мой Android приложения для справки: Optical Dictionary & Vocabulary Teacher

 Смежные вопросы

  • Нет связанных вопросов^_^