17898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project/* 27898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Copyright (C) 2009 The Android Open Source Project 37898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * 47898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 57898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * you may not use this file except in compliance with the License. 67898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * You may obtain a copy of the License at 77898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * 87898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 97898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * 107898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 117898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 127898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * See the License for the specific language governing permissions and 147898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * limitations under the License. 157898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */ 167898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 177898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project#ifndef PINYINIME_ANDPY_INCLUDE_SEARCHCOMMON_H__ 187898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project#define PINYINIME_ANDPY_INCLUDE_SEARCHCOMMON_H__ 197898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 207898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project#include <stdlib.h> 217898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project#include "./spellingtrie.h" 227898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 237898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectnamespace ime_pinyin { 247898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 257898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project// Type used to identify the size of a pool, such as id pool, etc. 267898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projecttypedef uint16 PoolPosType; 277898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 287898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project// Type used to identify a parsing mile stone in an atom dictionary. 297898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projecttypedef uint16 MileStoneHandle; 307898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 317898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project// Type used to express a lemma and its probability score. 327898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projecttypedef struct { 337898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project size_t id:(kLemmaIdSize * 8); 347898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project size_t lma_len:4; 357898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project uint16 psb; // The score, the lower psb, the higher possibility. 367898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project // For single character items, we may also need Hanzi. 377898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project // For multiple characer items, ignore it. 387898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project char16 hanzi; 397898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project} LmaPsbItem, *PLmaPsbItem; 407898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 417898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project// LmaPsbItem extended with string. 427898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projecttypedef struct { 437898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project LmaPsbItem lpi; 447898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project char16 str[kMaxLemmaSize + 1]; 457898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project} LmaPsbStrItem, *PLmaPsbStrItem; 467898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 477898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 487898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projecttypedef struct { 497898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project float psb; 507898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project char16 pre_hzs[kMaxPredictSize]; 517898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project uint16 his_len; // The length of the history used to do the prediction. 527898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project} NPredictItem, *PNPredictItem; 537898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 547898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project// Parameter structure used to extend in a dictionary. All dictionaries 557898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project// receives the same DictExtPara and a dictionary specific MileStoneHandle for 567898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project// extending. 577898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project// 587898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project// When the user inputs a new character, AtomDictBase::extend_dict() will be 597898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project// called at least once for each dictionary. 607898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project// 617898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project// For example, when the user inputs "wm", extend_dict() will be called twice, 627898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project// and the DictExtPara parameter are as follows respectively: 637898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project// 1. splids = {w, m}; splids_extended = 1; ext_len = 1; step_no = 1; 647898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project// splid_end_split = false; id_start = wa(the first id start with 'w'); 657898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project// id_num = number of ids starting with 'w'. 667898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project// 2. splids = {m}; splids_extended = 0; ext_len = 1; step_no = 1; 677898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project// splid_end_split = false; id_start = wa; id_num = number of ids starting with 687898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project// 'w'. 697898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project// 707898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project// For string "women", one of the cases of the DictExtPara parameter is: 717898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project// splids = {wo, men}, splids_extended = 1, ext_len = 3 (length of "men"), 727898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project// step_no = 4; splid_end_split = false; id_start = men, id_num = 1. 737898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project// 747898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projecttypedef struct { 757898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project // Spelling ids for extending, there are splids_extended + 1 ids in the 767898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project // buffer. 777898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project // For a normal lemma, there can only be kMaxLemmaSize spelling ids in max, 787898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project // but for a composing phrase, there can kMaxSearchSteps spelling ids. 797898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project uint16 splids[kMaxSearchSteps]; 807898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 817898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project // Number of ids that have been used before. splids[splids_extended] is the 827898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project // newly added id for the current extension. 837898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project uint16 splids_extended; 847898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 857898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project // The step span of the extension. It is also the size of the string for 867898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project // the newly added spelling id. 877898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project uint16 ext_len; 887898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 897898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project // The step number for the current extension. It is also the ending position 907898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project // in the input Pinyin string for the substring of spelling ids in splids[]. 917898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project // For example, when the user inputs "women", step_no = 4. 927898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project // This parameter may useful to manage the MileStoneHandle list for each 937898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project // step. When the user deletes a character from the string, MileStoneHandle 947898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project // objects for the the steps after that character should be reset; when the 957898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project // user begins a new string, all MileStoneHandle objects should be reset. 967898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project uint16 step_no; 977898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 987898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project // Indicate whether the newly added spelling ends with a splitting character 997898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project bool splid_end_split; 1007898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1017898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project // If the newly added id is a half id, id_start is the first id of the 1027898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project // corresponding full ids; if the newly added id is a full id, id_start is 1037898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project // that id. 1047898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project uint16 id_start; 1057898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1067898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project // If the newly added id is a half id, id_num is the number of corresponding 1077898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project // ids; if it is a full id, id_num == 1. 1087898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project uint16 id_num; 1097898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project}DictExtPara, *PDictExtPara; 1107898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1117898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectbool is_system_lemma(LemmaIdType lma_id); 1127898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectbool is_user_lemma(LemmaIdType lma_id); 1137898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectbool is_composing_lemma(LemmaIdType lma_id); 1147898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1157898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectint cmp_lpi_with_psb(const void *p1, const void *p2); 1167898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectint cmp_lpi_with_unified_psb(const void *p1, const void *p2); 1177898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectint cmp_lpi_with_id(const void *p1, const void *p2); 1187898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectint cmp_lpi_with_hanzi(const void *p1, const void *p2); 1197898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1207898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectint cmp_lpsi_with_str(const void *p1, const void *p2); 1217898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1227898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectint cmp_hanzis_1(const void *p1, const void *p2); 1237898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectint cmp_hanzis_2(const void *p1, const void *p2); 1247898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectint cmp_hanzis_3(const void *p1, const void *p2); 1257898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectint cmp_hanzis_4(const void *p1, const void *p2); 1267898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectint cmp_hanzis_5(const void *p1, const void *p2); 1277898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectint cmp_hanzis_6(const void *p1, const void *p2); 1287898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectint cmp_hanzis_7(const void *p1, const void *p2); 1297898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectint cmp_hanzis_8(const void *p1, const void *p2); 1307898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1317898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectint cmp_npre_by_score(const void *p1, const void *p2); 1327898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectint cmp_npre_by_hislen_score(const void *p1, const void *p2); 1337898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectint cmp_npre_by_hanzi_score(const void *p1, const void *p2); 1347898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1357898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1367898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectsize_t remove_duplicate_npre(NPredictItem *npre_items, size_t npre_num); 1377898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1387898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectsize_t align_to_size_t(size_t size); 1397898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1407898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project} // namespace 1417898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1427898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project#endif // PINYINIME_ANDPY_INCLUDE_SEARCHCOMMON_H__ 143