Форум программистов, компьютерный форум, киберфорум
Наши страницы
Искусственный интеллект
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
йот
25 / 30 / 14
Регистрация: 08.09.2017
Сообщений: 449
1

Распознавание слов

28.09.2017, 15:05. Просмотров 1398. Ответов 70
Метки нет (Все метки)

Программа обладающая ИИ должна уметь распознавать слова,
в которых сделаны ошибки. Попробуем систематизировать эти
ошибки
1. Дано слово, например АЛГОРИТМ
2. Ошибка, при которой одна буква заменена другой,
например АГГОРИТМ
3. Ошибка, при которой добавлена одна буква, например
АЛЛГОРИТМ
4. Ошибка, при которой пропала одна буква, например
АЛГОРИМ
Вопрос заключается Не в том, что программа обнаружила ошибку,
А в том как она должна ее исправить? При этом у программы есть
файл, где записаны слова без ошибок...

Решение
В принципе программа может подсчитать все буквы и сравнить все
свои подсчеты с эталонными словами - будет потрачена масса времени
Значит нужен какой-то быстрый алгоритм...

Кто поможет программе в поиске ошибок?
Она вас никогда не забудет!!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.09.2017, 15:05
Ответы с готовыми решениями:

Распознавание образов
Здравствуйте, хотел бы спросить совета у вас. Вообщем надо написать курсовую работу по теме...

Распознавание цифр
Добрый день, помогите пожалуйста найти пример с кодом программы распознавания чисел по картинкам....

Распознавание образов
Нужна помощь в области методов распознавания образов, а именно нужна информация(литература, лекции)...

Распознавание образов
Можно при помощи моделирования нейросетей или чисто математических алгоритмов распознавать объекты,...

Распознавание образов
Какую лучше всего взять библиотеку, метод именно про распознавание образов?

70
warhast
20 / 20 / 4
Регистрация: 02.02.2014
Сообщений: 77
28.09.2017, 15:28 2
Лучший ответ Сообщение было отмечено йот как решение

Решение

С этим лучше в алгоритмы, ибо помогать в первую очередь будут Lawrence Philips и тов. Левенштейн.
0
йот
25 / 30 / 14
Регистрация: 08.09.2017
Сообщений: 449
28.09.2017, 15:47  [ТС] 3
warhast,
я думал об этом, но пришел к выводу, что это всё-таки относится
к Искусственному Интеллекту... ибо далее пойдет распознавание
фраз...
Хотя вы тоже правы. Это тот случай, когда ИИ и Алгоритмы неразделимы
0
Shamil1
Модератор
2258 / 1541 / 351
Регистрация: 26.03.2015
Сообщений: 5,525
29.09.2017, 16:08 4
Лучший ответ Сообщение было отмечено йот как решение

Решение

алгоритм проверка орфографии
Начните с первой ссылки... и далее те, которые покажутся интересными. Если будут вопросы - спрашивайте.
1
йот
25 / 30 / 14
Регистрация: 08.09.2017
Сообщений: 449
29.09.2017, 20:26  [ТС] 5
шаг 1.
если сравниваются два слова одинаковой длины (при одной ошибке),
то надо сравнить все буквы по порядку - это дает полную гарантию
найти ошибку
2. можно суммировать коды букв, что тоже неплохо...
0
vino0s
9 / 9 / 8
Регистрация: 26.03.2014
Сообщений: 353
29.09.2017, 20:40 6
Цитата Сообщение от йот Посмотреть сообщение
Кто поможет программе в поиске ошибок?
Метод хеширования
А вам это куда? )) Мне тоже интересно это направление)
0
йот
25 / 30 / 14
Регистрация: 08.09.2017
Сообщений: 449
30.09.2017, 08:27  [ТС] 7
vino0s,
вы понимаете, человек разумный может во многих случаях
определить ошибку... Чем хуже программа?
шаг 2.
если два слова различаются только одной буквой. Буквы нет
или буква лишняя, то суммируя коды букв этих слов и вычисляя
разницу сумм, мы найдем тем самым эту лишнюю/недостающую
букву... найти ее место намного проще...
0
vino0s
9 / 9 / 8
Регистрация: 26.03.2014
Сообщений: 353
30.09.2017, 09:41 8
Цитата Сообщение от йот Посмотреть сообщение
если два слова различаются только одной буквой
метод хеширования в поисках ошибок. он не такой сложный, но именно для такой задачи самый быстрый


