Страница: 1 |
|
Вопрос: Нечеткое сравнение строк.
|
Добавлено: 25.02.09 16:31
|
|
Автор вопроса: Nord
|
не могу найти помощь по форуму по этому спрашиваю хотя скорее всего был уже этот вопрос...
нету ни у кого функции приблизительного(нечеткого) сравнения строк?
Ответить
|
Номер ответа: 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-е - не знаю, что, но иногда приходиться и такое сравнить(приравнять!)
и тому подобных. Если интересует этот вариант, то могу поискать - когда-то делал подобное.
Ответить
|
Номер ответа: 8 Автор ответа: Nord
Вопросов: 15 Ответов: 28
|
Профиль | | #8
|
Добавлено: 05.03.09 11:35
|
нашел на просторах инета выкладываю вдруг кому пригодится
-
- Нечеткое сравнение строк
- Аргументы: lngMaxLen - максимальная длина сравниваемых подстрок (читайте описание алгоритма сравнения строк), strStringMatching - первая строка, strStringStandart - вторая строка, lngCase - тип сравнения (с учётом регистра или без учёта) Назначение: Нечеткое сравнение двух строк Возвращает: Возвращает коэффициент совпадения строк от 0 до 100 ( 0 - строки не совпадают, 100 - полное совпадение Алгоритм сравнения строк Функция нечёткого сравнения использует в качестве аргументов две строки и параметр сравнения - максимальную длину сравниваемых подстрок. Результатом работы функции является число, лежащее в пределах от 0 до 1. 0 соответствует полному несовпадению двух строк, а 1 - полной (в определённом ниже смысле) их идентичности. Сравнение строк происходит по следующей схеме. Пусть, например, в качестве аргументов заданы две строки "test" и "text" и некоторая максимальная длина подстрок, скажем, 4. Функция сравнения составляет все возможные комбинации подстрок с длинной вплоть до указанной и подсчитывает их совпадения в двух сравниваемых строках. Количество совпадений, разделённое на число вариантов, объявляется коэффициентом схожести строк и выдаётся в качестве результата работы функции.
-
- Public Type RetCount
- lngSubRows As Long
- lngCountLike As Long
- End Type
-
- Public Function IndistinctMatching(lngMaxLen As Long, strStringMatching As String, strStringStandart As String, lngCase As Long) As Long
- Dim gret As RetCount
- Dim tret As RetCount
- Dim lngCurLen As Long
-
- If lngMaxLen = 0 Or Len(strStringMatching) = 0 Or Len(strStringStandart) = 0 Then
- IndistinctMatching = 0
- Exit Function
- End If
- gret.lngCountLike = 0
- gret.lngSubRows = 0
- For lngCurLen = 1 To lngMaxLen
- tret = MatchingStrings(strStringMatching, strStringStandart, lngCurLen, lngCase)
- gret.lngCountLike = gret.lngCountLike + tret.lngCountLike
- gret.lngSubRows = gret.lngSubRows + tret.lngSubRows
- tret = MatchingStrings(strStringStandart, strStringMatching, lngCurLen, lngCase)
- gret.lngCountLike = gret.lngCountLike + tret.lngCountLike
- gret.lngSubRows = gret.lngSubRows + tret.lngSubRows
- Next lngCurLen
- If gret.lngSubRows = 0 Then
- IndistinctMatching = 0
- Exit Function
- End If
- IndistinctMatching = (gret.lngCountLike / gret.lngSubRows) * 100
- End Function
-
- Public Function MatchingStrings(strA As String, strB As String, lngLen As Long, lngCase As Long) As RetCount
- Dim tret As RetCount
- Dim y As Long, z As Long
- Dim strta As String
- Dim strtb As String
-
- For z = 1 To Len(strA) - lngLen + 1
- strta = Mid(strA, z, lngLen)
- y = 1
- For y = 1 To Len(strB) - lngLen + 1
- strtb = Mid(strB, y, lngLen)
- If StrComp(strta, strtb, lngCase) = 0 Then
- tret.lngCountLike = tret.lngCountLike + 1
- Exit For
- End If
- Next y
- tret.lngSubRows = tret.lngSubRows + 1
- Next z
- MatchingStrings.lngCountLike = tret.lngCountLike
- MatchingStrings.lngSubRows = tret.lngSubRows
- End Function
-
Ответить
|
Страница: 1 |
Поиск по форуму