Форум сайта python.su
Добрый день,
укажите мне пожста правильное направление, оставаясь в рамках приличия.
Как примерно будет выглядеть алгоритм на следующее.
Есть таблица с полем. Поле символьное, размером примерно 20 символов, может содержать от 3 до 20 символов. Записей в пределах 100.000. Посетитель вводит в окошко поиска свою строку. В случае если точного совпадения не найдено, как искать поле с максимальным совпадением двух строк? Как дать определение наилучшеему совпадению?
Строки это буквенно-цифровые обозначения, не имеющих отношения к лингвистике.
То есть, например, есть поля типа “ABCDEFGHLMNOPRST”,
Посетитель вводит свою строку типа “12ABCD11EDF155GHLM”.
Как примерно посчитать коэффициент совпадения?
Порядок символов должен сохраняться.
Офлайн
gtlhbkkjА какой здесь коэффициент совпадения? Ты сначала критерии введи для коэффициента совпадения. Начни с определения “совпадение строк - это …”, потом вводи метрику “строки совпадют сильно, когда … ; строки совпадают слабо, когда …”.
То есть, например, есть поля типа “ABCDEFGHLMNOPRST”,
Посетитель вводит свою строку типа “12ABCD11EDF155GHLM”.
Как примерно посчитать коэффициент совпадения?
Отредактировано py.user.next (Май 28, 2020 02:43:38)
Офлайн
Как вариант, когда надо сравнивать строки, но совершенно не ясно, что значит “сравнивать”, можно считать расстояние Левенштейна. Чем сильнее строки различаются, тем больше это число. Дальше можно попытаться это расстояние (это некое целое число) каким-то образом преобразовать в “проценты”….
Вот эта библиотека может такое расстояние считать:
pypi.org/project/StringDist/
Офлайн
есть что-то,что имеет какие-то определенные элементы с определенными свойствами,расставленные в определенной последовательности.
Это что-то находится в определенном месте,среди других аналогичных что-то.
я беру своё аналогичное что-то,беру у него первый его элемент,
затем беру первый что-то,из списка этих что-то,
и сравниваю его первый элемент ,с первым элементом моего что-то,
если элементы одинаковые, то сделать +1 к счетчику совпадений,
беру по второму элементу этих двух что-то,
сравниваю, если да +1,иначе:сохранить значение счетчика для этого что-то,перейти к следующему что-то,из списка что-то.
повторяю операцию сравнения элементов что-то,пока не кончится список этих что-то
в конце вывожу список этих что-то по возрастанию или убыванию значений счетчиков этих что-то
только не знаю,на сколько эффективен этот алгоритм,в моей голове пока других нет
Офлайн
py.user.nextвы перефразировали мой вопрос
Отредактировано gtlhbkkj (Май 28, 2020 17:19:40)
Офлайн
Your text to link here…
может это подойдет
Отредактировано xam1816 (Май 28, 2020 21:30:58)
Офлайн
gtlhbkkjМожно придумать бесконечно много способов сравнения строк. Можно сравнивать посимвольно, можно сравнивать по позициям, можно сравнивать по биграммам, можно сравнивать по триграммам, можно сравнивать по букве Z (если в обеих строках есть буква Z, то они равны; если в первой строке нет буквы Z, а во второй строке есть, то вторая строка больше первой строки), можно сравнивать по количеству букв Z (если количество букв Z в первой строке чётное и количество букв Z во второй строке чётное, то строки равны - ZZ == ZZZZZZ и Z != ZZ).
вы перефразировали мой вопрос
- как определить критерии коээфициента совпадения. Этого то я и не знаю - не могу придумать это правило.
Существуют ли какие-то методики?
Офлайн
> Есть таблица с полем. … Посетитель вводит в окошко поиска свою строку. В случае если точного совпадения не найдено, как искать поле с максимальным совпадением двух строк? Как дать определение наилучшеему совпадению?
Такой поиск нужно производить средствами СУБД. Например: https://habr.com/ru/post/341142/
Офлайн
эээ наивное подумалось … можт просто сортировка?
ну типа строка aa (эталон) а та которую сравниваем к примеру bb
ну и соответственно
aa
ab
ba
bb
ps тут еще нужно указать возможный набор символов … а если мы используем юникод то … не очень как то
pps а еще значение имеет вес символов в наборе … нет наверно слишком тежелый способ
Отредактировано AD0DE412 (Май 29, 2020 11:18:49)
Офлайн
господа, благодарю всех за поддержку и за идеи.
Так как я ищу то, не знаю что, то и ответа однозначного на вопрос нету.
Будут новые идеи, пишите.
Спасибо
Офлайн