|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Похожее часть слова
Привет всем.
Допустим имеются несколько слов: 1. маршрут 2. ашот 3. миршот, ... Также задано ключевое слово: март. Есть ли возможность получить только похожую часть всех слов. Ожидаемый результат: 1. март 2. ат 3. мрт Пробовал регулярным выражением типа: м*а*р*т*. Результат такой: 1. мар 2. р 3. т 4. а 5. 6. т 7. м 8. р 9. 10. т |
#2
|
|||
|
|||
Что понимается под "получить только похожую часть"? Если нет правила, то у вас одно понятие, у меня другое, у компьютера третье.
Хотя догадываюсь: ищется первая буква из шаблона, если нет, то следующая. Как только она находится, у шаблона эта буква изымается из поиска, переходим к следующей, а поиск продолжается с нового места. Последний раз редактировалось AlexSku, 05.01.2012 в 10:58. |
#3
|
|||
|
|||
Я же показал пример, надо чтою результат был таким: март, ат, мрт
А у меня получается: мар р т а т м р т |
#4
|
|||
|
|||
Код:
procedure TForm1.Button1Click(Sender: TObject); var Pattern, S, Res: String; I, J: Integer; begin Pattern:= AnsiUpperCase(Edit1.Text); // 'Март' S:= AnsiUpperCase(Edit2.Text); // Можно из ListBox, Memo... Res:= ''; J:= 1; for I:= 1 to Length(Pattern) do begin J:= Pos(Pattern[i], S); if J > 0 then begin Res:= Res + Pattern[i]; Delete(S, J, 1); if S = '' then Break; end; end; Edit3.Text:= Res; end; |
#5
|
|||
|
|||
Хороший код, но он меняет местами букв. Например: Pattern:='shina' S:='hasan'. hasan становится shna, а должно было hasn
|
#6
|
|||
|
|||
Если что не так, то код плохой. Нашёл ошибку, надо:
Код:
Delete(S, 1, J); Если надо сравнить общие буквы, то алгоритм такой: первое слово это множество букв, второе слово это другое множество букв, совпадение это пересечение множеств (Set1 * Set2). Последний раз редактировалось AlexSku, 05.01.2012 в 14:45. |
#7
|
|||
|
|||
|
#8
|
|||
|
|||
А всё-таки вы не ответили, что вы понимаете под "найти похожую часть слов". У меня, кстати, есть реализация другого алгоритма (Боера-Мура), вычисляющую степень похожести, как и ваш алгоритм Левенштейна, но неохота его искать, не зная, для какой задачи вы ищете решение.
|