Добавлено через 1 минуту
Цитата Сообщение от vino0s Посмотреть сообщение
А вам это куда?
вопрос в силе) я готов принять участие, если тема близка))
0
йот
25 / 30 / 14
Регистрация: 08.09.2017
Сообщений: 449
30.09.2017, 09:54  [ТС] 9
vino0s,
я пишу диалоговую программу с ИИ. Сами понимаете,
если человек ошибся в написании фразы во время диалога,
то программа либо не поймет вовсе (из-за одной ошибки!!),
либо... Именно это я и собираюсь сделать... программа исправит
ошибку, либо, как минимум, она не потеряет нить диалога...
в конце концов программа может догадаться, что ее разыгрывают
и выдаст вам столько информации, сколько вы о себе не знали с
самого своего первого дня рождения...
0
vino0s
9 / 9 / 8
Регистрация: 26.03.2014
Сообщений: 353
30.09.2017, 10:06 10
Цитата Сообщение от йот Посмотреть сообщение
я пишу диалоговую программу с ИИ
Один пишешь? ) Это очень амбициозная задача)
Я постараюсь помочь всем чем смогу, начнем со случаев:
Цитата Сообщение от йот Посмотреть сообщение
у программы есть
файл
1) сколько слов, сколько словоформ? :: Красный, красное? или Красный, Синий ...
2) Метод хеширования позволяет отсеять заведомо непохожие слова в пределах N ошибок, N - можно установить самому, в вашем примере N = 1
3) После отсеивания лишних слов: проверяем совпавшие полностью, вдруг слово есть: затем проверяем по увеличению количества ошибок до N
4) Ну тут я уже опишу проблему свою, так как в ИИ я ноль) Слова: Катить и Окатить - по сути тут есть одна ошибка, как программа определит, тут ошибка или правильная форма, если пользователь написал Окатить, тогда как по смыслу должно было быть слово Катить.
0
йот
25 / 30 / 14
Регистрация: 08.09.2017
Сообщений: 449
30.09.2017, 10:21  [ТС] 11
vino0s
буду отвечать по принципу от простого к сложному.
1. Итак, какие-то слова, в которых у программы могли бы
возникнуть ошибки, будут употребляться в готовых фразах
- ошибок не возникнет и смысл будет ясен из контекста.
2. В словарь будут входить слова вместе со своими словоформами!!
плюс сочетания, где они несут иной смысл.
0
vino0s
9 / 9 / 8
Регистрация: 26.03.2014
Сообщений: 353
30.09.2017, 10:27 12
https://habrahabr.ru/post/114997/
Изучите. У себя я использовал метод N-грамм, но у меня пока не было задачи связать с ИИ, но в дальнейшем, и уже сейчас тоже хочется.
ну четвертый пример для реального случая можно изменить на слова: Укатать и Катать.
Следовательно для большего качества, если есть желания сделать !Алмаз! то можно составить таблицы/(или может получится и таблицу) по типам ошибок:
1) Двойное нажатие ААЛГОРИТМ
2) Соседняя клавиша ПЛГОРИТМ
3) Ну конечно же добавить функцию транслитерации f(FKUJHBNV)=АЛГОРИТМ //позже скину
4) Возможно есть еще какие то варианты, по пункту три можно сделать и такие преобразования: f(4ЛГ0РИТМ)=АЛГОРИТМ
5) Ну и ошибки орфографии АЛГАРИТМ - этот пункт довольно спорный, возможно его нужно решать уже после метода Хеширования, здесь кстати, в поиске самой ошибки, проще и быстрее использовать метод N-грамм. (Который тоже можно сделать довольно крутым, если оборудовать его "вектором весов" чем дальше ошибка от начала слова, тем меньше ее значение ( Но это не нужно если у вас словарь всех слов и словоформ )
0
йот
25 / 30 / 14
Регистрация: 08.09.2017
Сообщений: 449
30.09.2017, 10:40  [ТС] 13
vino0s
В словарь входят около 100 тысяч слов. В настоящее время
он проходит еще специальную сортировку
1. Слова должны сортироваться по частоте
(Внимание: не та - общероссийская частота, а то, что употребляет
автор. Пример. например слово "труп" запрещено к употреблению
есть более романтические на этот счет слова и выражения)
0
vino0s
9 / 9 / 8
Регистрация: 26.03.2014
Сообщений: 353
30.09.2017, 10:59 14
Цитата Сообщение от йот Посмотреть сообщение
а то, что употребляет
автор
Слишком много данных в итоге будет) Но это уже следствие) Т.е. нужно будет хранить соизмеримый со словарем массив частотностей на каждого пользователя.
Цитата Сообщение от йот Посмотреть сообщение
"труп" запрещено к употреблению
Тогда ещё необходимо использовать таблицу замен: нежелательной формы, на желательную. Это все простые задачи.
Я бы конечно был бы рад если бы всё было просто)
Цитата Сообщение от йот Посмотреть сообщение
100 тысяч слов
Ну словарь небольшой а значит нет различных словоформ, здесь я сделал решение с помощью таблицы замен, в данном случае используется как поиск одинаковых слов с различными окончаниями, в связи с тем, что окончания слабо изменяют суть самого слова, исключение будет, всеми любимая ошибка (-ТСЯ, -ТЬСЯ) сейчас попробовал найти слова, но получалось с 2 ошибками, но такие вроде есть где xxxТСЯ и xxxТЬСЯ с одной ошибкой. В этом случае подойдет вектор весов для таблицы хеширования тоже не сложно делается. Тут могу углубиться, но если не понятно.

