Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Программирование Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
 Re: Нормализация строк  [new]
mayton
Member

Откуда: loopback
Сообщений: 53009
Вот этот суффикс типа

4 месяцев 100.000 г


тоже может сильно изменить формулу дистанции. Могут быть ложные срабатывания для других товаров.

Кстати этот similarity(..) какой алгоритм использует?
15 окт 21, 10:31    [22384094]     Ответить | Цитировать Сообщить модератору
 Re: Нормализация строк  [new]
exp98
Member

Откуда:
Сообщений: 3206
Dima T
Погуглил немного, вот реальные наименования из предложений в инете:
А есть еще такие:
Можно еще поискать
Dima , Ы2, отставить спам, отставить брутальную рекламу брэнда ... ))
15 окт 21, 12:31    [22384175]     Ответить | Цитировать Сообщить модератору
 Re: Нормализация строк  [new]
Dima T
Member

Откуда:
Сообщений: 16071
exp98
Dima T
Погуглил немного, вот реальные наименования из предложений в инете:
А есть еще такие:
Можно еще поискать
Dima , Ы2, отставить спам, отставить брутальную рекламу брэнда ... ))

Что первое гугл выдал, то и скопипастил. Хорошо в рекламу вкладываются видать. Так что наше упоминание им продажи не увеличит.
А в остальном этот бренд гадость редкостная, когда дети маленькие были жена говорила не брать его ни при каком раскладе
15 окт 21, 12:45    [22384187]     Ответить | Цитировать Сообщить модератору
 Re: Нормализация строк  [new]
exp98
Member

Откуда:
Сообщений: 3206
mayton
Могут быть ложные срабатывания для других товаров.
А как определить близость 1 кг помидоров и 1 кг томатов?
У нас в Перекрёстки с недавних лет помидоров не стало, их постепенно вытеснили томаты. А так хочется помидорчиков!
А что в других регионах?
15 окт 21, 13:02    [22384196]     Ответить | Цитировать Сообщить модератору
 Re: Нормализация строк  [new]
exp98
Member

Откуда:
Сообщений: 3206
mayton
Вот этот суффикс типа
4 месяцев 100.000 г
Наверняка это другие поля из БД, тогда на них метрика не распространится. А "чеснок фасованный" и в развес ??
Не знаю новейших практик. М.б. подобное уже зашивают в классификациютоварных групп?
Например одежда изначально классифицировалась матрично: цвето-размер.

Прикол по случаю
+
В маге на стенке есть считыватели штрих-кода, чтоб мы сами цену узнавали. Иногда они зависают. Раз я взял и перезапустил девайс, а там загрузился маленький Виндовс. Не помню, то ли через "Пуск" загрузил прогу, или не удалось...


Сообщение было отредактировано: 15 окт 21, 13:04
15 окт 21, 13:07    [22384198]     Ответить | Цитировать Сообщить модератору
 Re: Нормализация строк  [new]
Ares_ekb
Member

Откуда: Екатеринбург
Сообщений: 1769
exp98,

Можно тут найти похожие слова для "помидор" https://rusvectores.org/
автор
огурец 0.775
морковь 0.726
овощ 0.711
баклажан 0.706
капуста 0.704
арбуз 0.701
салат 0.690
чеснок 0.687
томат 0.684
фасоль 0.670

Помидор больше похож на огурец, чем на томат. На этот случай наверное нужен свой словарь синонимов
15 окт 21, 13:14    [22384204]     Ответить | Цитировать Сообщить модератору
 Re: Нормализация строк  [new]
Ы2
Member

Откуда:
Сообщений: 252
mayton
Вот этот суффикс типа
4 месяцев 100.000 г

тоже может сильно изменить формулу дистанции. Могут быть ложные срабатывания для других товаров.

Кстати этот similarity(..) какой алгоритм использует?


Это функция из расширения pg_trgm для PostgreSQL. Разбирает строки на буквенные триграммы и считает долю общих.
15 окт 21, 13:39    [22384215]     Ответить | Цитировать Сообщить модератору
 Re: Нормализация строк  [new]
mayton
Member

Откуда: loopback
Сообщений: 53009
+
    val src = """    Пюре ФрутоНяня Яблоко с 4 месяцев 100.000 г
      Пюре ФрутоНяня Груша с 4 месяцев 100.000 г
      Пюре ФрутоНяня Яблоко с 4 месяцев 100.000 г
      Фрутоняня пюре 100 г груша/яблоко
    Фрутоняня пюре 100 г груша/яблоко
    ФРУТОНЯНЯ ПЮРЕ ЯБЛОЧНОЕ 100.0
    Фрутоняня пюре 100 г груша/яблоко
    ФрутоНяня Пюре яблоко натур 100г N 1
    Фрутоняня пюре 100 г груша/яблоко
    Пюре ФрутоНяня Груша с 4 месяцев 100.000 г
      ФРУТОНЯНЯ ПЮРЕ ЯБЛОЧНОЕ 100.0
    ФрутоНяня Пюре яблоко натур 100г N 1
    Пюре ФрутоНяня Яблоко с 4 месяцев 100.000 г
      ФРУТОНЯНЯ ПЮРЕ ЯБЛОЧНОЕ 100.0
    ФрутоНяня Пюре яблоко натур 100г N 1
    Пюре ФрутоНяня Яблоко с 4 месяцев 100.000 г
      Пюре ФрутоНяня Груша с 4 месяцев 100.000 г
      ФРУТОНЯНЯ ПЮРЕ ЯБЛОЧНОЕ 100.0
    ФрутоНяня Пюре яблоко натур 100г N 1
    Пюре ФрутоНяня Груша с 4 месяцев 100.000 г"""

    val expressions : Array[String] = src.split("\n")
      .map(x => x.trim)
      .map(x => x.toLowerCase())
      .distinct

    println(s"Filtered size : ${expressions.length}")

    expressions.foreach(x => println(s">> $x"))

    import org.apache.commons.text.similarity.LevenshteinDistance
    val distFunc = new LevenshteinDistance()

    for(x <- 0 until expressions.length; y <- 0 until expressions.length) {
      if (x < y) {
        val dist = distFunc.apply(expressions(x), expressions(y))
        println(s"Levenstein distance from (${expressions(y)} - ${expressions(x)}) is $dist")
      }
    }


