6 #ifndef _FCITX_LIBIME_CORE_HISTORYBIGRAM_H_ 7 #define _FCITX_LIBIME_CORE_HISTORYBIGRAM_H_ 16 #include <string_view> 17 #include <unordered_set> 20 #include <fcitx-utils/macros.h> 21 #include <libime/core/lattice.h> 22 #include <libime/core/libimecore_export.h> 26 class HistoryBigramPrivate;
28 using ValidationCodeExtractor = std::function<std::string(const WordNode *)>;
32 using WordWithCode = std::pair<std::string, std::string>;
33 using WordWithCodeView = std::pair<std::string_view, std::string_view>;
39 void load(std::istream &in);
40 void loadText(std::istream &in);
41 void save(std::ostream &out);
42 void dump(std::ostream &out);
47 void setUnknownPenalty(
float unknown);
48 float unknownPenalty()
const;
50 void setUseOnlyUnigram(
bool useOnlyUnigram);
51 bool useOnlyUnigram()
const;
53 void forget(std::string_view word);
54 void forget(std::string_view word, std::string_view code);
56 bool isUnknown(std::string_view v)
const;
58 float score(std::string_view prev, std::string_view cur)
const;
59 float scoreWithCode(WordWithCodeView prev, WordWithCodeView cur)
const;
61 const ValidationCodeExtractor &extractor)
const;
63 void add(
const std::vector<std::string> &sentence);
65 const ValidationCodeExtractor &validationCodeExtractor);
67 addWithCode(
const std::vector<WordWithCode> &sentenceWithValidationCode);
70 void fillPredict(std::unordered_set<std::string> &words,
71 const std::vector<std::string> &sentence,
72 size_t maxSize)
const;
74 bool containsBigram(std::string_view prev, std::string_view cur)
const;
81 float unigramFrequency(WordWithCodeView word)
const;
88 float bigramFrequency(WordWithCodeView prev, WordWithCodeView cur)
const;
95 int32_t rawUnigramFrequency(WordWithCodeView word)
const;
102 int32_t rawBigramFrequency(WordWithCodeView prev,
103 WordWithCodeView cur)
const;
105 void addWithContext(
const std::vector<WordWithCode> &context,
106 std::vector<WordWithCode> newSentence);
109 std::unique_ptr<HistoryBigramPrivate> d_ptr;
114 #endif // _FCITX_LIBIME_CORE_HISTORYBIGRAM_H_