Добавлено через 3 минуты
Всё ещё намерен сделать?

Добавлено через 1 минуту
И в какой среде это все интегрируется/разрабатывается?

Добавлено через 42 секунды
Я просто по большей части дельфин
0
йот
25 / 30 / 14
Регистрация: 08.09.2017
Сообщений: 449
30.09.2017, 11:15  [ТС] 15
vino0s
Вообще говоря файлов предполагается несколько
1. Общий файл - там есть все (многое), чтобы программа
могла поговорить с незнакомцем. То есть программа может
задать вопросы о возрасте, о внешности, о работе, ... и другие
2. Файл друга - (сначала программа определит, что ее запустил
друг, которого она рада видеть) и открывает именно этот файл.
Программа не будет спрашивать ... сколько лет ... как звать
Она с визгом бросится на шею и пригласит, например, в кино...

Добавлено через 1 минуту
Программа пишется на VB6.
0
vino0s
9 / 9 / 8
Регистрация: 26.03.2014
Сообщений: 353
30.09.2017, 11:16 16
Цитата Сообщение от vino0s Посмотреть сообщение
И в какой среде это все интегрируется/разрабатывается?
Это настолько приложение, это WEB ресурс, это Мобильное приложение?
0
йот
25 / 30 / 14
Регистрация: 08.09.2017
Сообщений: 449
30.09.2017, 11:19  [ТС] 17
Программа в основном обращается на ТЫ,
так что слов нужно меньше.
0
vino0s
9 / 9 / 8
Регистрация: 26.03.2014
Сообщений: 353
30.09.2017, 11:23 18
Лучший ответ Сообщение было отмечено йот как решение

Решение

Цитата Сообщение от йот Посмотреть сообщение
Программа пишется на VB6
Ну тогда подправить надо будет:
Эту функцию я использую чтобы составить таблицу замен, её явно можно улучшить, но пока и так сойдет)
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
function TForm1.Pohozhest(fraza: string; fraza2: string; sov: integer;
  const dlsl: integer): boolean; // проверяет похожесть слов sov - это процент для определения совпадения, у меня стоит 0.79, dlsl = это длина слова, старый параметр, сейчас он тут вроде даже и не используется толком.
var
  i, j, { dc, maxdc, } kb, w, vrdl: integer;
  so: array [0 .. 20] of integer;
  vr: string;
  // b, nach: boolean;
  { sp, } ss1: real;
