Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Нечеткое сравнение строк. Добавлено: 25.02.09 16:31  

Автор вопроса:  Nord
не могу найти помощь по форуму по этому спрашиваю хотя скорее всего был уже этот вопрос...

нету ни у кого функции приблизительного(нечеткого) сравнения строк?

Ответить

  Ответы Всего ответов: 9  

Номер ответа: 1
Автор ответа:
 fAndOrIn



Вопросов: 5
Ответов: 344
 Профиль | | #1 Добавлено: 25.02.09 17:22
Если имеешь в виду сравнение по шаблону (маске), то попробуй разобраться здесь - http://www.microsoft.com/Rus/Msdn/Activ/MSVB/Archive/VBA/Decoder/VBVariables2.mspx.
А если пытаешься получить равенство следующих строк:
"ABBA"="АВВА";(или " AB,BA!";), где 1-е - шведская группа, 2-е - АО, кинувшее многих россиян, пообещав всем по машине в обмен на ваучер, 3-е - не знаю, что, но иногда приходиться и такое сравнить(приравнять!)
и тому подобных. Если интересует этот вариант, то могу поискать - когда-то делал подобное.

Ответить

Номер ответа: 2
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #2
Добавлено: 25.02.09 17:31
регэкспы юзай

Ответить

Номер ответа: 3
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #3 Добавлено: 25.02.09 21:28
Like

Ответить

Номер ответа: 4
Автор ответа:
 AngryBadger



Вопросов: 33
Ответов: 245
 Профиль | | #4 Добавлено: 25.02.09 22:26
Filter(sourcesrray, match[, include[, compare]];)


http://vbnet.ru/vbguide/showfunction.asp?id=16

Если я правильно вопрос понял...

Ответить

Номер ответа: 5
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #5
Добавлено: 26.02.09 00:21
Расстояние Левенштейна

Ответить

Номер ответа: 6
Автор ответа:
 Nord



Вопросов: 15
Ответов: 28
 Профиль | | #6 Добавлено: 27.02.09 14:28
надо найти насколько похожи 2 строки.
АВВА=АВВА - 100%
АВВА=АВВХА - х%
.... вот как найти эти проценты... поисковик выдает много вариантов на дельфях и ни одного на бэйсике, похоже придется дельфи переписывать =)

Ответить

Номер ответа: 7
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #7
Добавлено: 27.02.09 14:43
Как дать тебе точное решение, если ты не формализуешь алгоритм? Если бы ты сказал, что АВВА=АВВХА - 75% и пояснил, что считается скажем число совпавших символов до первого несовпадения к числу символов в первом слове, то думаю тебе бы могли написать вполне рабочий код. Либо совпадающие символы подсчитываются по их весам, либо по количеству и набору совпадающих букв в слове и их порядку. Вариантов много.

Ответить

Номер ответа: 8
Автор ответа:
 Nord



Вопросов: 15
Ответов: 28
 Профиль | | #8 Добавлено: 05.03.09 11:35
нашел на просторах инета выкладываю вдруг кому пригодится
  1.  
  2. Нечеткое сравнение строк
  3. Аргументы: lngMaxLen - максимальная длина сравниваемых подстрок (читайте описание алгоритма сравнения строк), strStringMatching - первая строка, strStringStandart - вторая строка, lngCase - тип сравнения (с учётом регистра или без учёта) Назначение: Нечеткое сравнение двух строк Возвращает: Возвращает коэффициент совпадения строк от 0 до 100 ( 0 - строки не совпадают, 100 - полное совпадение Алгоритм сравнения строк Функция нечёткого сравнения использует в качестве аргументов две строки и параметр сравнения - максимальную длину сравниваемых подстрок. Результатом работы функции является число, лежащее в пределах от 0 до 1. 0 соответствует полному несовпадению двух строк, а 1 - полной (в определённом ниже смысле) их идентичности. Сравнение строк происходит по следующей схеме. Пусть, например, в качестве аргументов заданы две строки "test" и "text" и некоторая максимальная длина подстрок, скажем, 4. Функция сравнения составляет все возможные комбинации подстрок с длинной вплоть до указанной и подсчитывает их совпадения в двух сравниваемых строках. Количество совпадений, разделённое на число вариантов, объявляется коэффициентом схожести строк и выдаётся в качестве результата работы функции.
  4.  
  5. Public Type RetCount
  6. lngSubRows As Long
  7. lngCountLike As Long
  8. End Type
  9.  
  10. Public Function IndistinctMatching(lngMaxLen As Long, strStringMatching As String, strStringStandart As String, lngCase As Long) As Long
  11. Dim gret As RetCount
  12. Dim tret As RetCount
  13. Dim lngCurLen As Long  
  14.  
  15. If lngMaxLen = 0 Or Len(strStringMatching) = 0 Or Len(strStringStandart) = 0 Then
  16.     IndistinctMatching = 0
  17.     Exit Function
  18. End If
  19. gret.lngCountLike = 0
  20. gret.lngSubRows = 0
  21. For lngCurLen = 1 To lngMaxLen
  22.     tret = MatchingStrings(strStringMatching, strStringStandart, lngCurLen, lngCase)
  23.     gret.lngCountLike = gret.lngCountLike + tret.lngCountLike
  24.     gret.lngSubRows = gret.lngSubRows + tret.lngSubRows
  25.     tret = MatchingStrings(strStringStandart, strStringMatching, lngCurLen, lngCase)
  26.     gret.lngCountLike = gret.lngCountLike + tret.lngCountLike
  27.     gret.lngSubRows = gret.lngSubRows + tret.lngSubRows
  28. Next lngCurLen
  29. If gret.lngSubRows = 0 Then
  30.     IndistinctMatching = 0
  31.     Exit Function
  32. End If
  33. IndistinctMatching = (gret.lngCountLike / gret.lngSubRows) * 100
  34. End Function
  35.  
  36. Public Function MatchingStrings(strA As String, strB As String, lngLen As Long, lngCase As Long) As RetCount
  37. Dim tret As RetCount
  38. Dim y As Long, z As Long
  39. Dim strta As String
  40. Dim strtb As String
  41.  
  42. For z = 1 To Len(strA) - lngLen + 1
  43.     strta = Mid(strA, z, lngLen)
  44.     y = 1
  45.     For y = 1 To Len(strB) - lngLen + 1
  46.         strtb = Mid(strB, y, lngLen)
  47.         If StrComp(strta, strtb, lngCase) = 0 Then
  48.             tret.lngCountLike = tret.lngCountLike + 1
  49.             Exit For
  50.         End If
  51.     Next y
  52.     tret.lngSubRows = tret.lngSubRows + 1
  53. Next z
  54. MatchingStrings.lngCountLike = tret.lngCountLike
  55. MatchingStrings.lngSubRows = tret.lngSubRows
  56. End Function
  57.  

Ответить

Номер ответа: 9
Автор ответа:
 Nord



Вопросов: 15
Ответов: 28
 Профиль | | #9 Добавлено: 05.03.09 11:39
забыл копирайт воткнуть, а отредактить сообщение нельзя ... как-то не удобно совсем =\
copy from http://ms.by.ru/HTML/37.htm
А блин только щас нашел поиск по форуму! %)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам