summaryrefslogtreecommitdiffstats
path: root/src/lookup
diff options
context:
space:
mode:
authorPeng Wu <alexepico@gmail.com>2017-01-10 16:27:29 +0800
committerPeng Wu <alexepico@gmail.com>2017-01-10 16:27:29 +0800
commitfc9efc97091cd0a1b537ca65d4dc161ce3bf5779 (patch)
tree2176ff95b7be67060190177c86e5beff36da690c /src/lookup
parent74471d1503578eeba1c4944b78436bd4e1c5ede8 (diff)
downloadlibpinyin-fc9efc97091cd0a1b537ca65d4dc161ce3bf5779.tar.gz
libpinyin-fc9efc97091cd0a1b537ca65d4dc161ce3bf5779.tar.xz
libpinyin-fc9efc97091cd0a1b537ca65d4dc161ce3bf5779.zip
write eval_item method
Diffstat (limited to 'src/lookup')
-rw-r--r--src/lookup/phonetic_lookup.h52
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 */