powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Формула для utl_match.edit_distance_similarity
5 сообщений из 5, страница 1 из 1
Формула для utl_match.edit_distance_similarity
    #39534652
Да ну
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!

На входе в java-метод есть 2 слова и уже посчитанное расстояние Левенштейна.
По этим данным надо посчитать похожесть в процентах ( как в utl_match.edit_distance_similarity ).
Не могу подобрать формулу, может кто сталкивался?
Или таких входных данных недостаточно?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
with q as (
  select 'ЧУГУНИЙ'  s1, 'ЛЮМИНИЙ'   s2 from dual union all
  select 'ЧУГУНИЙ11',   'ЛЮМИНИЙ'      from dual union all
  select 'ЧУГУНИЙ22',   'ЛЮМИНИЙ3333'  from dual
)
select
  utl_match.edit_distance(s1,s2) distance,
  utl_match.edit_distance_similarity(s1,s2) similarity_etalon,
  round(100-utl_match.edit_distance(s1,s2)*100 / greatest(length(s1),length(s2)) / 2 ,2) formula1,
  round(100-utl_match.edit_distance(s1,s2)*100 / least(length(s1),length(s2)) / 2 ,2)    formula2,
  round(100-utl_match.edit_distance(s1,s2)*100 / length(s1||s2) ,2)                      formula3
from q
/
DISTANCE SIMILARITY_ETALON   FORMULA1   FORMULA2   FORMULA3
-------- ----------------- ---------- ---------- ----------
       4                72      71.43      71.43      71.43
       6                63      66.67      57.14       62.5
       8                56      63.64      55.56         60


Заранее благодарен.
...
Рейтинг: 0 / 0
Формула для utl_match.edit_distance_similarity
    #39534686
K790
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да ну,

не?
Код: plsql
1.
ceil(100 - (utl_match.edit_distance(s1,s2)/greatest(length(s1),length(s2))*100))
...
Рейтинг: 0 / 0
Формула для utl_match.edit_distance_similarity
    #39534731
Да ну
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
K790не?
Код: plsql
1.
ceil(100 - (utl_match.edit_distance(s1,s2)/greatest(length(s1),length(s2))*100))

Не.
Код: plsql
1.
2.
3.
4.
5.
FORMULA4
--------
      43
      34
      28
...
Рейтинг: 0 / 0
Формула для utl_match.edit_distance_similarity
    #39534839
Для мультибайта часть байтов неявно совпадает. В utf-8 сравнение одинаковых букв даст 2 единицы совпадения, большинства разных букв даст совпадение одного из двух байтов по первому байту. В случае "Б" и "ё" по только второму.
...
Рейтинг: 0 / 0
Формула для utl_match.edit_distance_similarity
    #39534856
Да ну
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем дело было в юникоде.
Как удалось выяснить экпериментальным путем, в родной формуле берутся длины строк в байтах:
Код: plsql
1.
  ceil(100 - utl_match.edit_distance(s1,s2) / greatest(lengthb(s1),lengthb(s2))*100) formula


Как следствие - отличие в 4 русских буквы весит в % столько же, сколько в 2 английских при равной длине слов, что не радует.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
with q as (
  select 'ЧУГУНИЙ'  s1, 'ЛЮМИНИЙ'   s2 from dual union all
  select 'ЧУГУНИЙ11',   'ЛЮМИНИЙ'      from dual union all
  select 'ЧУГУНИЙ22',   'ЛЮМИНИЙ3333'  from dual union all
  select 'Steven',      'Stephen'      from dual
)
select
  s1||'..'||s2 words,
  length(s1)  len1,
  length(s2)  len2,
  lengthb(s1) lenb1,
  lengthb(s2) lenb2,
  utl_match.edit_distance(s1,s2) distance,
  utl_match.edit_distance_similarity(s1,s2) etalon,
  ceil(100 - utl_match.edit_distance(s1,s2) / greatest(lengthb(s1),lengthb(s2))*100) formula
from q
/
WORDS                         LEN1       LEN2      LENB1      LENB2   DISTANCE     ETALON    FORMULA
----------------------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
ЧУГУНИЙ..ЛЮМИНИЙ                 7          7         14         14          4         72         72
ЧУГУНИЙ11..ЛЮМИНИЙ               9          7         16         14          6         63         63
ЧУГУНИЙ22..ЛЮМИНИЙ3333           9         11         16         18          8         56         56
Steven..Stephen                  6          7          6          7          2         72         72


...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Формула для utl_match.edit_distance_similarity
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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