Как это выгядит на практике? К примеру, нам нужно найти в справочнике номенклатуры некую позицию. Мы знаем, что в названии фирмы есть слово "Виски", но не знаем, как именно название было внесено в базу: Whisky; Thiski; Вхиске или еще как, - вариантов масса.
Вот в этой-то ситуации и поможет StrMatch. Её механизм значительно умнее оператора "Find" (и работает значительно быстрее). Прогнав через него массив строк (наименований справочника) мы на выходе получим таблицу наиболее близких по звучаню названий. Далее на Ваш выбор.
--------------------------------------------------- 2.1.0 - 4 февраля 2005 Платформа разработки и компилятор обновилась до .NET 2003 Исправлены несколько очень опасных багов, которые могли вызвать аварийное завершение 1С Код оптимизирован под PIV
Файл: strmatch.zip
Размер: 38,30 KB
Дата регистрации: 04/07/2003
Последнее обновление: 04/02/2005
Я помогу. Описание, прилагаемое к компоненте читать пробовали? 1. Там нигде не написано про проценты, это очки схожести 2. Простое сравнение 2х строк - смысла не имеет, задача компоненты определить какая строка из списка больше похожа на предложенную.
скачал, поставил, написал простую обработку сравнения двух тмц (выбираются вручную). результаты сравнения двух разных тмц с одинаковыми наименованиями 94% и 240%. это как так?
У меня появилась следующая проблема: Ищем подстроку "ВАЛЕНКИ" (верхний регистр букв) по реквизиту "Наименование" справочника номенклатура. В справочнике есть такая группа "ВАЛЕНКИ", т.е.совпадение 100%, а метод ПолучитьИзПодбора выводит мне эту позицию не первой, как по-идее должен, а где-то 6-8. Сначала выходят Валенки такие, Валенки сякие, те не полное совпадение, а только по началу строки. И индекс сравнения у этой позиции - 58, как и у "верхних" строк, хотя, видимо, должен быть больше. Как сделать так, чтобы строки со 100% совпадением выходили первыми?
Пишет почаще
Зарегистрирован:15/11/2001
Город:Караганда
Сообщений:22
Re: strmatch - Нечеткое сравнение и поиск строк
Цитата:
Виктор пишет: Последнее предложение, прочитал 3 раза, ни понял... извини? // ну правда, понять хочу
Немного не так выразился, имелось ввиду, что при сопоставлении номенклатуры возможна такая ситуация, когда в 1 базе с которой мы сравниваем есть некая позиция, а в 2 базе ее нет, и наоборот во 2 базе могут быть позиции, которых нет в первой.
Так вот, я и хотел предложить, чтоб имея некий балл при оценки наиболее подходящих позиций, сравнивать этот балл с неким порогом, который подбирается эксперементальным путем, если порог первышен, то данную номенклатурную позицию не сопоставлять ни с чем.
Цитата:
Skorp пишет: Уже есть новая версия, которая умеет приметь метрику Левингштейна к строкам (как раз таки бальный подход), но т.к. 1С я больше не занимаюсь, когда я доведу её до безопасного вида - не знаю :\
>Думаю, что все согласятся со мной, что иной раз для >сопоставления одного списка номенклатуры с другим, >встречаются позиции, которых нет ни в одном ни в другом.
Думаю, что все согласятся с тем, что автоматически это определить невозможно. Даже, если названия совпадают до последней точки, это еще не значит, что товары на самом деле одинаковые, особенно, если они взяты из разных источников.
По штрафным баллам невозможно сравнивать строки набранные транслитом и т.д. С другой стороны для подобных "бальных" сравнений инструменты и так существуют, сравнения же по звучанию для 1С еще никто не делал - вот и написал. Алгоритм, как я уже писал, в основном относится к нечеткой логике. Для предварительной обработки строк используется идея metaphone, но с другой, собственной, реализацией.
Уже есть новая версия, которая умеет приметь метрику Левингштейна к строкам (как раз таки бальный подход), но т.к. 1С я больше не занимаюсь, когда я доведу её до безопасного вида - не знаю :\
Пишет почаще
Зарегистрирован:15/11/2001
Город:Караганда
Сообщений:22
Re: strmatch - Нечеткое сравнение и поиск строк
Было бы интересно узнать сам алгоритм сравнения. Когда я делал аналогичную вещь, но средствами 1С, то принцип был несколько иной, вместо "индекса сравнения", можно применять "штрафные балы", т.е. если строки идентичны, то оценка равна нулю. Таким образом я могу оценить насколько сравнимые строки различны друг от друга, например, если общая оценка меньше половины длины самой короткой строки, то в принципе можно считать строки схожими, иначе они различными. Думаю, что все согласятся со мной, что иной раз для сопоставления одного списка номенклатуры с другим, встречаются позиции, которых нет ни в одном ни в другом.