diff options
author | Peng Wu <alexepico@gmail.com> | 2017-01-10 16:27:29 +0800 |
---|---|---|
committer | Peng Wu <alexepico@gmail.com> | 2017-01-10 16:27:29 +0800 |
commit | fc9efc97091cd0a1b537ca65d4dc161ce3bf5779 (patch) | |
tree | 2176ff95b7be67060190177c86e5beff36da690c /src/lookup/phonetic_lookup.h | |
parent | 74471d1503578eeba1c4944b78436bd4e1c5ede8 (diff) | |
download | libpinyin-fc9efc97091cd0a1b537ca65d4dc161ce3bf5779.tar.gz libpinyin-fc9efc97091cd0a1b537ca65d4dc161ce3bf5779.tar.xz libpinyin-fc9efc97091cd0a1b537ca65d4dc161ce3bf5779.zip |
write eval_item method
Diffstat (limited to 'src/lookup/phonetic_lookup.h')
-rw-r--r-- | src/lookup/phonetic_lookup.h | 52 |
1 files changed, 48 insertions, 4 deletions
diff --git a/src/lookup/phonetic_lookup.h b/src/lookup/phonetic_lookup.h index c6c04e6..5de61e8 100644 --- a/src/lookup/phonetic_lookup.h +++ b/src/lookup/phonetic_lookup.h @@ -69,7 +69,29 @@ public: const trellis_value_t * end() { return m_elements + m_nelem; } /* return true if the item is stored into m_elements. */ - bool eval_item(const trellis_value_t * item); + bool eval_item(const trellis_value_t * item) { + /* still have space */ + if (m_nelem < nbest) { + m_elements[m_nelem] = *item; + m_nelem ++; + return true; + } + + /* find minium item */ + trellis_value_t * min = m_elements; + for (gint32 i = 1; i < m_nelem; ++i) { + if (min->m_poss > m_elements[i].m_poss) + min = m_elements + i; + } + + /* compare new item */ + if (item->m_poss > min->m_poss) { + *min = *item; + return true; + } + + return false; + } }; struct matrix_value_t { @@ -107,7 +129,29 @@ public: const matrix_value_t * end() { return m_elements + m_nelem; } /* return true if the item is stored into m_elements. */ - bool eval_item(const trellis_value_t * item); + bool eval_item(const trellis_value_t * item) { + /* still have space */ + if (m_nelem < nbest) { + m_elements[m_nelem] = *item; + m_nelem ++; + return true; + } + + /* find minium item */ + matrix_value_t * min = m_elements; + for (gint32 i = 1; i < m_nelem; ++i) { + if (min->m_poss > m_elements[i].m_poss) + min = m_elements + i; + } + + /* compare new item */ + if (item->m_poss > min->m_poss) { + *min = *item; + return true; + } + + return false; + } }; struct trellis_constraint_t { @@ -207,8 +251,8 @@ private: const gfloat unigram_lambda; protected: - ForwardPhoneticTrellis m_forward_trellis; - BackwardPhoneticMatrix m_backward_matrix; + ForwardPhoneticTrellis<nbest> m_forward_trellis; + BackwardPhoneticMatrix<nbest> m_backward_matrix; protected: /* saved varibles */ |