Алгоритмы, связанные с реализацией поиска информации.
-
Williams
-
- Гуру
-
-
- Сообщения: 1280
- Зарегистрирован: 06.05.2008 (Вт) 18:35
- Откуда: System.Reflection.Williams (увидел себя в зеркале :))
Williams » 24.08.2009 (Пн) 23:03
Опишу что примерно надо:
Есть две строки. Надо определить (желательно в процентном отношении) насколько они схожи.
Например, сколько символов подряд совпадают.
Если таковой имеется, хотелось бы знать название.
Похоже нашел:
http://ru.wikipedia.org/wiki/%D0%A0%D0% ... 0%BD%D0%B0
И вы думаете, что вас оставят в живых после прочтения этого поста?
-
Proxy
-
- Профессор VB наук
-
-
- Сообщения: 2941
- Зарегистрирован: 31.08.2007 (Пт) 4:41
Proxy » 25.08.2009 (Вт) 17:49
Тебе к методам оценки релевантности. Они разные бывают, обобщёные алгоритмы найти возможно: их много в сети.
Follow the white rabbit.
-
Antonariy
-
- Повелитель Internet Explorer
-
-
- Сообщения: 4824
- Зарегистрирован: 28.04.2005 (Чт) 14:33
- Откуда: Мимо проходил
-
Antonariy » 07.09.2009 (Пн) 10:53
viewtopic.php?f=1&t=34276- Код: Выделить всё
Private b1() As Byte
Private b2() As Byte
Public Function Simil(String1 As String, String2 As String) As Double
Dim l1 As Long
Dim l2 As Long
If UCase(String1) = UCase(String2) Then
Simil = 1
Else
l1 = Len(String1)
l2 = Len(String2)
If l1 <> 0 And l2 <> 0 Then
b1 = StrConv(UCase$(String1), vbFromUnicode)
b2 = StrConv(UCase$(String2), vbFromUnicode)
Simil = SubSim(1, l1, 1, l2) / (l1 + l2) * 2
End If
End If
Erase b1
Erase b2
End Function
Private Function SubSim(st1 As Long, end1 As Long, st2 As Long, end2 As Long) As Long
Dim c1 As Long
Dim c2 As Long
Dim ns1 As Long
Dim ns2 As Long
Dim i As Long
Dim max As Long
If st1 > end1 Or st2 > end2 Or st1 <= 0 Or st2 <= 0 Then Exit Function
For c1 = st1 To end1
For c2 = st2 To end2
i = 0
Do Until b1(c1 + i - 1) <> b2(c2 + i - 1)
i = i + 1
If i > max Then
ns1 = c1
ns2 = c2
max = i
End If
If c1 + i > end1 Or c2 + i > end2 Then Exit Do
Loop
Next
Next
max = max + SubSim(ns1 + max, end1, ns2 + max, end2)
max = max + SubSim(st1, ns1 - 1, st2, ns2 - 1)
SubSim = max
End Function
Лучший способ понять что-то самому — объяснить это другому.
Вернуться в Поиск
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1