|
Нормализация строк
|
|||
---|---|---|---|
#18+
День добрый! Подскажите как определить что "Яблочное пюре" и "Пюре яблочное" в принципе одно и тоже, данные как пример, слова могут видо изменяться типа "Пюре из яблок". Заранее спасибо за советы! ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2021, 15:12 |
|
Нормализация строк
|
|||
---|---|---|---|
#18+
Встречный вопрос: "человек разумный" и "разумный человек" - это в принципе одно и то же или нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2021, 15:14 |
|
Нормализация строк
|
|||
---|---|---|---|
#18+
В данном случае можно разбить на слова и отсортировать по алфавиту, но это не всегда работает, есть исключения когда порядок слов играет роль. Сходу пример не придумаю, близкое: "копчено-вареный" и "варено-копченый" это два разных способа приготовления. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2021, 16:04 |
|
Нормализация строк
|
|||
---|---|---|---|
#18+
По хорошему надо какую-то классификацию слов вводить. Например в данном случае слово "пюре" это форма выпуска, "яблочное" это вкус. Для нормализации достаточно например идентифицировать форму выпуска и убрать в сторону как признак товара. Тогда сначала отдельно сравниваем форму, а если совпала, то остальное. Но в остальном тоже могут быть подставы типа "Пюре яблочное с корицей". ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2021, 16:09 |
|
Нормализация строк
|
|||
---|---|---|---|
#18+
Наверное, как-то так ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2021, 17:09 |
|
Нормализация строк
|
|||
---|---|---|---|
#18+
WebSharper Наверное, как-то так Нет, распознавание речи тут мало поможет. Оно заточено на разговорный язык. Наименования товаров далеки от обычного разговорного, это не связное предложение, а набор характеристик, причем многие написаны сокращенно. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2021, 20:00 |
|
Нормализация строк
|
|||
---|---|---|---|
#18+
Х-ха! Семантику по грамматике )) Меня однажды попробавали нагнуть автоматизацией поиска в инете. По названию товара неизвестно где выявить его цену)) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2021, 21:03 |
|
Нормализация строк
|
|||
---|---|---|---|
#18+
Mixon День добрый! Подскажите как определить что "Яблочное пюре" и "Пюре яблочное" в принципе одно и тоже, данные как пример, слова могут видо изменяться типа "Пюре из яблок". Заранее спасибо за советы! Мы находимся не в гуманитарном, а в техническом форуме. И поэтому задача должна быть поставлена технически. В противном случае - она просто переходит в область ЗПТ или дискуссий ВопросОтвет. Давайте перечислим алгоритмы нормализации строк Русского языка . Я делаю упор на Русский язык потому-то нормализация другого языка будет скорее всего совсем другим алгоритмом. Как "сумма прописью". Потом поищем готовые реализации этих алгоритмов. И потом поищем справочники слов или базы данных если таковые нужны. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2021, 16:06 |
|
Нормализация строк
|
|||
---|---|---|---|
#18+
Mixon Подскажите как определить что "Яблочное пюре" и "Пюре яблочное" в принципе одно и тоже, данные как пример, слова могут видо изменяться типа "Пюре из яблок". Заранее спасибо за советы! Необходимо ввести расстояние между названиями: когда решал подобную задачу для наименований алкоголя, использовал расстояние Левенштейна (РЛ) и "ручной подбор", т.е. оператор для каждого наименования видел отсортированный по РЛ список кандидатов, оттуда и выбирал, так строился справочник. Сейчас можно попробовать вместо РЛ использовать какой-нибудь Word2Vec и считать расстояние между векторами. Конкретная реализация, думаю, должна зависеть от предметной области: сколь автоматическим/точным должен быть подбор, сколько и каких строк нужно сравнивать (список названий или произвольные тексты). ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2021, 16:56 |
|
Нормализация строк
|
|||
---|---|---|---|
#18+
Mixon, можно попробовать использовать триграммное сходство. Например, его реализация в PostgreSQL считает, что «яблочное пюре» и «пюре яблочное» не различаются вовсе, а сходство любой из этих строк с «пюре из яблок» около 47%. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2021, 17:59 |
|
Нормализация строк
|
|||
---|---|---|---|
#18+
Ы2 Mixon, можно попробовать использовать триграммное сходство. Например, его реализация в PostgreSQL считает, что «яблочное пюре» и «пюре яблочное» не различаются вовсе, а сходство любой из этих строк с «пюре из яблок» около 47%. А "яблочная репа" будет ближе к "яблочному пюре" нежели чем "пюре из яблок". Вот такой метафизический парадокс. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2021, 18:36 |
|
Нормализация строк
|
|||
---|---|---|---|
#18+
mayton Давайте перечислим алгоритмы нормализации строк Русского языка . И что ты там собрался нормализовывать? Выделять подлежащее, сказуемое и т.д. и т.п.? В наименовании товара ничего этого нет, это просто перечисление разных характеристик, причем некоторые остаются неупомянуты, т.к. существуют в одном экземпляре. Штрихкод легко решает все проблемы на 99% ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2021, 21:40 |
|
Нормализация строк
|
|||
---|---|---|---|
#18+
Ы2 Mixon, можно попробовать использовать триграммное сходство. Например, его реализация в PostgreSQL считает, что «яблочное пюре» и «пюре яблочное» не различаются вовсе, а сходство любой из этих строк с «пюре из яблок» около 47%. Жёлтый и белый тоже очень похожи по написанию ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2021, 21:51 |
|
Нормализация строк
|
|||
---|---|---|---|
#18+
Штрихкод - это не тема топика вроде как. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2021, 12:51 |
|
Нормализация строк
|
|||
---|---|---|---|
#18+
Точно также поступил, когда нормализовывал улицы, писанные вразнобой. x1ca4064 Необходимо ввести расстояние между названиями ... "ручной подбор" ... должна зависеть от предметной области Ещё подвох - омонимы и какая-никакая контекстная зависимость. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2021, 15:18 |
|
Нормализация строк
|
|||
---|---|---|---|
#18+
mayton Штрихкод - это не тема топика вроде как. Я так понимаю ТС хочет находить одинаковые товары по разному написанные. Большинство товаров нынче имеют штрихкод. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2021, 15:26 |
|
Нормализация строк
|
|||
---|---|---|---|
#18+
Dima T Ы2 Mixon, можно попробовать использовать триграммное сходство. Например, его реализация в PostgreSQL считает, что «яблочное пюре» и «пюре яблочное» не различаются вовсе, а сходство любой из этих строк с «пюре из яблок» около 47%. Жёлтый и белый тоже очень похожи по написанию Это вам только кажется. У них триграммное сходство 8,3%. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2021, 16:17 |
|
Нормализация строк
|
|||
---|---|---|---|
#18+
Dima T mayton Штрихкод - это не тема топика вроде как. Я так понимаю ТС хочет находить одинаковые товары по разному написанные. Большинство товаров нынче имеют штрихкод. Вернемся к яблокам. Для данного частного случая: Код: java 1.
Я-бы предложил следующее. Триграммный поиск - не вариант т.к. тут не опечатка а морфологическое преобразование. Нам нужно все слова и выражения свести к единой основе. Код: sql 1.
и обеспечить правильный порядок. Можно задать ранг слов или положить их в SortedSet. По триграммам. Про близость "пюре" и репа я уже писал. Надо практически посмотреть и взять хотя-бы штук 100-200 реальных названий и прогнать их по тесту. Короче сложность решения задачи сильно зависит от качества самих исходных данных. Триграммы и биграммы и прочие N-граммы это - слишком простой подход. Он может даже и не на текст ориентирован на например на генетику (биологию) и он может хорошо работать в одних случаях, а в случаях с мофологией и лемматизацией он может просто давать очень плохие результаты. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2021, 17:44 |
|
Нормализация строк
|
|||
---|---|---|---|
#18+
Ы2 Dima T пропущено... Жёлтый и белый тоже очень похожи по написанию Это вам только кажется. У них триграммное сходство 8,3%. Триграмное да, а левенштейн очень близок, выделил совпадающие буквы: ЖЕЛТЫЙ БЕЛЫЙ ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2021, 21:51 |
|
Нормализация строк
|
|||
---|---|---|---|
#18+
mayton, близость «пюре» и «репа» — еще более мнимая, чем «желтый» и «белый»: триграммное сходство 0%, РЛ = 4 и равно длине слова. «яблочная репа» дальше от «яблочное пюре» (27%), чем «пюре из яблок» (47%). Вы ошибочно полагаете, что триграммное сходство — для поиска опечаток. Оно для поиска строк, совпадающих по большей части . Для опечаток — расстояние Левенштейна. Поэтому, на мой взгляд, самое простое решение — сформировать по триграммам список кандидатов на отождествление и отдать оператору, пусть решает вручную. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2021, 22:48 |
|
Нормализация строк
|
|||
---|---|---|---|
#18+
Если решать в лоб, то можно 1) составить словарь нормализованных строк 2) посчитать для этого словаря N-граммы 3) затем для входных строк применять какую-нибудь очистку, если требуется (с помощью регулярных выражений и т.п.) 4) вычислять для них такие же N-граммы 5) сравнивать их с N-граммами из словаря, можно просто перемножением векторов, можно с помощью TF-IDF 6) установить порог, выше которого считаем, что строки похожи, например, 0.8 (подбирается экспериментально путём подсчета ошибок при разных значениях) 7) если в словаре найдено похожее слово, с мерой похожести выше порога, то считаем его нормализованным представлением строки 8) скорее всего, алгоритм не будет давать 100% результат, смотрим что получается и дальше накручиваем ещё какие-нибудь эвристики Я, например, использовал такой подход для нормализации адресов. В качестве словаря использовал ФИАС. Использовал биграммы, а не триграммы (тут можно поэкспериментировать). Использовал кучу регулярок для разбиения адреса на части (регион, город, улица, дом и т.д.) и сравнивал каждую часть адреса отдельно, потому что очень много похожих слов типа Свердловская область, улица Свердлова, проспект Свердлова и т.п. Если сравнивать регионы, улицы и т.п. отдельно, то это существенно улучшает алгоритм. Плюс для ускорения и оптимизации можно сначала определить регион, а потом искать совпадения уже внутри него. Соответственно вы тоже можете попробовать использовать эти штуки (если это применимо): 1) Разбить строку на части, сравнивать слова отдельно 2) Каким-то образом отнести строку к одной из подкатегорий и сравнивать только со строками этой категории 3) Использовать регулярки для предварительной очистки или разбиения строк Ещё можно посмотреть https://yandex.ru/dev/mystem/ может пригодится. И конечно же можно посмотреть https://rusvectores.org/ Они как и N-граммы позволяют превращать слова в векторы, но(!) таким образом, что близкие по смыслу слова имеют близкие векторы. Это позволяет делать вещи типа семантических калькуляторов, поиска аналогий, поиска похожих вещей и т.п. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2021, 04:59 |
|
Нормализация строк
|
|||
---|---|---|---|
#18+
Погуглил немного, вот реальные наименования из предложений в инете: Код: sql 1. 2. 3.
А есть еще такие: Код: sql 1. 2.
Можно еще поискать ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2021, 07:32 |
|
Нормализация строк
|
|||
---|---|---|---|
#18+
Dima T Погуглил немного, вот реальные наименования из предложений в инете: Код: sql 1. 2. 3.
А есть еще такие: Код: sql 1. 2.
Можно еще поискать Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
вариант 1вариант 2сходствоПюре ФрутоНяня Яблоко с 4 месяцев 100.000 гПюре ФрутоНяня Груша с 4 месяцев 100.000 г0.75Пюре ФрутоНяня Груша с 4 месяцев 100.000 гПюре ФрутоНяня Яблоко с 4 месяцев 100.000 г0.75Пюре ФрутоНяня Яблоко с 4 месяцев 100.000 гФрутоняня пюре 100 г груша/яблоко0.5833333Фрутоняня пюре 100 г груша/яблокоПюре ФрутоНяня Яблоко с 4 месяцев 100.000 г0.5833333Фрутоняня пюре 100 г груша/яблокоФРУТОНЯНЯ ПЮРЕ ЯБЛОЧНОЕ 100.00.575ФРУТОНЯНЯ ПЮРЕ ЯБЛОЧНОЕ 100.0Фрутоняня пюре 100 г груша/яблоко0.575Фрутоняня пюре 100 г груша/яблокоФрутоНяня Пюре яблоко натур 100г N 10.5681818ФрутоНяня Пюре яблоко натур 100г N 1Фрутоняня пюре 100 г груша/яблоко0.5681818Фрутоняня пюре 100 г груша/яблокоПюре ФрутоНяня Груша с 4 месяцев 100.000 г0.5416667Пюре ФрутоНяня Груша с 4 месяцев 100.000 гФрутоняня пюре 100 г груша/яблоко0.5416667ФРУТОНЯНЯ ПЮРЕ ЯБЛОЧНОЕ 100.0ФрутоНяня Пюре яблоко натур 100г N 10.5ФрутоНяня Пюре яблоко натур 100г N 1ФРУТОНЯНЯ ПЮРЕ ЯБЛОЧНОЕ 100.00.5Пюре ФрутоНяня Яблоко с 4 месяцев 100.000 гФРУТОНЯНЯ ПЮРЕ ЯБЛОЧНОЕ 100.00.48979592ФРУТОНЯНЯ ПЮРЕ ЯБЛОЧНОЕ 100.0Пюре ФрутоНяня Яблоко с 4 месяцев 100.000 г0.48979592ФрутоНяня Пюре яблоко натур 100г N 1Пюре ФрутоНяня Яблоко с 4 месяцев 100.000 г0.46296296Пюре ФрутоНяня Яблоко с 4 месяцев 100.000 гФрутоНяня Пюре яблоко натур 100г N 10.46296296Пюре ФрутоНяня Груша с 4 месяцев 100.000 гФРУТОНЯНЯ ПЮРЕ ЯБЛОЧНОЕ 100.00.39215687ФРУТОНЯНЯ ПЮРЕ ЯБЛОЧНОЕ 100.0Пюре ФрутоНяня Груша с 4 месяцев 100.000 г0.39215687ФрутоНяня Пюре яблоко натур 100г N 1Пюре ФрутоНяня Груша с 4 месяцев 100.000 г0.30508474Пюре ФрутоНяня Груша с 4 месяцев 100.000 гФрутоНяня Пюре яблоко натур 100г N 10.30508474 Не идеально, конечно, но можно начинать что-то городить вокруг этого. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2021, 09:41 |
|
Нормализация строк
|
|||
---|---|---|---|
#18+
Ы2 но можно начинать что-то городить вокруг этого Тут ещё непонятен вопрос. Нужно сравнивать все строки со всеми, тогда это задача кластеризации. Либо всё-таки есть словарь правильных, нормализованных строк, и нужно сравнивать новые строки со словарем. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2021, 10:02 |
|
Нормализация строк
|
|||
---|---|---|---|
#18+
Ы2 Код: sql 1.
Чтобы не двоилось лучше так Код: sql 1.
Ы2 Не идеально, конечно, но можно начинать что-то городить вокруг этого. ИМХО, как выше написали, начинать надо с выделения характеристик: брэнд, тип, вкус, вес и т.д. а дальше нераспознанное можно этим способом досравнивать. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2021, 10:29 |
|
|
start [/forum/topic.php?fid=16&tid=1339623]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
361ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
others: | 269ms |
total: | 731ms |
0 / 0 |