summaryrefslogtreecommitdiffstats
path: root/src/storage/punct_table.cpp
diff options
context:
space:
mode:
authorPeng Wu <alexepico@gmail.com>2024-09-29 13:36:15 +0800
committerPeng Wu <alexepico@gmail.com>2024-09-29 13:36:15 +0800
commitbfcf58960acfa5d6aa64f2f67fa05b0ce2b63c8e (patch)
tree7bf3f2cadd7a7f616d7510e1967f74c789a8a071 /src/storage/punct_table.cpp
parent1601e32083f5e7aec1e883a95519514b8ce8583b (diff)
downloadlibpinyin-bfcf58960acfa5d6aa64f2f67fa05b0ce2b63c8e.tar.gz
libpinyin-bfcf58960acfa5d6aa64f2f67fa05b0ce2b63c8e.tar.xz
libpinyin-bfcf58960acfa5d6aa64f2f67fa05b0ce2b63c8e.zip
Update class PunctTable
Diffstat (limited to 'src/storage/punct_table.cpp')
-rw-r--r--src/storage/punct_table.cpp58
1 files changed, 58 insertions, 0 deletions
diff --git a/src/storage/punct_table.cpp b/src/storage/punct_table.cpp
index 461d4bc..249f6c3 100644
--- a/src/storage/punct_table.cpp
+++ b/src/storage/punct_table.cpp
@@ -143,3 +143,61 @@ bool PunctTableEntry::remove_punctuation(const gchar * punct) {
return false;
}
+
+bool PunctTable::get_all_punctuations(/* in */ phrase_token_t index,
+ /* out */ gchar ** & puncts) {
+ assert(NULL == puncts);
+
+ if (!load_entry(index))
+ return false;
+
+ return m_entry->get_all_punctuations(puncts);
+}
+
+bool PunctTable::append_punctuation(/* in */ phrase_token_t index,
+ /* in */ const gchar * punct) {
+ if (!load_entry(index))
+ return false;
+ if (!m_entry->append_punctuation(punct))
+ return false;
+ if (!store_entry(index))
+ return false;
+ return true;
+}
+
+bool PunctTable::remove_punctuation(/* in */ phrase_token_t index,
+ /* in */ const gchar * punct) {
+ if (!load_entry(index))
+ return false;
+ if (!m_entry->remove_punctuation(punct))
+ return false;
+ if (!store_entry(index))
+ return false;
+ return true;
+}
+
+bool PunctTable::load_text(FILE * infile) {
+ phrase_token_t token;
+ char phrase[256];
+ char punct[256];
+ size_t freq;
+
+ while (!feof(infile)) {
+#ifdef __APPLE__
+ int num = fscanf(infile, "%u %255[^ \t] %255[^ \t] %ld",
+ &token, phrase, punct, &freq);
+#else
+ int num = fscanf(infile, "%u %255s %255s %ld",
+ &token, phrase, punct, &freq);
+#endif
+
+ if (4 != num)
+ continue;
+
+ if (feof(infile))
+ break;
+
+ append_punctuation(token, punct);
+ }
+ return true;
+}