| 239 | } |
| 240 | |
| 241 | void TNlpParser::PassBackwardCompatibleToken(const TWideToken& multitoken, NLP_TYPE type, size_t totalLen) { |
| 242 | if (multitoken.SubTokens.size() == 1) { |
| 243 | const TCharSpan& subtok = multitoken.SubTokens[0]; |
| 244 | TWideToken tok; |
| 245 | if (subtok.PrefixLen) { |
| 246 | tok.Token = multitoken.Token; |
| 247 | tok.Leng = subtok.PrefixLen; |
| 248 | SentBreakFilter.OnToken(tok, NLP_MISCTEXT); |
| 249 | TokenHandler.OnToken(tok, tok.Leng, NLP_MISCTEXT); |
| 250 | } |
| 251 | |
| 252 | const ui16 prefixLen = subtok.PrefixLen; |
| 253 | tok.Token = multitoken.Token + prefixLen; |
| 254 | tok.Leng = multitoken.Leng - prefixLen; |
| 255 | tok.SubTokens.push_back(subtok); |
| 256 | tok.SubTokens[0].PrefixLen = 0; |
| 257 | tok.SubTokens[0].Pos -= prefixLen; |
| 258 | |
| 259 | SentBreakFilter.OnToken(tok, type); |
| 260 | TokenHandler.OnToken(tok, tok.Leng + (totalLen - multitoken.Leng), type); |
| 261 | // suffix after alone number is kept, for example: 18+ -> [18+] |
| 262 | // if number with suffix is part of multitoken then suffix will be removed: 16+/18+ -> [16]+/[18]+ |
| 263 | // see also tokenizer_ut.cpp |
| 264 | } else { |
| 265 | TWideToken tok; |
| 266 | TTokenIterator it(multitoken); |
| 267 | it.GetPrefix(tok); // prefix of the first token |
| 268 | if (tok.Leng) { |
| 269 | SentBreakFilter.OnToken(tok, NLP_MISCTEXT); |
| 270 | TokenHandler.OnToken(tok, tok.Leng, NLP_MISCTEXT); |
| 271 | } |
| 272 | while (it.Next()) { |
| 273 | it.GetMultitoken(tok); |
| 274 | SentBreakFilter.OnToken(tok, it.GetNlpType()); |
| 275 | if (!it.Finished()) |
| 276 | TokenHandler.OnToken(tok, tok.Leng, it.GetNlpType()); |
| 277 | else |
| 278 | TokenHandler.OnToken(tok, tok.Leng + (totalLen - multitoken.Leng), it.GetNlpType()); |
| 279 | it.GetDelimiter(tok); |
| 280 | if (tok.Leng) { |
| 281 | SentBreakFilter.OnToken(tok, NLP_MISCTEXT); |
| 282 | TokenHandler.OnToken(tok, tok.Leng, NLP_MISCTEXT); |
| 283 | } |
| 284 | } |
| 285 | } |
| 286 | } |
| 287 | |
| 288 | void TNlpParser::MakeEntry(const wchar16* entry, size_t entryLen, NLP_TYPE type) { |
| 289 | TWideToken token; // don't call to constructor TWideToken(entry, leng)! |
nothing calls this directly
no test coverage detected