Близост на стрингове
6 отговора
346 прегледа
Близост на стрингове
Трябва ми функция за определяне на близост на 2 стринга.
Знам, че не е свързано с Delphi, а с програмирането попринцип, но тук има много интелигенти хора с опит и може да сте се сблъсквали с подобно нещо.
Някой може ли да ме насочи към литература или някакъв линк, или да ми каже нещо за тези функции.
Идеята е като се стравняват два стринга да функцията да върне някакъв коефициент на близост.
Например:
Стринга abababa е да речем 95% близък до стринга abababc
И стринга ababab е да речем 10% близък до стринга abahgbd
Може би ще ми е полезно ако ме насочите към някаква теория по въпроса.
Знам, че не е свързано с Delphi, а с програмирането попринцип, но тук има много интелигенти хора с опит и може да сте се сблъсквали с подобно нещо.
Някой може ли да ме насочи към литература или някакъв линк, или да ми каже нещо за тези функции.
Идеята е като се стравняват два стринга да функцията да върне някакъв коефициент на близост.
Например:
Стринга abababa е да речем 95% близък до стринга abababc
И стринга ababab е да речем 10% близък до стринга abahgbd
Може би ще ми е полезно ако ме насочите към някаква теория по въпроса.
Re: Близост на стрингове
Unit
StrUtils
Category
string handling routines
function SoundExSimilar(const AText, AOther: string; ALength: TSoundExLength = 4): Boolean;
Description
SoundExSimilar returns True if the string specified by AText is “similar” to the string specified by AOther, or False if the two strings are not sufficiently similar.
SoundExSimilar uses a SoundEx algorithm to convert both strings into a phonetic representation where each character of the resulting string represents one of six families of similar phonemes. It then compares up to ALength digits in the resulting representation, returning True if they are all the same and False if they are not.
_ _ _
Time is like a drug. Too much of it kills you.
StrUtils
Category
string handling routines
function SoundExSimilar(const AText, AOther: string; ALength: TSoundExLength = 4): Boolean;
Description
SoundExSimilar returns True if the string specified by AText is “similar” to the string specified by AOther, or False if the two strings are not sufficiently similar.
SoundExSimilar uses a SoundEx algorithm to convert both strings into a phonetic representation where each character of the resulting string represents one of six families of similar phonemes. It then compares up to ALength digits in the resulting representation, returning True if they are all the same and False if they are not.
_ _ _
Time is like a drug. Too much of it kills you.
Re: Близост на стрингове
Какво ще кажеш за следното:
1. Намираш най-дългия общ подстринг;
2. Измисляш формула, която да ти дава оценка на "близостта" на двата стринга на базата на намерения най-дълъг общ подстринг... нещо, което ми идва на прима виста за подобна формула:
- Стринг А с дължина L(A)
- Стринг B с дължина L(B)
- Най-дълрг общ подстринг X с дължина L(X)
Формула за изчисляване на "близост" на А и B - ( (L(X) / L(A) + (L(X) / L(B) ) / 2
т.е. Средно аритметично от L(X)/L(A) и L(X)/L(B).
HTH
1. Намираш най-дългия общ подстринг;
2. Измисляш формула, която да ти дава оценка на "близостта" на двата стринга на базата на намерения най-дълъг общ подстринг... нещо, което ми идва на прима виста за подобна формула:
- Стринг А с дължина L(A)
- Стринг B с дължина L(B)
- Най-дълрг общ подстринг X с дължина L(X)
Формула за изчисляване на "близост" на А и B - ( (L(X) / L(A) + (L(X) / L(B) ) / 2
т.е. Средно аритметично от L(X)/L(A) и L(X)/L(B).
HTH
Re: Близост на стрингове
Не смятам, че може да се даде прост отговор на този въпрос. Може би първо трябва да ни кажеш за какво би ти послужило разстоянието между стринговете и тогава може да се помисли нещо по въпроса...
Nihil tam munitum quod non expugnari pecuna possit
Nihil tam munitum quod non expugnari pecuna possit
Дефинирай си понятията и сам ще се справиш
Виж трите поста преди моя - всеки от тях в някаква степен те насочва за задачата, поставена от теб. Обаче за да ти се помогне - най добре да се замислиш сам и да дефинираш "близост на два стринга"
Или да зададеш въпроса не за функция, която ти връща близостта, а за дефиниране на понятието "близост на стрингове".
Поста на киллалл се отнася за фонетиката на стринговете (за мен е много ценно преложение) - но едва ли търсиш това, а и ще трябва да дефинираш език, на който да става сравняването :)
Поста на афтерглоу решава задачата в някои случаи, но дори и при един различаващ се символ, получавания резултат зависи от позицията му.
Можеш да послушаш и съвета на драко и да ни светнеш по-подробно и конкретно какво искаш да правиш
Или да зададеш въпроса не за функция, която ти връща близостта, а за дефиниране на понятието "близост на стрингове".
Поста на киллалл се отнася за фонетиката на стринговете (за мен е много ценно преложение) - но едва ли търсиш това, а и ще трябва да дефинираш език, на който да става сравняването :)
Поста на афтерглоу решава задачата в някои случаи, но дори и при един различаващ се символ, получавания резултат зависи от позицията му.
Можеш да послушаш и съвета на драко и да ни светнеш по-подробно и конкретно какво искаш да правиш
Re: Близост на стрингове
Потърси из нет-а за "разстояние на Ливенщайн" (Levenshtein Distance). Ако съм разбрал правилно, е точно това, което търсиш. Ако закъсаш, пиши пак - е ти пратя готов unit.
Re: Близост на стрингове
Много благодаря Mandor
!
Ти си разбрал въпроса ми най-правилно.
Мисля, че Levenshtein Distance е точно това, което ми трябва.
Благодаря и на всички останали. Вие също ми бяхте полезни.
Ако някой се сега за още такива алгоритми като на Levenshtein, нека пише.
Ти си разбрал въпроса ми най-правилно.
Мисля, че Levenshtein Distance е точно това, което ми трябва.
Благодаря и на всички останали. Вие също ми бяхте полезни.
Ако някой се сега за още такива алгоритми като на Levenshtein, нека пише.