|
Форум
|
Аноним |
16.02.05, 20:18 |
|
Soundex |
|
Добрый день. У меня такой вопрос: возможно ли узнать примерный (без каких либо модных фишек и прибамбасов, коих наверняка хватает в RCO) алгоритм работы этой функции для русского языка? |
|
|
Плешко Владимир |
16.02.05, 20:51 |
|
re: Soundex |
|
Функции Soundex, поиска близких по звучанию слов, в RCO нет. Есть функция поиска слов близких по написанию. В ней сравниваются биграммы (пары символов), составляющие слова, и порядок их следования. Точно не вспомню, кажется, допускается расхождение позиций биграмм в сравниваемых словах на 1 или 2 (это параметр алгоритма). Затем число различий относится, к общему числу сравниваемых биграмм, и масштабируется от 0 до 100.
Чтобы все быстро работало, строится, так называемый, биграммный индекс, который на логическом уровне состоит из четверок: <Биграмма, ИД_Слова, Длина_Слова, Позиция_Биграммы>.
Перечень слов для построения биграммного индекса берется из входов в индекс Oracle Text.
При поиске для каждой биграммы исходного слова из индекса считываются списки слов и позиций, специальным образом пересекаются и фильтруются, и в результате получается список слов, содержащихся в проиндексированном тексте, отстоящих от искомого не далее заданного порога в смысле биграммного расстояния.
Мог где-то слегка наврать...
"Разве все упомнишь, что помнишь" из к-ф "Облако-рай" |
|
|
Плешко Владимир |
16.02.05, 22:36 |
|
re: re: Soundex |
|
Гадский софт исказил часть текста (принял за тег и вырезал). Повторяю фрагмент:
Чтобы все быстро работало, строится, так называемый, биграммный индекс, который на логическом уровне состоит из четверок: <Биграмма, ИД_Слова, Длина_Слова, Позиция_Биграммы> |
|
|
asdf |
17.02.05, 08:50 |
|
re: re: re: Soundex |
|
Спасибо за консультацию, Владимир. Еще вопрос: "функция поиска слов близких по написанию", понятно, отличается от soundex. "близкие по написанию слова" - можно чуть поподробнее в каком смысле "близкие"? |
|
|
Плешко Владимир |
17.02.05, 13:27 |
|
re: re: re: re: Soundex |
|
"Близкие" - в смысле совпадения их фрагментов (биграмм). Это не расстояние редактирования (еще называют лексикографическое, Левенштейна), где считается число операций.
Между этими расстояниями есть очевидная зависимость:
BigrDist(s1,s2) <= 2*EditDist(s1,s2).
В идеале лучше использовать расстояние редактирования, но на больших объемах это очень накладно. Поэтому все используют более "грубые" биграммное и триграммное расстояния. |
|
|
Плешко Владимир |
17.02.05, 14:02 |
|
re: re: re: re: re: Soundex |
|
Опять исказился мой текст. Там должно ьыит неравенство:
BigrDist(s1,s2) <= 2*EditDist(s1,s2). |
|
|
|
|
|
| |