librime 1.2
Rime Input Method Engine, the core library
vocabulary.h
Go to the documentation of this file.
1//
2// Copyright RIME Developers
3// Distributed under the BSD License
4//
5// 2011-07-10 GONG Chen <chen.sst@gmail.com>
6//
7
8#ifndef RIME_VOCABULARY_H_
9#define RIME_VOCABULARY_H_
10
11#include <stdint.h>
12#include <rime_api.h>
13#include <rime/common.h>
14
15namespace rime {
16
17using Syllabary = set<string>;
18
19using SyllableId = int32_t;
20
21class Code : public vector<SyllableId> {
22 public:
23 Code() = default;
24 Code(const Code::const_iterator& begin, const Code::const_iterator& end)
25 : vector<SyllableId>(begin, end) {}
26
27 static const size_t kIndexCodeMaxLength = 3;
28
29 bool operator<(const Code& other) const;
30 bool operator==(const Code& other) const;
31
32 void CreateIndex(Code* index_code);
33
34 string ToString() const;
35};
36
38 string text;
39 Code code; // multi-syllable code from prism
40 double weight = 0.0;
41
42 ShortDictEntry() = default;
43 bool operator<(const ShortDictEntry& other) const;
44};
45
46struct DictEntry {
47 string text;
48 string comment;
49 string preedit;
50 Code code; // multi-syllable code from prism
51 string custom_code; // user defined code
52 double weight = 0.0;
53 // 全碼匹配長度積分,記錄該詞條對應的路徑中,屬於「全拼」部分的字符總長度
54 double quality_len = 0.0;
55 int commit_count = 0;
58
59 DictEntry() = default;
60 ShortDictEntry ToShort() const { return {text, code, weight}; }
61 bool IsExactMatch() const {
62 return matching_code_size == 0 || matching_code_size == code.size();
63 }
64 bool IsPredictiveMatch() const {
65 return matching_code_size != 0 && matching_code_size < code.size();
66 }
67 bool operator<(const DictEntry& other) const;
68};
69
70class ShortDictEntryList : public vector<of<ShortDictEntry>> {
71 public:
72 void Sort();
73 void SortRange(size_t start, size_t count);
74};
75
76class DictEntryList : public vector<of<DictEntry>> {
77 public:
78 void Sort();
79 void SortRange(size_t start, size_t count);
80};
81
82using DictEntryFilter = function<bool(an<DictEntry> entry)>;
83
85 public:
86 virtual ~DictEntryFilterBinder() = default;
87 virtual void AddFilter(DictEntryFilter filter);
88
89 protected:
91};
92
93class Vocabulary;
94
98};
99
100class Vocabulary : public map<int, VocabularyPage> {
101 public:
103 void SortHomophones();
104};
105
106// word -> { code, ... }
108
109} // namespace rime
110
111#endif // RIME_VOCABULARY_H_
#define RIME_DLL
Definition rime_api.h:33
Definition algebra.cc:12
std::shared_ptr< T > an
Definition common.h:60
set< string > Syllabary
Definition vocabulary.h:17
function< bool(an< DictEntry > entry)> DictEntryFilter
Definition vocabulary.h:82
boost::unordered_map< Key, T > hash_map
Definition common.h:53
int32_t SyllableId
Definition syllabifier.h:21
hash_map< string, set< string > > ReverseLookupTable
Definition vocabulary.h:107
Definition vocabulary.h:21
Code(const Code::const_iterator &begin, const Code::const_iterator &end)
Definition vocabulary.h:24
Code()=default
static const size_t kIndexCodeMaxLength
Definition vocabulary.h:27
bool operator==(const Code &other) const
Definition vocabulary.cc:25
void CreateIndex(Code *index_code)
Definition vocabulary.cc:35
string ToString() const
Definition vocabulary.cc:46
bool operator<(const Code &other) const
Definition vocabulary.cc:15
Definition vocabulary.h:37
bool operator<(const ShortDictEntry &other) const
Definition vocabulary.cc:60
ShortDictEntry()=default
double weight
Definition vocabulary.h:40
string text
Definition vocabulary.h:38
Code code
Definition vocabulary.h:39
Definition vocabulary.h:46
bool IsExactMatch() const
Definition vocabulary.h:61
int remaining_code_length
Definition vocabulary.h:56
DictEntry()=default
int matching_code_size
Definition vocabulary.h:57
double weight
Definition vocabulary.h:52
string custom_code
Definition vocabulary.h:51
double quality_len
Definition vocabulary.h:54
string comment
Definition vocabulary.h:48
ShortDictEntry ToShort() const
Definition vocabulary.h:60
string preedit
Definition vocabulary.h:49
bool operator<(const DictEntry &other) const
Definition vocabulary.cc:68
string text
Definition vocabulary.h:47
bool IsPredictiveMatch() const
Definition vocabulary.h:64
int commit_count
Definition vocabulary.h:55
Code code
Definition vocabulary.h:50
Definition vocabulary.h:70
void Sort()
Definition vocabulary.cc:96
void SortRange(size_t start, size_t count)
Definition vocabulary.cc:100
Definition vocabulary.h:76
void SortRange(size_t start, size_t count)
Definition vocabulary.cc:108
void Sort()
Definition vocabulary.cc:104
Definition vocabulary.h:84
virtual void AddFilter(DictEntryFilter filter)
Definition vocabulary.cc:112
virtual ~DictEntryFilterBinder()=default
DictEntryFilter filter_
Definition vocabulary.h:90
Definition vocabulary.h:95
an< Vocabulary > next_level
Definition vocabulary.h:97
ShortDictEntryList entries
Definition vocabulary.h:96
Definition vocabulary.h:100
ShortDictEntryList * LocateEntries(const Code &code)
Definition vocabulary.cc:123
void SortHomophones()
Definition vocabulary.cc:143