From b4276f04889afb2c4e36d3914c7a224851d17fc7 Mon Sep 17 00:00:00 2001 From: zonble Date: Mon, 10 Jan 2022 00:44:08 +0800 Subject: [PATCH] Fixes a bug on building the vector for unigrams from both global language model and user phrases. --- .../Engine/Gramambular/BlockReadingBuilder.h | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/Source/Engine/Gramambular/BlockReadingBuilder.h b/Source/Engine/Gramambular/BlockReadingBuilder.h index 516ec69a..52cd2a86 100644 --- a/Source/Engine/Gramambular/BlockReadingBuilder.h +++ b/Source/Engine/Gramambular/BlockReadingBuilder.h @@ -221,16 +221,22 @@ namespace Formosa { for (size_t p = begin ; p < end ; p++) { for (size_t q = 1 ; q <= MaximumBuildSpanLength && p+q <= end ; q++) { string combinedReading = Join(m_readings.begin() + p, m_readings.begin() + p + q, m_joinSeparator); - if (m_UserPhraseLM != NULL) { - if (m_UserPhraseLM->hasUnigramsForKey(combinedReading) && !m_grid.hasNodeAtLocationSpanningLengthMatchingKey(p, q, combinedReading)) { - Node n(combinedReading, m_UserPhraseLM->unigramsForKeys(combinedReading), vector()); - m_grid.insertNode(n, p, q); - continue; + if (!m_grid.hasNodeAtLocationSpanningLengthMatchingKey(p, q, combinedReading)) { + vector unigrams; + + if (m_UserPhraseLM != NULL) { + if (m_UserPhraseLM->hasUnigramsForKey(combinedReading)) { + vector userUnigrams = m_UserPhraseLM->unigramsForKeys(combinedReading); + unigrams.insert(unigrams.end(), userUnigrams.begin(), userUnigrams.end()); + } } - } - - if (m_LM->hasUnigramsForKey(combinedReading) && !m_grid.hasNodeAtLocationSpanningLengthMatchingKey(p, q, combinedReading)) { - Node n(combinedReading, m_LM->unigramsForKeys(combinedReading), vector()); + + if (m_LM->hasUnigramsForKey(combinedReading)) { + vector globalUnigrams = m_LM->unigramsForKeys(combinedReading); + unigrams.insert(unigrams.end(), globalUnigrams.begin(), globalUnigrams.end()); + } + + Node n(combinedReading, unigrams, vector()); m_grid.insertNode(n, p, q); } }