You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
|
#include "tokenizer.h"
|
|
|
|
|
#include <algorithm>
|
|
|
|
|
#include <vector>
|
|
|
|
|
#include <string>
|
|
|
|
|
#include <cassert>
|
|
|
|
|
|
|
|
|
|
using std::string;
|
|
|
|
|
using std::vector;
|
|
|
|
|
|
|
|
|
|
namespace {
|
|
|
|
|
vector<string> split( const char* str, const char delim ) {
|
|
|
|
|
assert( str );
|
|
|
|
|
vector<string> res;
|
|
|
|
|
while ( *str == delim ) ++str;
|
|
|
|
|
while ( *str ) {
|
|
|
|
|
const char* start = str++;
|
|
|
|
|
while ( *str && *str != delim ) ++str;
|
|
|
|
|
res.push_back( string( start, str ) );
|
|
|
|
|
while ( *str == delim ) ++str;
|
|
|
|
|
}
|
|
|
|
|
return res;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class latin1_tokenizer : public indexlib::detail::tokenizer {
|
|
|
|
|
private:
|
|
|
|
|
static const char stop = 46; // .
|
|
|
|
|
static void normalize( char& c ) {
|
|
|
|
|
const char result[] = {
|
|
|
|
|
stop, // [ 0 ]
|
|
|
|
|
stop, // [ 1 ]
|
|
|
|
|
stop, // [ 2 ]
|
|
|
|
|
stop, // [ 3 ]
|
|
|
|
|
stop, // [ 4 ]
|
|
|
|
|
stop, // [ 5 ]
|
|
|
|
|
stop, // [ 6 ]
|
|
|
|
|
stop, // [ 7 ]
|
|
|
|
|
stop, // ^H [ 8 ]
|
|
|
|
|
stop, // \t [ 9 ]
|
|
|
|
|
stop, // [ 10 ]
|
|
|
|
|
stop, // [ 11 ]
|
|
|
|
|
stop, // [ 12 ]
|
|
|
|
|
stop, // [ 13 ]
|
|
|
|
|
stop, // [ 14 ]
|
|
|
|
|
stop, // [ 15 ]
|
|
|
|
|
stop, // [ 16 ]
|
|
|
|
|
stop, // [ 17 ]
|
|
|
|
|
stop, // [ 18 ]
|
|
|
|
|
stop, // [ 19 ]
|
|
|
|
|
stop, // [ 20 ]
|
|
|
|
|
stop, // [ 21 ]
|
|
|
|
|
stop, // [ 22 ]
|
|
|
|
|
stop, // [ 23 ]
|
|
|
|
|
stop, // [ 24 ]
|
|
|
|
|
stop, // [ 25 ]
|
|
|
|
|
stop, // [ 26 ]
|
|
|
|
|
stop, // [ 27 ]
|
|
|
|
|
stop, // [ 28 ]
|
|
|
|
|
stop, // [ 29 ]
|
|
|
|
|
stop, // [ 30 ]
|
|
|
|
|
stop, // [ 31 ]
|
|
|
|
|
stop, // [ 32 ]
|
|
|
|
|
stop, // ! [ 33 ]
|
|
|
|
|
stop, // " [ 34 ]
|
|
|
|
|
stop, // # [ 35 ]
|
|
|
|
|
stop, // $ [ 36 ]
|
|
|
|
|
stop, // % [ 37 ]
|
|
|
|
|
stop, // & [ 38 ]
|
|
|
|
|
stop, // ' [ 39 ]
|
|
|
|
|
stop, // ( [ 40 ]
|
|
|
|
|
stop, // ) [ 41 ]
|
|
|
|
|
stop, // * [ 42 ]
|
|
|
|
|
stop, // + [ 43 ]
|
|
|
|
|
stop, // , [ 44 ]
|
|
|
|
|
stop, // - [ 45 ]
|
|
|
|
|
stop, // . [ 46 ]
|
|
|
|
|
stop, // / [ 47 ]
|
|
|
|
|
'0', // 0 [ 48 ]
|
|
|
|
|
'1', // 1 [ 49 ]
|
|
|
|
|
'2', // 2 [ 50 ]
|
|
|
|
|
'3', // 3 [ 51 ]
|
|
|
|
|
'4', // 4 [ 52 ]
|
|
|
|
|
'5', // 5 [ 53 ]
|
|
|
|
|
'6', // 6 [ 54 ]
|
|
|
|
|
'7', // 7 [ 55 ]
|
|
|
|
|
'8', // 8 [ 56 ]
|
|
|
|
|
'9', // 9 [ 57 ]
|
|
|
|
|
stop, // : [ 58 ]
|
|
|
|
|
stop, // ; [ 59 ]
|
|
|
|
|
stop, // < [ 60 ]
|
|
|
|
|
stop, // = [ 61 ]
|
|
|
|
|
stop, // > [ 62 ]
|
|
|
|
|
stop, // ? [ 63 ]
|
|
|
|
|
stop, // @ [ 64 ]
|
|
|
|
|
'A', // A [ 65 ]
|
|
|
|
|
'B', // B [ 66 ]
|
|
|
|
|
'C', // C [ 67 ]
|
|
|
|
|
'D', // D [ 68 ]
|
|
|
|
|
'E', // E [ 69 ]
|
|
|
|
|
'F', // F [ 70 ]
|
|
|
|
|
'G', // G [ 71 ]
|
|
|
|
|
'H', // H [ 72 ]
|
|
|
|
|
'I', // I [ 73 ]
|
|
|
|
|
'J', // J [ 74 ]
|
|
|
|
|
'K', // K [ 75 ]
|
|
|
|
|
'L', // L [ 76 ]
|
|
|
|
|
'M', // M [ 77 ]
|
|
|
|
|
'N', // N [ 78 ]
|
|
|
|
|
'O', // O [ 79 ]
|
|
|
|
|
'P', // P [ 80 ]
|
|
|
|
|
'Q', // Q [ 81 ]
|
|
|
|
|
'R', // R [ 82 ]
|
|
|
|
|
'S', // S [ 83 ]
|
|
|
|
|
'T', // T [ 84 ]
|
|
|
|
|
'U', // U [ 85 ]
|
|
|
|
|
'V', // V [ 86 ]
|
|
|
|
|
'W', // W [ 87 ]
|
|
|
|
|
'X', // X [ 88 ]
|
|
|
|
|
'Y', // Y [ 89 ]
|
|
|
|
|
'Z', // Z [ 90 ]
|
|
|
|
|
stop, // [ [ 91 ]
|
|
|
|
|
stop, // \ [ 92 ]
|
|
|
|
|
stop, // ] [ 93 ]
|
|
|
|
|
stop, // ^ [ 94 ]
|
|
|
|
|
stop, // _ [ 95 ]
|
|
|
|
|
stop, // ` [ 96 ]
|
|
|
|
|
'A', // a [ 97 ]
|
|
|
|
|
'B', // b [ 98 ]
|
|
|
|
|
'C', // c [ 99 ]
|
|
|
|
|
'D', // d [ 100 ]
|
|
|
|
|
'E', // e [ 101 ]
|
|
|
|
|
'F', // f [ 102 ]
|
|
|
|
|
'G', // g [ 103 ]
|
|
|
|
|
'H', // h [ 104 ]
|
|
|
|
|
'I', // i [ 105 ]
|
|
|
|
|
'J', // j [ 106 ]
|
|
|
|
|
'K', // k [ 107 ]
|
|
|
|
|
'L', // l [ 108 ]
|
|
|
|
|
'M', // m [ 109 ]
|
|
|
|
|
'N', // n [ 110 ]
|
|
|
|
|
'O', // o [ 111 ]
|
|
|
|
|
'P', // p [ 112 ]
|
|
|
|
|
'Q', // q [ 113 ]
|
|
|
|
|
'R', // r [ 114 ]
|
|
|
|
|
'S', // s [ 115 ]
|
|
|
|
|
'T', // t [ 116 ]
|
|
|
|
|
'U', // u [ 117 ]
|
|
|
|
|
'V', // v [ 118 ]
|
|
|
|
|
'W', // w [ 119 ]
|
|
|
|
|
'X', // x [ 120 ]
|
|
|
|
|
'Y', // y [ 121 ]
|
|
|
|
|
'Z', // z [ 122 ]
|
|
|
|
|
stop, // { [ 123 ]
|
|
|
|
|
stop, // | [ 124 ]
|
|
|
|
|
stop, // } [ 125 ]
|
|
|
|
|
stop, // ~ [ 126 ]
|
|
|
|
|
stop, // [ 127 ]
|
|
|
|
|
stop, // <20> [ 128 ]
|
|
|
|
|
stop, // <20> [ 129 ]
|
|
|
|
|
stop, // <20> [ 130 ]
|
|
|
|
|
stop, // <20> [ 131 ]
|
|
|
|
|
stop, // <20> [ 132 ]
|
|
|
|
|
stop, // <20> [ 133 ]
|
|
|
|
|
stop, // <20> [ 134 ]
|
|
|
|
|
stop, // <20> [ 135 ]
|
|
|
|
|
stop, // <20> [ 136 ]
|
|
|
|
|
stop, // <20> [ 137 ]
|
|
|
|
|
stop, // <20> [ 138 ]
|
|
|
|
|
stop, // <20> [ 139 ]
|
|
|
|
|
stop, // <20> [ 140 ]
|
|
|
|
|
stop, // <20> [ 141 ]
|
|
|
|
|
stop, // <20> [ 142 ]
|
|
|
|
|
stop, // <20> [ 143 ]
|
|
|
|
|
stop, // <20> [ 144 ]
|
|
|
|
|
stop, // <20> [ 145 ]
|
|
|
|
|
stop, // <20> [ 146 ]
|
|
|
|
|
stop, // <20> [ 147 ]
|
|
|
|
|
stop, // <20> [ 148 ]
|
|
|
|
|
stop, // <20> [ 149 ]
|
|
|
|
|
stop, // <20> [ 150 ]
|
|
|
|
|
stop, // <20> [ 151 ]
|
|
|
|
|
stop, // <20> [ 152 ]
|
|
|
|
|
stop, // <20> [ 153 ]
|
|
|
|
|
stop, // <20> [ 154 ]
|
|
|
|
|
stop, // <20> [ 155 ]
|
|
|
|
|
stop, // <20> [ 156 ]
|
|
|
|
|
stop, // <20> [ 157 ]
|
|
|
|
|
stop, // <20> [ 158 ]
|
|
|
|
|
stop, // <20> [ 159 ]
|
|
|
|
|
stop, // <20> [ 160 ]
|
|
|
|
|
stop, // <20> [ 161 ]
|
|
|
|
|
stop, // <20> [ 162 ]
|
|
|
|
|
stop, // <20> [ 163 ]
|
|
|
|
|
stop, // <20> [ 164 ]
|
|
|
|
|
stop, // <20> [ 165 ]
|
|
|
|
|
stop, // <20> [ 166 ]
|
|
|
|
|
stop, // <20> [ 167 ]
|
|
|
|
|
stop, // <20> [ 168 ]
|
|
|
|
|
stop, // <20> [ 169 ]
|
|
|
|
|
stop, // <20> [ 170 ]
|
|
|
|
|
stop, // <20> [ 171 ]
|
|
|
|
|
stop, // <20> [ 172 ]
|
|
|
|
|
stop, // <20> [ 173 ]
|
|
|
|
|
stop, // <20> [ 174 ]
|
|
|
|
|
stop, // <20> [ 175 ]
|
|
|
|
|
stop, // <20> [ 176 ]
|
|
|
|
|
stop, // <20> [ 177 ]
|
|
|
|
|
stop, // <20> [ 178 ]
|
|
|
|
|
stop, // <20> [ 179 ]
|
|
|
|
|
stop, // <20> [ 180 ]
|
|
|
|
|
stop, // <20> [ 181 ]
|
|
|
|
|
stop, // <20> [ 182 ]
|
|
|
|
|
stop, // <20> [ 183 ]
|
|
|
|
|
stop, // <20> [ 184 ]
|
|
|
|
|
stop, // <20> [ 185 ]
|
|
|
|
|
stop, // <20> [ 186 ]
|
|
|
|
|
stop, // <20> [ 187 ]
|
|
|
|
|
stop, // <20> [ 188 ]
|
|
|
|
|
stop, // <20> [ 189 ]
|
|
|
|
|
stop, // <20> [ 190 ]
|
|
|
|
|
stop, // <20> [ 191 ]
|
|
|
|
|
'A', // <20> [ 192 ]
|
|
|
|
|
'A', // <20> [ 193 ]
|
|
|
|
|
'A', // <20> [ 194 ]
|
|
|
|
|
'A', // <20> [ 195 ]
|
|
|
|
|
'A', // <20> [ 196 ]
|
|
|
|
|
'A', // <20> [ 197 ]
|
|
|
|
|
'A', // <20> [ 198 ]
|
|
|
|
|
'C', // <20> [ 199 ]
|
|
|
|
|
'E', // <20> [ 200 ]
|
|
|
|
|
'E', // <20> [ 201 ]
|
|
|
|
|
'E', // <20> [ 202 ]
|
|
|
|
|
'E', // <20> [ 203 ]
|
|
|
|
|
'I', // <20> [ 204 ]
|
|
|
|
|
'I', // <20> [ 205 ]
|
|
|
|
|
'I', // <20> [ 206 ]
|
|
|
|
|
'I', // <20> [ 207 ]
|
|
|
|
|
'D', // <20> [ 208 ]
|
|
|
|
|
'N', // <20> [ 209 ]
|
|
|
|
|
'O', // <20> [ 210 ]
|
|
|
|
|
'O', // <20> [ 211 ]
|
|
|
|
|
'O', // <20> [ 212 ]
|
|
|
|
|
'O', // <20> [ 213 ]
|
|
|
|
|
'O', // <20> [ 214 ]
|
|
|
|
|
'X', // <20> [ 215 ]
|
|
|
|
|
'O', // <20> [ 216 ]
|
|
|
|
|
'U', // <20> [ 217 ]
|
|
|
|
|
'U', // <20> [ 218 ]
|
|
|
|
|
'U', // <20> [ 219 ]
|
|
|
|
|
'U', // <20> [ 220 ]
|
|
|
|
|
'Y', // <20> [ 221 ]
|
|
|
|
|
'T', // <20> [ 222 ]
|
|
|
|
|
'S', // <20> [ 223 ]
|
|
|
|
|
'A', // <20> [ 224 ]
|
|
|
|
|
'A', // <20> [ 225 ]
|
|
|
|
|
'A', // <20> [ 226 ]
|
|
|
|
|
'A', // <20> [ 227 ]
|
|
|
|
|
'A', // <20> [ 228 ]
|
|
|
|
|
'A', // <20> [ 229 ]
|
|
|
|
|
'A', // <20> [ 230 ]
|
|
|
|
|
'C', // <20> [ 231 ]
|
|
|
|
|
'E', // <20> [ 232 ]
|
|
|
|
|
'E', // <20> [ 233 ]
|
|
|
|
|
'E', // <20> [ 234 ]
|
|
|
|
|
'E', // <20> [ 235 ]
|
|
|
|
|
'I', // <20> [ 236 ]
|
|
|
|
|
'I', // <20> [ 237 ]
|
|
|
|
|
'I', // <20> [ 238 ]
|
|
|
|
|
'I', // <20> [ 239 ]
|
|
|
|
|
stop, // <20> [ 240 ]
|
|
|
|
|
'N', // <20> [ 241 ]
|
|
|
|
|
'O', // <20> [ 242 ]
|
|
|
|
|
'O', // <20> [ 243 ]
|
|
|
|
|
'O', // <20> [ 244 ]
|
|
|
|
|
'O', // <20> [ 245 ]
|
|
|
|
|
'O', // <20> [ 246 ]
|
|
|
|
|
stop, // <20> [ 247 ]
|
|
|
|
|
'O', // <20> [ 248 ]
|
|
|
|
|
'U', // <20> [ 249 ]
|
|
|
|
|
'U', // <20> [ 250 ]
|
|
|
|
|
'U', // <20> [ 251 ]
|
|
|
|
|
'U', // <20> [ 252 ]
|
|
|
|
|
'Y', // <20> [ 253 ]
|
|
|
|
|
'T', // <20> [ 254 ]
|
|
|
|
|
'Y' // <20> [ 255 ]
|
|
|
|
|
};
|
|
|
|
|
c = result[ static_cast<unsigned char>( c ) ];
|
|
|
|
|
}
|
|
|
|
|
std::vector<std::string> do_string_to_words( const char* str ) {
|
|
|
|
|
string complete = str;
|
|
|
|
|
std::for_each( complete.begin(), complete.end(), normalize );
|
|
|
|
|
return split( complete.c_str(), stop );
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
std::unique_ptr<indexlib::detail::tokenizer> indexlib::detail::get_tokenizer( std::string name ) {
|
|
|
|
|
if ( name == "latin-1:european" ) return std::unique_ptr<indexlib::detail::tokenizer>( new latin1_tokenizer );
|
|
|
|
|
return std::unique_ptr<indexlib::detail::tokenizer>();
|
|
|
|
|
}
|