SE2016 Java Anton Ivinskyi "Application level metrics and performance tests"
SE2016 Java Alexey Tokar "To find a needle in a haystack"
Transcript of SE2016 Java Alexey Tokar "To find a needle in a haystack"
Найти иг[ло]ку в стоге сена
Information retrieval
●○
●○
●○
Computer vision
Parametric search
http
://m
arke
t.yan
dex.
ua
Text search
Basic data structures
Simple matching
String needle = getUserInput();
for ( String title : dictionary ) {
if ( title.equals( needle ) ) {
System.out.println( “Gotcha!” );
}
}
Simple matching: better
String needle = getUserInput().toLowerCase();
for ( String title : dictionary ) {
if ( title.startsWith( needle ) ) {
System.out.println( “Gotcha!” );
}
}
Simple matching: awesomest !
String needle = “транс”;начало сравнений
...терминатор транзит трансамерика трансильвания трансформеры...
Simple matching. Results.
Hash-based search
.hashCode() % buckets.length buckets
Терминатор 1207003689 00
Альф 32058595 01
Поймай меня если сможешь 824411401 02
Умри, но не сейчас 1792373633 03
Зловещие мертвецы 1534549542 04
Терминал 1534215135 05
09...
Hash-based search
05
ТерминалАльф ...
Hash-based search
Radix trie
ме
с довый месяц
т яц в деревне
о ь в
сына встречи уду ампира илли
...Медовый месяцМесяц в деревнеМесть вампира
Месть вуду
Месть виллиМесто сынаМесто встречи...
Radix trie
Advanced approaches
Fuzzy search factors
Трансформеры
перестановка трансфромеры
вставка транссформеры
удаление тр_нсформеры
замена трансформиры
Levenshtein distance
Ученый-математик, доктор физико-математических наук.
Функцию его имени можно найти в любом языке программирования.
http
://et
hw.o
rg/im
ages
/8/8
3/Le
vens
htei
n.jp
g
Jaro-Winkler distance
s - длина словаm - кол-во совпавших сомволовt - половина транспозицийl - длина общего префиксаp - коэф.сглаживания (~0.1)
Jaro-Winkler distance
m = 5
W1W2
d
хорошошорох
0.7
пробкакоробка
0.78
звездазвездный
0.89
Jaro-Winkler distance
Depth-first search (DFS)
A
B C
DC A C
DB D E F
Needle = ABCD
ABCDABC(B→D)AB(+C)DA(C→B)CDA(C→B)C(E→D)A(C→B)C(F→D)A(+B)C(A→D)
Depth-first search (DFS)
N-gram
АЛО начАЛО, русАЛОчка, волшебное зеркАЛО ...
АЧА нАЧАло, удАЧА, нАЧАльники ...
НАЧ НАЧало, НАЧальники, геркулес НАЧало ...
ЧАЛ наЧАЛо, мгновения пеЧАЛи, наЧАЛьники ...
Начало (Inception), 2010 год
N-gram
N-gram
●○○
●○○
●○
*по моему субъективному опыту
N-gram
Lookup improvements
Template hashing
T R A N S F O R M E R S
1 0 1 0 0 0 1 1 1 1 0 0 0
A C E G I K M O Q S U W Y
B D F H J L N P R T V X Z
Template hashing
Bloom filter
0 1 0 0 0 0 1 1 0 0
Needle
Bloom filter
Thank you! Questions? :)