 |
Сравнивание Стрингов |
 |
11.11.2004, 10:10
|
#1
|
|
Авик
Join Date: 07 2002
Location: Yerevan
Age: 39
Posts: 1,348
Rep Power: 0
|
Сравнивание Стрингов
Вобщем требуется мне алгоритм функции которая будет получать в качестве параметров, два стринга, и возвращать цифру их "похожести"
в процентном соотношении, ну типа хотя бы алгоритм.
|
|
|
|
11.11.2004, 13:08
|
#2
|
|
панаехавший
Join Date: 06 2003
Location: форпост
Age: 39
Posts: 4,007
Rep Power: 0
|
Детка, ты определись, что ты понимаешь под похожестью? Есть понятие расстояния стрингов (дасиц кич трнеир киманаир), этого тебе нада?
|
|
|
|
11.11.2004, 13:13
|
#3
|
|
Грустно...
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 44
Posts: 21,717
Rep Power: 9
|
например strcmp  0 если совсем похожи 1/-1 ежели одна меньше/больше другой.А фактически да - скажи параметр похожести, там придумаем, что надо.
|
|
|
|
11.11.2004, 13:51
|
#4
|
|
Авик
Join Date: 07 2002
Location: Yerevan
Age: 39
Posts: 1,348
Rep Power: 0
|
Ну как бы сказать вам.
Вот есть у меня несколько прайс листов с наименованиями лекарств.
Но в каждом прайсе все написанно по разному, для примера:
анальгин 25, Анальгин 25, Анальгин. 25., Анальгин mg25, Анальгин 25 мг.
и.т.д
Так вот мне надо как бы ну опознать "Анальгины", Аспирины и всякую мурню.
|
|
|
|
11.11.2004, 13:52
|
#5
|
|
Авик
Join Date: 07 2002
Location: Yerevan
Age: 39
Posts: 1,348
Rep Power: 0
|
И я не могу юзать strcomp, так как не на C++ вояю, так что алгоритм бы.
|
|
|
|
11.11.2004, 13:58
|
#6
|
|
Грустно...
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 44
Posts: 21,717
Rep Power: 9
|
lstrcmp(i) - системные функции виндоза.
0. Sum = 0;
1. по очереди проходишь по всем символам сравниваешь их , если равны + 2. если равны, но без учета регистра +1 (тут я поправил)
3. пробелы не сравниваешь вообще - пропускаешь (пробел, верт и гор
табуляция, перевод строки, возврат каретки)
4. несовпадения вычитаешь 
смотришь число...
или же:
берешь и ищещь слова из одной строки в другой без учета регистра... похожесть сумма похожих чисел чем больше тем лучше...
Last edited by Agregat; 11.11.2004 at 14:27.
|
|
|
|
 |
Если используется MYSql |
 |
11.11.2004, 14:23
|
#7
|
|
Главный Лысый
Join Date: 10 2001
Location: AM
Age: 49
Posts: 2,829
Rep Power: 5
|
Если используется MYSql
Я подозреваю, что надо смотреть в направлении либо:
Quote:
SOUNDEX(str) Returns a soundex string from str. Two strings that sound almost the same should have identical soundex strings. A standard soundex string is four characters long, but the SOUNDEX() function returns an arbitrarily long string. You can use SUBSTRING() on the result to get a standard soundex string. All non-alphabetic characters are ignored in the given string. All international alphabetic characters outside the A-Z range are treated as vowels. mysql> SELECT SOUNDEX('Hello');
-> 'H400'
mysql> SELECT SOUNDEX('Quadratically');
-> 'Q36324'
Note: This function implements the original Soundex algorithm, not the more popular enhanced version (also described by D. Knuth). The difference is that original version discards vowels first and then duplicates, whereas the enhanced version discards duplicates first and then vowels.
|
Либо смотреть здесь http://dev.mysql.com/doc/mysql/en/Fulltext_Search.html на предмет Score.
|
|
|
|
 |
11.11.2004, 15:45
|
#8
|
|
Авик
Join Date: 07 2002
Location: Yerevan
Age: 39
Posts: 1,348
Rep Power: 0
|
А Если будет так:
Aspirin 25mg
25mg Aspirin
???
Да и Алгоритм должен быть быстрым, ведь таких стрингов будет 10000.
|
|
|
|
11.11.2004, 16:21
|
#9
|
|
панаехавший
Join Date: 06 2003
Location: форпост
Age: 39
Posts: 4,007
Rep Power: 0
|
Quote:
|
Originally Posted by CyberJoe
А Если будет так:
Aspirin 25mg
25mg Aspirin
???
Да и Алгоритм должен быть быстрым, ведь таких стрингов будет 10000.
|
Может тебе еще исскуственный интеллект?
|
|
|
|
11.11.2004, 16:24
|
#10
|
|
Дошкольник
Join Date: 08 2004
Location: Oxford
Age: 48
Posts: 141
Rep Power: 0
|
В биоинформатике есть понятие - sequence alignment. Алгоритмы Needleman-Wunsch (global SA), Smith-Waterman (local SA)
|
|
|
|
11.11.2004, 16:29
|
#11
|
|
Авик
Join Date: 07 2002
Location: Yerevan
Age: 39
Posts: 1,348
Rep Power: 0
|
Quote:
|
Originally Posted by Obelix
Может тебе еще исскуственный интеллект?
|
Ну если тебе не сложно 
ДА ладно, все же не так это сложно, (зато сколько дадут бабосов)
|
|
|
|
11.11.2004, 16:38
|
#12
|
|
Главный Лысый
Join Date: 10 2001
Location: AM
Age: 49
Posts: 2,829
Rep Power: 5
|
Quote:
|
Originally Posted by CyberJoe
А Если будет так:
Aspirin 25mg
25mg Aspirin
???
Да и Алгоритм должен быть быстрым, ведь таких стрингов будет 10000.
|
Full-text search v mysql bystriy.
I tvoi primery budut naydeny.
|
|
|
|
11.11.2004, 16:45
|
#13
|
|
Главный Лысый
Join Date: 10 2001
Location: AM
Age: 49
Posts: 2,829
Rep Power: 5
|
Odnako ideala ty vse ravno ne naydesh - poetomu stoit predusmotret' nekiy variant opredeleniya etikh parametrov vruchnuyu.
I tol'ko posle etogo nachat' sravnivat' realizatsii na "zhivykh sluchayakh"
|
|
|
|
11.11.2004, 16:53
|
#14
|
|
Авик
Join Date: 07 2002
Location: Yerevan
Age: 39
Posts: 1,348
Rep Power: 0
|
Думаю может просто сделать базу из всех имен вручную, а потом уже просто ее юзать...
но сделать базу из 1000 наименований... мдя...
|
|
|
|
11.11.2004, 18:02
|
#15
|
|
Painfully Outlandish
Join Date: 05 2003
Location: Albainn
Age: 46
Posts: 113
Rep Power: 0
|
you can use a dynamic programming algorithm to find the longest common substring (I think ignoring cases and spaces might be a good idea), then in the aspirin example you'll find "aspirin".
I think this will do the main part of the work.
|
|
|
|
|
All times are GMT. The time now is 06:47. |
|
|