>> пюре фрутоняня яблоко с 4 месяцев 100.000 г
>> пюре фрутоняня груша с 4 месяцев 100.000 г
>> фрутоняня пюре 100 г груша/яблоко
>> фрутоняня пюре яблочное 100.0
>> фрутоняня пюре яблоко натур 100г n 1
Levenstein distance from (пюре фрутоняня груша с 4 месяцев 100.000 г - пюре фрутоняня яблоко с 4 месяцев 100.000 г) is 6
Levenstein distance from (фрутоняня пюре 100 г груша/яблоко - пюре фрутоняня яблоко с 4 месяцев 100.000 г) is 31
Levenstein distance from (фрутоняня пюре яблочное 100.0 - пюре фрутоняня яблоко с 4 месяцев 100.000 г) is 25
Levenstein distance from (фрутоняня пюре яблоко натур 100г n 1 - пюре фрутоняня яблоко с 4 месяцев 100.000 г) is 26
Levenstein distance from (фрутоняня пюре 100 г груша/яблоко - пюре фрутоняня груша с 4 месяцев 100.000 г) is 30
Levenstein distance from (фрутоняня пюре яблочное 100.0 - пюре фрутоняня груша с 4 месяцев 100.000 г) is 24
Levenstein distance from (фрутоняня пюре яблоко натур 100г n 1 - пюре фрутоняня груша с 4 месяцев 100.000 г) is 27
Levenstein distance from (фрутоняня пюре яблочное 100.0 - фрутоняня пюре 100 г груша/яблоко) is 18
Levenstein distance from (фрутоняня пюре яблоко натур 100г n 1 - фрутоняня пюре 100 г груша/яблоко) is 19
Levenstein distance from (фрутоняня пюре яблоко натур 100г n 1 - фрутоняня пюре яблочное 100.0) is 12
15 окт 21, 19:50    [22384350]     Ответить | Цитировать Сообщить модератору
 Re: Нормализация строк  [new]
Ы2
Member

Откуда:
Сообщений: 252
mayton, как это следует интерпретировать?

Вот другой пример:
select 
	similarity('фрутоняня пюре яблоко натур 100г n 1', 'натур пюре фрутоняня яблоко 100г n 1'),
	levenshtein('фрутоняня пюре яблоко натур 100г n 1', 'натур пюре фрутоняня яблоко 100г n 1')
;


similaritylevenshtein
122
16 окт 21, 00:09    [22384427]     Ответить | Цитировать Сообщить модератору
 Re: Нормализация строк  [new]
x1ca4064
Member

Откуда:
Сообщений: 1356
Ы2

Вот другой пример:
select 
	similarity('фрутоняня пюре яблоко натур 100г n 1', 'натур пюре фрутоняня яблоко 100г n 1'),
	levenshtein('фрутоняня пюре яблоко натур 100г n 1', 'натур пюре фрутоняня яблоко 100г n 1')
;


similaritylevenshtein
122

Как я понимаю, функция levenshtein просто считает РЛ для переданных строк, это не совсем верный подсчет РЛ (в контексте топика): в случае, когда строка содержит несколько слов, нужно составить матрицу расстояний между словами, потом искать по ней порядок слов, при котором сумма РЛ будет минимальной, возможно, увеличивая результат при перестановке слов.
16 окт 21, 04:15    [22384466]     Ответить | Цитировать Сообщить модератору
 Re: Нормализация строк  [new]
mayton
Member

Откуда: loopback
Сообщений: 53009
Да. Левенштейн - редакционное расстояние между текстами. Я точно не помню
какая формула метрики - но кажется берется удаление + перенос символов + вставка.

В данном случае similarity сработал лучше (похоже на 1-й алгоритм который я предлагал выше) без учота перемещения лексем внутри sentence.

Кажется этого-же эффекта мы могли добиться сортируя слова в фильтрации.
16 окт 21, 12:18    [22384533]     Ответить | Цитировать Сообщить модератору
 Re: Нормализация строк  [new]
Ы2
Member

Откуда:
Сообщений: 252
mayton, РЛ = вставки + замены + удаления; обычно можно настраивать вклад каждой категории.

Все это время я пытался наглядно показать, что для нечеткого поиска N-граммы — триграммы как частный случай — всегда лучше расстояния Левенштейна. Само по себе РЛ неинформативно, пока не знаешь длины строки: РЛ = 2 между «рыба» и «глыба» (заведомо разные), между «заяц плюшевый большой» и «зайц плюшевый болшой» (неграмотность и опечатка), а так же между «ваш звонок очень важен для нас» и «наш звонок очень важен для вас» (тут и триграммы бессильны).
16 окт 21, 18:39    [22384595]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
Все форумы / Программирование Ответить