begin
  if fraza.length > fraza2.length then
  begin
    vr := fraza;
    fraza := fraza2;
    fraza2 := vr;
  end;
  fraza := AnsiLowerCase(fraza);
  fraza2 := AnsiLowerCase(fraza2);
  for i := 0 to 19 do
    so[i] := 0;
 
  if fraza.length < 3 then
  begin
    if AnsiCompareText(fraza, fraza2) = 0 then
      Pohozhest := true
    else
      Pohozhest := false;
  end
  else
  begin
    vrdl := 2 + fraza.length div 3;
 
    for i := 1 to fraza.length - vrdl + 2 do
    begin
      vr := '';
      for j := i to i + vrdl - 2 do
      begin
        if vr = '' then
          vr := fraza[j]
        else
          vr := vr + fraza[j];
      end;
      if AnsiPos(vr, fraza2) = i then
      begin
        so[i] := Round(1/i*10);
      end;
    end;
 
    if so[1] = 0 then
      Pohozhest := false
    else
    begin
      kb := 0;
      w := 0;
      for j := 1 to fraza.length - vrdl + 2 do
        if so[j] <> 0 then
        begin
          inc(kb);
          w := w + so[j];
        end;
 
      ss1 := kb * w / (Abs(fraza2.length - fraza.length) + 1) /
        (Abs(fraza.length - vrdl) + 1) * 10;
      if (ss1 > sov) then
      begin
        Pohozhest := true;
      end
      else
        Pohozhest := false;
    end;
  end;
end;
Преобразование транслитерации, тоже можно улучшать как описывал выше:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function TForm1.Changer(s: string): string;
const
  rus: string = 'абвгдежзийклмнопрстуфхцчшщъыьэюя';
  sw: string = 'f,dult;pbqrkvyjghcnea[wxio]sm''.z';
var
  i: integer;
  d: string;
begin
  d := s;
  for i := 1 to length(s) do
  begin
    if AnsiPos(s[i], rus) > 0 then
      d[i] := sw[Ord(s[i]) - Ord(rus[1]) + 1]
    else if AnsiPos(s[i], sw) > 0 then
      d[i] := rus[AnsiPos(s[i], sw)]
    else
      d[i] := s[i];
  end;
  Result := d;
end;
Добавлено через 2 минуты
Сделай код для хеширования по сигнатуре или считаешь, что это не то, что тебе нужно?
0
йот
25 / 30 / 14
Регистрация: 08.09.2017
Сообщений: 449
30.09.2017, 11:29  [ТС] 19
vino0s
я тут вот что хотел сказать... Английские буквы как правило
не используются. Хотя программа может писать любыми
буквами. А вот фразы пользователя идут буквами верхнего
регистра. Это удобно. Не надо преобразовывать лишний раз
в один из регистров. Ускоряет поиск, сравнение, выполнение.
0
vino0s
9 / 9 / 8
Регистрация: 26.03.2014
Сообщений: 353
30.09.2017, 11:37 20
соответственно затем получишь таблицу типа:
ХЕШ // ИНФИНИТИВНАЯ СЛОВОФОРМА // СЛОВО В ДРУГОЙ СЛОВОФОРМЕ 1 // СЛОВО В ДРУГОЙ СЛОВОФОРМЕ n // Пустой столбец

Если продумать хорошо получение самой ХЕШ таблицы, то на её основе можно убить несколько зайцев сразу, о зайцах писал выше...
Заменяем слова фразы пользователя на ХЕШи, ищем, сравниваем в пределах N-ошибок. Если оптимизировать Функции похожести и хорошая ХЕШ таблица, то в принципе можно обойтись без таблицы замен, но это трудно выполнимо, проще и быстрее сделать с ней.
Найденные ХЕШи уже методом N-грамм или хоть побуквенно, сравниваем и находим ошибку, заменяем.
Дальше уже в соответствии с ИИ

Добавлено через 50 секунд
Цитата Сообщение от йот Посмотреть сообщение
в один из регистров. Ускоряет поиск, сравнение, выполнение.
Да это тоже тонкости, у меня использовался нижний регистр)))

Добавлено через 1 минуту
Цитата Сообщение от йот Посмотреть сообщение
Английские буквы как правило
не используются
Ну я же мог уставиться в клаву и написать русские слова на английской раскладке, эта небольшая функция все исправит, её вес в том что будет происходить дальше в плане обработке ничтожно мал.

Добавлено через 3 минуты
Использование частотности использования это тоже довольно частный случай, не входит в рамки Распознавания слов, но возможно как-то может помочь ускорить поиск,
1
30.09.2017, 11:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.09.2017, 11:37

Распознавание номера машины
Уважаемые специалисты мне требуется помощь по данной теме. Имеется видеозапись. Более подробно ...

Распознавание слипшихся объектов
Как распознать слипшиеся объекты? Какие методы/алгоритмы/теории существуют Добавлено через 14...

Распознавание звукового сигнала
Здравствуйте, прошу прощения если немного не в тот раздел. Изучаю Data Science, заинтересовался...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru