Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2008.05.18;
Скачать: [xml.tar.bz2];

Вниз

список замен   Найти похожие ветки 

 
kiberg   (2008-04-02 13:22) [0]

Нужно сделать список замен для неправильного слова (очепятки):

Возможные очепятки:
1) поставлена лишняя буква
2) пропущена буква
3) поставлена неверная буква
4) две соседние буквы поменялись местами

Я создаю список возможных исправлений, а потом проверяю их в словаре. Найденные считаю верными.

У меня проблема в скорости работы алгоритма.
Если проверять один уровень вложенности ошибок, то впринципе все нормально 66n+31 варианта замен. Но если нужно проверить два уровня вложенности ошибок и слово длинное, то начинаются тормоза.

Как можно оптимизировать алгоритм?


 
Johnmen ©   (2008-04-02 13:23) [1]


> Как можно оптимизировать алгоритм?

Какой алгоритм?


 
Reindeer Moss Eater ©   (2008-04-02 13:24) [2]

надо составить пары строк - регулярное выражение, "узнающее" искаженное слово и само слово с правильной формой.


 
Дмитрий С   (2008-04-02 13:26) [3]

А не проще словарь перебирать?


 
Reindeer Moss Eater ©   (2008-04-02 13:27) [4]

словарь перебрать проще. только что это даст?


 
Дмитрий С   (2008-04-02 13:42) [5]

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


 
Reindeer Moss Eater ©   (2008-04-02 13:45) [6]

я напишу функцию, которая из "мама" сделает "папа"


 
Дмитрий С   (2008-04-02 13:46) [7]


> я напишу функцию, которая из "мама" сделает "папа"
>

А кто виноват, что ты не ту функцию напишешь =)))


 
Reindeer Moss Eater ©   (2008-04-02 13:46) [8]

два раза пункт 3 - и вот мама стала папой.
будем менять?


 
Дмитрий С   (2008-04-02 13:48) [9]

слово МАМА и так в словаре должно быть, зачем чтото с ним делать?


 
Reindeer Moss Eater ©   (2008-04-02 13:53) [10]

Хорошо.
Сканируем словарь пр алфавиту и доходим в нем до "мама"
В тексте встречаем слово "папа" (до него в словаре еще не дошли)
и "папа" этой функцией превращается в "мама"


 
Игорь Шевченко ©   (2008-04-02 14:08) [11]

Если в слове ХЛЕБ сделать четыре ошибки, получится ПИВО.

По сабжу - была нужда сравнивать русские фамилии, написанные латиницей.
Фамилия из словаря и фамилия исходная приводились к единому виду (удалялась часть букв, часть сочетаний букв преобразовывалась, и т.д.)
пребразованные сравнивались.
Для моих нужд хватало.


 
kiberg   (2008-04-02 14:15) [12]


> Johnmen ©   (02.04.08 13:23) [1]
>
> > Как можно оптимизировать алгоритм?
>
> Какой алгоритм?


1) Беру неизвестное слов
2) Из него создаю возможный список исправелний, т.е. перебираю все варианты ошибок.
3) Проверяю есть ли в этом списке известные слова. Если да, то возвращаю эти слова и выхожу из алгоритма. Если нет, то для каждого слова из этого списка опять создаю новый список возможных исправлений
4) Проверяю есть ли в новом списке известные слова, если ни одного нет, то выход, если есть вывожу их.


 
Kolan ©   (2008-04-02 14:21) [13]

Лучьше используй какой-нибудь алгоритм нечеткого сравнения строк.


 
Reindeer Moss Eater ©   (2008-04-02 14:22) [14]

1) Беру неизвестное слов
"рара" например

2) Из него создаю возможный список исправелний, т.е. перебираю все варианты ошибок.
мама, папа, пиво, ....

3) Проверяю есть ли в этом списке известные слова. Если да, то возвращаю эти слова и выхожу из алгоритма. Если нет, то для каждого слова из этого списка опять создаю новый список возможных исправлений4)
есть есть. причем до фига есть.

Проверяю есть ли в новом списке известные слова, если ни одного нет, то выход, если есть вывожу их.

Есть, и не одно.

что дальше?


 
Johnmen ©   (2008-04-02 14:22) [15]


> kiberg   (02.04.08 14:15) [12]

1.ХЛЕБ
 |
2. ПЛЕБ, ХИЕБ, ХЛВБ, ХЛЕО, ПИВО
 |
3. известное слово есть, это ПИВО. Выводим ПИВО, выходим.

Я правильно понял?


 
Reindeer Moss Eater ©   (2008-04-02 14:24) [16]

Неправильно. Пляшем от неузнанного слова.


 
Johnmen ©   (2008-04-02 14:25) [17]

Неузнанное слово - ХЛЕБ.
Кстати, что значит "неузнанное"?


 
Reindeer Moss Eater ©   (2008-04-02 14:26) [18]

"хлеб" есть в словаре. оно "узнанное"


 
Johnmen ©   (2008-04-02 14:27) [19]

Хорошо.
Пусть неузнанное слово - ХЛЁБ.


 
Reindeer Moss Eater ©   (2008-04-02 14:28) [20]

Тогда [14]


 
kiberg   (2008-04-02 14:29) [21]


> Kolan ©   (02.04.08 14:21) [13]
> Лучьше используй какой-нибудь алгоритм нечеткого сравнения
> строк.



> Reindeer Moss Eater ©   (02.04.08 14:22) [14]
> Есть, и не одно.
>
> что дальше?


Все, результат получен, вывожу на экран


> Johnmen ©   (02.04.08 14:22) [15]
>
> > kiberg   (02.04.08 14:15) [12]
>
> 1.ХЛЕБ
>  |
> 2. ПЛЕБ, ХИЕБ, ХЛВБ, ХЛЕО, ПИВО
>  |
> 3. известное слово есть, это ПИВО. Выводим ПИВО, выходим.
>
>
> Я правильно понял?


Правильно так

1.ХЛИБ
|
2. ПЛИБ, ХИИБ, ХЛВБ, ХЛЕБ B т.д
|
3. известное слово есть, это ХЛЕБ. Выводим ХЛЕБ, выходим.


 
Johnmen ©   (2008-04-02 14:29) [22]

[14] похоже на [15]


 
Reindeer Moss Eater ©   (2008-04-02 14:30) [23]

Все, результат получен, вывожу на экран

всех экранов федерации не хватит на такой результат


 
Johnmen ©   (2008-04-02 14:31) [24]


> kiberg   (02.04.08 14:29) [21]

По какому алшоритму сформировался волшебный список 2. ПЛИБ, ХИИБ, ХЛВБ, ХЛЕБ?
И что, если в этом списке будет ХЛЕВ?


 
kiberg   (2008-04-02 14:31) [25]


> Reindeer Moss Eater ©   (02.04.08 14:30) [23]
> Все, результат получен, вывожу на экран
>
> всех экранов федерации не хватит на такой результат


Да ладно!

У меня максимум получается штук десять.


 
Reindeer Moss Eater ©   (2008-04-02 14:32) [26]

И что, если в этом списке будет ХЛЕВ?

Там будут вообще все слова из словаря из четырех букв и даже наверное не только из четырех.


 
Рамиль ©   (2008-04-02 14:35) [27]


> Пусть неузнанное слово - ХЛЁБ.

Получаем ХЛЕБ, есть в словаре, выходим.


 
Mystic ©   (2008-04-02 14:35) [28]

> Проверяю есть ли в этом списке известные слова.

Вот тут подробнее. Список отсортирован? Поиск бинарный?


 
Рамиль ©   (2008-04-02 14:35) [29]


> Рамиль ©   (02.04.08 14:35) [27]

Сорри, страницу не посмотрел.


 
Reindeer Moss Eater ©   (2008-04-02 14:36) [30]

У меня максимум получается штук десять.

потому что алгоритм с условностями и исправляет варианты, которые ты просчитал сам.


 
kiberg   (2008-04-02 14:36) [31]


> Johnmen ©   (02.04.08 14:31) [24]
>
> > kiberg   (02.04.08 14:29) [21]
>
> По какому алшоритму сформировался волшебный список 2. ПЛИБ,
>  ХИИБ, ХЛВБ, ХЛЕБ?
> И что, если в этом списке будет ХЛЕВ?


1) удаляю одну букву из слова = n вариантов
2) добавляю одну букву алфавита в какое нибудь место слова = 32(n+1) варианта
3) меняю соседние буквы = n-1 вариант
4) заменяю какую-нибудь букву в слова на другую 32n варианта

если будет два или больше подходящих слова, то вывожу на экран


 
Johnmen ©   (2008-04-02 14:36) [32]


> Рамиль ©   (02.04.08 14:35) [27]

Пора прочитать и осознать [14], [15] и [24].


 
Reindeer Moss Eater ©   (2008-04-02 14:38) [33]

1) удаляю одну букву из слова = n вариантов
2) добавляю одну букву алфавита в какое нибудь место слова = 32(n+1) варианта
3) меняю соседние буквы = n-1 вариант
4) заменяю какую-нибудь букву в слова на другую 32n варианта

если будет два или больше подходящих слова, то вывожу на экран


У тебя там будет не два и более слова, а весь словарь.


 
kiberg   (2008-04-02 14:38) [34]


> > Проверяю есть ли в этом списке известные слова.
>
> Вот тут подробнее. Список отсортирован? Поиск бинарный?


Список замен не отсортирован, я его перебираю весь. Словарь хеширован.


 
Reindeer Moss Eater ©   (2008-04-02 14:39) [35]

или почти весь. все зависит от лимита ошибок на слово.


 
Johnmen ©   (2008-04-02 14:40) [36]


> kiberg   (02.04.08 14:36) [31]

+
Как можно оптимизировать алгоритм?

Этот алгоритм надо выкинуть.


 
kiberg   (2008-04-02 14:41) [37]


> Reindeer Moss Eater ©   (02.04.08 14:38) [33]
> У тебя там будет не два и более слова, а весь словарь.


Как там может быть весь словарь. Возьмем, например, слово ХЛИБ. Сколько ты можешь сходу придумать правильных вариантов кроме как ХЛЕБ?


 
kiberg   (2008-04-02 14:42) [38]


> Reindeer Moss Eater ©   (02.04.08 14:39) [35]
> или почти весь. все зависит от лимита ошибок на слово.


Максимум две ошибки на слово, и то с ограничениями.


> Johnmen ©   (02.04.08 14:40) [36]
>
> > kiberg   (02.04.08 14:36) [31]
>
> +
> Как можно оптимизировать алгоритм?
>
> Этот алгоритм надо выкинуть.


Предложи другой


 
Reindeer Moss Eater ©   (2008-04-02 14:43) [39]

все слова из словаря из четырех букв - раз
все слова на три буквы - ошибка с пропущеной буквой
все слова на пять букв - ошибка с лишней буквой.

а если учесть, что пропасть может не одна и лишних может быть не одна, то считай сам.


 
kiberg   (2008-04-02 14:49) [40]


> Reindeer Moss Eater ©   (02.04.08 14:43) [39]
> все слова из словаря из четырех букв - раз
> все слова на три буквы - ошибка с пропущеной буквой
> все слова на пять букв - ошибка с лишней буквой.
>
> а если учесть, что пропасть может не одна и лишних может
> быть не одна, то считай сам.


Как можно сделав всего две ошибки в слове получить все слова из 3, 4 и 5 букв? При том, что проверив только на возможность одной ошибки получаем правильный вариант, т.е. две ошибки сразу же не рассматриваются.



Страницы: 1 2 3 вся ветка

Форум: "Прочее";
Текущий архив: 2008.05.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.05 c
9-1169849373
Pa5ha
2007-01-27 01:09
2008.05.18
Как быстро рисовать на канве?


2-1208369217
Blasphemie
2008-04-16 22:06
2008.05.18
Автоматическое изменение полей записи - как?


3-1197011406
Свой
2007-12-07 10:10
2008.05.18
Получение данных полсле запроса от TQuery


2-1208605373
lewka-serdceed
2008-04-19 15:42
2008.05.18
Защита от копирования


2-1208530727
che
2008-04-18 18:58
2008.05.18
Вопрос жизни и смерти





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский