Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Создаем функцию сравнения строк в одной из которых возможны перестановки слов местами / 20 сообщений из 20, страница 1 из 1
19.01.2010, 11:53
    #36417604
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создаем функцию сравнения строк в одной из которых возможны перестановки слов местами
"Serebro - Сладко (Andrei Harchenko Remix).mp3" = "Serebro - Сладко (Remix Andrei Harchenko).mp3"
Нужно оптимизировать код чтоб быстро выполнялся. Я раньше видел что-то про метод сплит, но так и не вкурил и не знаю что быстрее будет работать в цыкле или сплит.
...
Рейтинг: 0 / 0
19.01.2010, 12:16
    #36417679
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создаем функцию сравнения строк в одной из которых возможны перестановки слов местами
А где код, который надо оптимизировать? ТЗ тоже не описан.
...
Рейтинг: 0 / 0
19.01.2010, 12:33
    #36417743
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создаем функцию сравнения строк в одной из которых возможны перестановки слов местами
да вот пробую создать.

Public Function PorivnannaVDujkah(ByVal Vhid1 As String, ByVal Vhid2 As String) As Boolean
Dim varArray() As String
Dim i As Long
varArray = Split(Vhid1, " ")
If UBound(varArray) = 0 Then Exit Function
For i = 0 To UBound(varArray)
If InStr(1, Vhid2, varArray(i), vbTextCompare) Then
'Vhid2=replace(vhid2,varArray(i),"" ' Забыл ф-цию чтоб быстро вставить нужное к-чество одного символа

else
'exit function
End If
Next
End Function
...
Рейтинг: 0 / 0
19.01.2010, 12:33
    #36417746
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создаем функцию сравнения строк в одной из которых возможны перестановки слов местами
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Public Function PorivnannaVDujkah(ByVal Vhid1 As String, ByVal Vhid2 As String) As Boolean
Dim varArray() As String
Dim i As Long
varArray = Split(Vhid1, " ")
If UBound(varArray) =  0  Then Exit Function
For i =  0  To UBound(varArray)
If InStr( 1 , Vhid2, varArray(i), vbTextCompare) Then
'Vhid2=replace(vhid2,varArray(i),"" ' Забыл ф-цию чтоб быстро вставить нужное к-чество одного символа

else
'exit function 
End If
Next
End Function
...
Рейтинг: 0 / 0
19.01.2010, 12:49
    #36417805
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создаем функцию сравнения строк в одной из которых возможны перестановки слов местами
Я лично не понял, что вы хотели этим алгоритмом.

Напишите плиз техзадание, как должен работать алгоритм, что на входе, что на выходе.
...
Рейтинг: 0 / 0
19.01.2010, 13:17
    #36417891
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создаем функцию сравнения строк в одной из которых возможны перестановки слов местами
ну я думал разобрать на слова. дальше каждое найденое слово заменить на какой-то символ, чтоб результат был например =ХХХХХХХХ и len(задания) и если один раз не найден слово значит выход из ф-ции и автоматически результат "фалсе"
...
Рейтинг: 0 / 0
19.01.2010, 13:19
    #36417894
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создаем функцию сравнения строк в одной из которых возможны перестановки слов местами
Алгоритм такой: обе строки разбиваются пробелом, у получившихся массивов сравнивается количество элементов. Если одинаковое, массивы сортируются и сравниваются поэлементно.

Андрей159, ваш алгоритм вернет true, если первая строка "Serebro - Сладко", а вторая "Serebro - Сладко (Remix Andrei Harchenko)" и false если наоборот.

Jah loves you.
...
Рейтинг: 0 / 0
19.01.2010, 13:20
    #36417898
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создаем функцию сравнения строк в одной из которых возможны перестановки слов местами
Еще раз.

Напишите ТЗ. Что должно быть на входе, что на выходе?
С помощью ЕДИНСТВЕННОГО примера это не ясно.
То ли пятое слово с седьмым поменять
То ли найти строго заданные слова (тогда неясно, зачем цикл вообще, достаточно Replace)
То ли найти подстроку? а потом расширить до слова
То ли..... (еще десять вариантов)
...
Рейтинг: 0 / 0
19.01.2010, 13:21
    #36417902
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создаем функцию сравнения строк в одной из которых возможны перестановки слов местами
А, блин, нашел часть ТЗ в названии темы, сорри
...
Рейтинг: 0 / 0
19.01.2010, 13:22
    #36417905
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создаем функцию сравнения строк в одной из которых возможны перестановки слов местами
На выходе должно быть, что строка из N слов равна другой строке из тех же слов не зависимо от их порядка. И не равна если количество слов разное или они отличаются.

Jah loves you.
...
Рейтинг: 0 / 0
19.01.2010, 13:27
    #36417921
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создаем функцию сравнения строк в одной из которых возможны перестановки слов местами
AntonariyНа выходе должно быть, что строка из N слов равна другой строке из тех же слов не зависимо от их порядка. И не равна если количество слов разное или они отличаются.


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


Твой алгоритм годится, только надо учесть скобки, но тут уже вопрос к автору - что с ними делать?
...
Рейтинг: 0 / 0
19.01.2010, 13:33
    #36417949
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создаем функцию сравнения строк в одной из которых возможны перестановки слов местами
Ну да, а так же прочие знаки препинания.
Лучше даже воспользоваться регулярными выражениями с паттерном типа "[а-яёa-z]+" с IgnoreCase.

Jah loves you.
...
Рейтинг: 0 / 0
19.01.2010, 13:35
    #36417957
.Михаил.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создаем функцию сравнения строк в одной из которых возможны перестановки слов местами
Андрей159"Serebro - Сладко (Andrei Harchenko Remix).mp3" = "Serebro - Сладко (Remix Andrei Harchenko).mp3"
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Sub eee()
Dim str As String, i As Integer, flag As Boolean
Dim myWords() As String, myWordsCount As Integer
str = "Serebro - Серебро (Andrei Harchenko Remix).mp3"
myWordsCount =  1 
ReDim Preserve myWords(myWordsCount)
myWords(myWordsCount) = ""
flag = True
For i =  1  To Len(str)
    If Mid(str, i,  1 ) Like "[A-zА-я0-9]" Then
        myWords(myWordsCount) = myWords(myWordsCount) & Mid(str, i,  1 )
        flag = True
    Else
        If flag Then
            myWordsCount = myWordsCount +  1 
            ReDim Preserve myWords(myWordsCount)
            myWords(myWordsCount) = ""
            flag = False
        End If
    End If
Next
For i =  1  To myWordsCount
    MsgBox myWords(i)
Next
End Sub
пысы: за универсальность макроса не отвечаю, делал на скорую руку... думаю поможет
...
Рейтинг: 0 / 0
19.01.2010, 13:37
    #36417960
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создаем функцию сравнения строк в одной из которых возможны перестановки слов местами
AntonariyНу да, а так же прочие знаки препинания.
Лучше даже воспользоваться регулярными выражениями с паттерном типа "[а-яёa-z]+" с IgnoreCase.

Да, но человек хочет скорости. Так что с точки зрения скорости может быть проще поудалять заведомо могущие встретиться знаки препинания
...
Рейтинг: 0 / 0
19.01.2010, 15:33
    #36418341
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создаем функцию сравнения строк в одной из которых возможны перестановки слов местами
.Михаил.,
Вы пока что написали извлечение слов, то, что делает паттерн "[а-яёa-z]+".

Shocker.Pro Так что с точки зрения скорости может быть проще поудалять заведомо могущие встретиться знаки препинанияС этой точки зрения лучше слепить все пары строк в единый текст и таки скормить его регэкспу.
...
Рейтинг: 0 / 0
19.01.2010, 16:05
    #36418436
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создаем функцию сравнения строк в одной из которых возможны перестановки слов местами
Спасибо друзья, что помогаете. Я с Вам дам готовый уже проэкт, очень к стати не плохой в использовании. У меня уже практически все работает. Я только постоянно что-то добавляю и тем самим увеличиваю количество находок. Если кто-небудь интересовался чем я интересуюсь то изначально я занимался апаратом бумбокс (что проигрует музыка) а уже пол года как усовершенствую поиск и сортировку музыки. На даном этапе я максимально упростил таблицы причем все написано на базе open random. Удаление там через флаг Delete=true и с использованием алгоритма ускореного перехода по записи (тоесть если первый символ "А") значит в таблице есть поле которое указывает следующий шаг для такой буквы. Короче поработал и внимательно проследил чтоб не было ошибок. Фильтра все упростил до такой степени что при вводе "Filip Kirkorofff - А я і не 3NaaaaaI" упрощается и всеровано найдет и исполнителя и его песню. Алгоритм кому интересно прост. w=ш=h=.... ну как в Т9 искал все способы написания.

Задача теперь в том чтоб:
есть названия как "артист1 & артист2 & артист3 - название трека" = "артист1 - название трека (vs артист2, артист3), при том (артист2 и артист3) могут менятся как угодно местами - это уже сделано.

Суть:
Но вот я решил что я не смогу все отловить, ведь "суденты" диджеи правил написаний строгих не знают и подписиваю треки как им хочется. И получается так: артист1 - название трека (rmx DJ Fisun) , или пишут так артист1 - название трека (DJ Fisun remix) а если еще и & там есть то еще более усложняет. Ну с remix=rmx это не сложно а вот с перестановкой слов немножко сложно. Да и хочу чтоб прога менше мне давала запросов "научи это", "введи это". Хоть бы больше догоняла что это и это всетаки одно и тоже. Еще раз всем спасибо. Иду в кино на 3д смотреть "Аватар" потом посмотрю и выложу код который более подходит к заданию. Спасибо что помогаете.

Если коротко, то я хочу отловить все что в скобках "(",")" и проверять их на совместимось. Это суть.
с уважением Андрей
...
Рейтинг: 0 / 0
19.01.2010, 17:49
    #36418783
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создаем функцию сравнения строк в одной из которых возможны перестановки слов местами
"(",")"
Это похоже на жо… кхм :) Пойду пожалуюсь модератору

Собственно, суть все уже поняли и концептуальное решение дали, пользуйтесь.
...
Рейтинг: 0 / 0
19.01.2010, 18:05
    #36418844
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создаем функцию сравнения строк в одной из которых возможны перестановки слов местами
Андрей159,

Тут вот какой вопрос. Данная функция выносит окончательный вердикт или является вспомогательной для помощи в принятии окончательного решения человеком?

А то есть одна идейка во втором случае....
...
Рейтинг: 0 / 0
19.01.2010, 21:06
    #36419116
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создаем функцию сравнения строк в одной из которых возможны перестановки слов местами
Анализируя как работает программа, пока что кажется что с распознаванием мне пока нечего больше что добавить. Меня устраивает распознавание. Я в восторге от скорости распознования. За счет ссилок с базы на базу и индексирования (не как отдельная ф-ция а в момент добавления новой записи + есть возможность переиндексиции)
Вход
- Имея базу размером с ~5000 артистов
- краткие сокращения (процес обучения)
- пофамильно (если имья не указано)
- краткое написание (И.Фамилия)
- если папку брать за имя артиста (даже предыдущую), а название как трек
Выход
все то же + еще
- url на загрузку
- путь
- ссилка на диаграму что в базе даных open binary образована в процесе сканирования mp3 и нужна чтоб очень быстро сравнить треки на идентичность


Все вроде как бы решилось. Вот только с одно до конца не могу завершить, и наверное это будет не просто: Артист1 и Артист2, где "и" я не могу расценивать как значек "&" по понятной всем причине. Сделать логику на два три хода с догадкой в % о авто принятие решения за пользователя может замедлить ход распознавания, но в цыкле это могло бы быть и полезным (это пока не решено). Но без этого можно и обойтись. Есть много решений как сделать одно и то же только другими методами.
...
Рейтинг: 0 / 0
19.01.2010, 21:33
    #36419146
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создаем функцию сравнения строк в одной из которых возможны перестановки слов местами
Ну что. Окончательную точку поставил. Не судите за то что не использовал Ваш код. Ваши методы тоже полезны. Я например так и не ознакомился с LIKE . А освоив этот метод я 100% буду немножко упрощивать кое-что в проге (уже знаю что).
Так. Меня не было 5 часов. И вот только что доработал. Я оказывается был возле развязки рядом.
Вот код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
'Порівняти текст що в дужках, в якому можуть бути переставлені навіть місцями слова
Public Function PorivnannaVDujkah(ByVal Vhid1 As String, ByVal Vhid2 As String) As Boolean
 Dim varArray() As String
 Dim i As Long
 Vhid2 = LCase(Vhid2)
 varArray = Split(LCase(Vhid1), " ")
   If UBound(varArray) =  0  Then Exit Function
   For i =  0  To UBound(varArray)
       If InStr( 1 , Vhid2, varArray(i), vbTextCompare) Then
         Vhid2 = Replace(Vhid2, varArray(i), "")
       Else
         Exit Function
       End If
   Next
 PorivnannaVDujkah = (Trim(Vhid2) = "")
End Function
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Создаем функцию сравнения строк в одной из которых возможны перестановки слов местами / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]