powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / поиск похожих наименований в перечне
7 сообщений из 7, страница 1 из 1
поиск похожих наименований в перечне
    #39944772
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!
Наверняка не у меня одного возникала необходимость сравнивать длинные перечни текстовых наименований. Например, когда выгрузки идут из разных систем, коды, понятно, совсем разные, имена различаются везде по чуть чуть.
Что-то вроде такого: Alternatifbank A.S. и Alternatifbank (AS)

Я всегда видел один путь - все технические символы, регистр и пробелы нещадно удалять.
Но, возможно, более умные люди уже изобрели механизмы посимвольного сравнения с выводом, например, процента точного совпадения строки.

Коллеги, если вы встречали что-то подобное или знаете иные пути решения проблемы, прошу поделиться ссылками и/или знаниями по теме.

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

Алгоритм на VB публиковал когда-то здесь, поищи в MS или в Visual Basic
...
Рейтинг: 0 / 0
поиск похожих наименований в перечне
    #39944789
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro, спасибо, поищу.
Умные люди еще подска3ывают, что это - расстояние левенштейна. Погуглю, все погуглю
...
Рейтинг: 0 / 0
поиск похожих наименований в перечне
    #39944794
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PlanB
расстояние левенштейна
я так понимаю, что для строк "добрый вечер" и "вечер добрый" это расстояние будет довольно-таки большим. Так что надо исходить из того, какие у тебя исходные данные.
Я использовал свой алгоритм для сравнения строк с названиями товаров разных магазинов.
...
Рейтинг: 0 / 0
поиск похожих наименований в перечне
    #39944878
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro, чет не нашел. У тебя не мало постов))
...
Рейтинг: 0 / 0
поиск похожих наименований в перечне
    #39944895
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
поиск похожих наименований в перечне
    #39944908
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PlanB
Shocker.Pro, чет не нашел. У тебя не мало постов))
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
Function CompStr(Str1 As String, Str2 As String, Optional KillCyr As Boolean = False) As Single

Dim Word As Integer, likeness As Long, i As Integer
Dim maxn As Integer, k As Integer
Dim s1 As String, s2 As String
Word = 3: likeness = 0
s1 = Trim(CutDblSpaces(IIf(Len(Str1) > Len(Str2), Str1, Str2)))
s2 = Trim(CutDblSpaces(IIf(Len(Str1) > Len(Str2), Str2, Str1)))
If KillCyr Then
  s1 = KillCyrillic(s1)
  s2 = KillCyrillic(s2)
End If
If Len(s1) < Word + 1 Or Len(s2) < Word + 1 Then
  CompStr = IIf(s1 = s2, 1, 0)
  Exit Function
End If

For i = 1 To Len(s1) - Word + 1
  maxn = 0
  k = InStr(1, s2, Mid$(s1, i, Word))
  Do Until k = 0
    If Len(s1) - Abs(k - i) > maxn Then maxn = Len(s1) - Abs(k - i)
    k = InStr(k + 1, s2, Mid$(s1, i, Word))
  Loop
  likeness = likeness + maxn
Next
CompStr = likeness / (Len(s1) * (Len(s1) - Word + 1))
  
End Function
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / поиск похожих наименований в перечне
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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