powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Создаем функцию сравнения строк в одной из которых возможны перестановки слов местами
20 сообщений из 20, страница 1 из 1
Создаем функцию сравнения строк в одной из которых возможны перестановки слов местами
    #36417604
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Serebro - Сладко (Andrei Harchenko Remix).mp3" = "Serebro - Сладко (Remix Andrei Harchenko).mp3"
Нужно оптимизировать код чтоб быстро выполнялся. Я раньше видел что-то про метод сплит, но так и не вкурил и не знаю что быстрее будет работать в цыкле или сплит.
...
Рейтинг: 0 / 0
Создаем функцию сравнения строк в одной из которых возможны перестановки слов местами
    #36417679
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А где код, который надо оптимизировать? ТЗ тоже не описан.
...
Рейтинг: 0 / 0
Создаем функцию сравнения строк в одной из которых возможны перестановки слов местами
    #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
Создаем функцию сравнения строк в одной из которых возможны перестановки слов местами
    #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
Создаем функцию сравнения строк в одной из которых возможны перестановки слов местами
    #36417805
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я лично не понял, что вы хотели этим алгоритмом.

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

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

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

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

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


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


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

Jah loves you.
...
Рейтинг: 0 / 0
Создаем функцию сравнения строк в одной из которых возможны перестановки слов местами
    #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
Создаем функцию сравнения строк в одной из которых возможны перестановки слов местами
    #36417960
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyНу да, а так же прочие знаки препинания.
Лучше даже воспользоваться регулярными выражениями с паттерном типа "[а-яёa-z]+" с IgnoreCase.

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

Shocker.Pro Так что с точки зрения скорости может быть проще поудалять заведомо могущие встретиться знаки препинанияС этой точки зрения лучше слепить все пары строк в единый текст и таки скормить его регэкспу.
...
Рейтинг: 0 / 0
Создаем функцию сравнения строк в одной из которых возможны перестановки слов местами
    #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
Создаем функцию сравнения строк в одной из которых возможны перестановки слов местами
    #36418783
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"(",")"
Это похоже на жо… кхм :) Пойду пожалуюсь модератору

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

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

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


Все вроде как бы решилось. Вот только с одно до конца не могу завершить, и наверное это будет не просто: Артист1 и Артист2, где "и" я не могу расценивать как значек "&" по понятной всем причине. Сделать логику на два три хода с догадкой в % о авто принятие решения за пользователя может замедлить ход распознавания, но в цыкле это могло бы быть и полезным (это пока не решено). Но без этого можно и обойтись. Есть много решений как сделать одно и то же только другими методами.
...
Рейтинг: 0 / 0
Создаем функцию сравнения строк в одной из которых возможны перестановки слов местами
    #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
20 сообщений из 20, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Создаем функцию сравнения строк в одной из которых возможны перестановки слов местами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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