summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeng Wu <alexepico@gmail.com>2016-06-13 15:31:54 +0800
committerPeng Wu <alexepico@gmail.com>2016-06-13 15:31:54 +0800
commit3b07d6126db7834386bf1aab160a3642340730ef (patch)
tree09c5ab1936d887220d44a8c241035771f9db9366
parent5e45e62467c4d55a724c6c9058653a88fe61f21c (diff)
downloadlibpinyin-3b07d6126db7834386bf1aab160a3642340730ef.tar.gz
libpinyin-3b07d6126db7834386bf1aab160a3642340730ef.tar.xz
libpinyin-3b07d6126db7834386bf1aab160a3642340730ef.zip
fixes compile
-rw-r--r--src/pinyin.cpp35
-rw-r--r--src/pinyin.h20
-rw-r--r--src/storage/chewing_key.h4
3 files changed, 42 insertions, 17 deletions
diff --git a/src/pinyin.cpp b/src/pinyin.cpp
index 5727382..1d50ea9 100644
--- a/src/pinyin.cpp
+++ b/src/pinyin.cpp
@@ -363,7 +363,7 @@ pinyin_context_t * pinyin_init(const char * systemdir, const char * userdir){
gfloat lambda = context->m_system_table_info.get_lambda();
context->m_pinyin_lookup = new PinyinLookup2
- ( lambda, context->m_options,
+ ( lambda,
context->m_pinyin_table, context->m_phrase_index,
context->m_system_bigram, context->m_user_bigram);
@@ -1627,7 +1627,6 @@ static bool _remove_duplicated_items_by_phrase_string
if (ZOMBIE_CANDIDATE == candidate->m_candidate_type) {
g_free(candidate->m_phrase_string);
- g_free(candidate->m_new_pinyins);
g_array_remove_index(candidates, i);
i--;
}
@@ -1642,7 +1641,6 @@ static bool _free_candidates(CandidateVector candidates) {
lookup_candidate_t * candidate = &g_array_index
(candidates, lookup_candidate_t, i);
g_free(candidate->m_phrase_string);
- g_free(candidate->m_new_pinyins);
}
g_array_set_size(candidates, 0);
@@ -1710,7 +1708,7 @@ bool pinyin_guess_candidates(pinyin_instance_t * instance,
/* matrix reserved one extra slot. */
const size_t start = offset;
- for (end = start + 1; end < matrix.size();) {
+ for (size_t end = start + 1; end < matrix.size();) {
g_array_set_size(items, 0);
/* do pinyin search. */
@@ -1759,6 +1757,8 @@ bool pinyin_guess_candidates(pinyin_instance_t * instance,
/* skip the consecutive zero ChewingKey "'",
to avoid duplicates of candidates. */
++end;
+ ChewingKey key; ChewingKeyRest key_rest;
+ const ChewingKey zero_key;
for (; end < matrix.size(); ++end) {
const size_t index = end - 1;
const size_t size = matrix.get_column_size(index);
@@ -2177,7 +2177,6 @@ bool pinyin_guess_predicted_candidates(pinyin_instance_t * instance,
pinyin_context_t * & context = instance->m_context;
FacadePhraseIndex * & phrase_index = context->m_phrase_index;
- TokenVector prefixes = instance->m_prefixes;
_free_candidates(instance->m_candidates);
@@ -2246,7 +2245,7 @@ bool pinyin_guess_predicted_candidates(pinyin_instance_t * instance,
delete user_gram;
/* post process to remove duplicated candidates */
- _compute_phrase_strings_of_items(instance, 0, instance->m_candidates);
+ _compute_phrase_strings_of_items(instance, instance->m_candidates);
_remove_duplicated_items_by_phrase_string(instance, instance->m_candidates);
@@ -2262,7 +2261,7 @@ int pinyin_choose_candidate(pinyin_instance_t * instance,
PhoneticKeyMatrix & matrix = instance->m_matrix;
if (BEST_MATCH_CANDIDATE == candidate->m_candidate_type)
- return instance->m_pinyin_keys->len;
+ return matrix.size() - 1;
if (ADDON_CANDIDATE == candidate->m_candidate_type) {
PhraseItem item;
@@ -2410,24 +2409,22 @@ bool pinyin_train(pinyin_instance_t * instance){
if (!instance->m_context->m_user_dir)
return false;
- pinyin_context_t * & context = instance->m_context;
+ pinyin_context_t * context = instance->m_context;
+ PhoneticKeyMatrix & matrix = instance->m_matrix;
+
context->m_modified = true;
bool retval = context->m_pinyin_lookup->train_result2
- (instance->m_pinyin_keys, instance->m_constraints,
+ (&matrix, instance->m_constraints,
instance->m_match_results);
return retval;
}
bool pinyin_reset(pinyin_instance_t * instance){
- g_free(instance->m_raw_full_pinyin);
- instance->m_raw_full_pinyin = NULL;
instance->m_parsed_len = 0;
g_array_set_size(instance->m_prefixes, 0);
- g_array_set_size(instance->m_pinyin_keys, 0);
- g_array_set_size(instance->m_pinyin_key_rests, 0);
g_array_set_size(instance->m_constraints, 0);
g_array_set_size(instance->m_match_results, 0);
_free_candidates(instance->m_candidates);
@@ -2643,7 +2640,7 @@ bool pinyin_get_pinyin_key(pinyin_instance_t * instance,
size_t offset,
ChewingKey ** ppkey) {
PhoneticKeyMatrix & matrix = instance->m_matrix;
- *key = NULL;
+ *ppkey = NULL;
if (offset >= matrix.size() - 1)
return false;
@@ -2666,7 +2663,7 @@ bool pinyin_get_pinyin_key_rest(pinyin_instance_t * instance,
size_t offset,
ChewingKeyRest ** ppkey_rest) {
PhoneticKeyMatrix & matrix = instance->m_matrix;
- *key_rest = NULL;
+ *ppkey_rest = NULL;
if (offset >= matrix.size() - 1)
return false;
@@ -2752,7 +2749,8 @@ bool pinyin_get_left_character_offset(pinyin_instance_t * instance,
_check_offset(matrix, offset);
/* find the ChewingKey ends at offset. */
- size_t left = offset - 1;
+ size_t left = offset > 0 ? offset - 1 : 0;
+
ChewingKey key; ChewingKeyRest key_rest;
for (; left > 0; --left) {
const size_t size = matrix.get_column_size(left);
@@ -2784,7 +2782,10 @@ bool pinyin_get_right_character_offset(pinyin_instance_t * instance,
/* find the first non-zero ChewingKey. */
size_t right = offset;
- for (size_t index = right; index < matrix.size(); ++index) {
+
+ ChewingKey key; ChewingKeyRest key_rest;
+ const ChewingKey zero_key;
+ for (size_t index = right; index < matrix.size() - 1; ++index) {
const size_t size = matrix.get_column_size(index);
if (1 != size)
diff --git a/src/pinyin.h b/src/pinyin.h
index 26ffb81..b15925a 100644
--- a/src/pinyin.h
+++ b/src/pinyin.h
@@ -870,10 +870,30 @@ bool pinyin_get_pinyin_offset(pinyin_instance_t * instance,
size_t cursor,
size_t * offset);
+/**
+ * pinyin_get_left_character_offset:
+ * @instance: the pinyin instance.
+ * @offset: the lookup offset.
+ * @left: the left offset.
+ * @returns: whether the get operation is successful.
+ *
+ * Get the left offset from the lookup offset.
+ *
+ */
bool pinyin_get_left_character_offset(pinyin_instance_t * instance,
size_t offset,
size_t * left);
+/**
+ * pinyin_get_right_character_offset:
+ * @instance: the pinyin instance.
+ * @offset: the lookup offset.
+ * @right: the right offset.
+ * @returns: whether the get operation is successful.
+ *
+ * Get the right offset from the lookup offset.
+ *
+ */
bool pinyin_get_right_character_offset(pinyin_instance_t * instance,
size_t offset,
size_t * right);
diff --git a/src/storage/chewing_key.h b/src/storage/chewing_key.h
index d6bcc19..3229cae 100644
--- a/src/storage/chewing_key.h
+++ b/src/storage/chewing_key.h
@@ -87,6 +87,10 @@ static inline bool operator == (ChewingKey lhs, ChewingKey rhs) {
return true;
}
+static inline bool operator != (ChewingKey lhs, ChewingKey rhs) {
+ return !(lhs == rhs);
+}
+
struct _ChewingKeyRest
{
/* Note: the table index is removed,