From 6d69363145dcc30c61a0c1b34caf840fac0d1342 Mon Sep 17 00:00:00 2001 From: yanyiwu Date: Sun, 13 Sep 2015 16:29:35 +0800 Subject: [PATCH] refactor, simplify SegmentBase --- src/SegmentBase.hpp | 47 +++++++++------------------------------------ 1 file changed, 9 insertions(+), 38 deletions(-) diff --git a/src/SegmentBase.hpp b/src/SegmentBase.hpp index 78548e8..a5c766d 100644 --- a/src/SegmentBase.hpp +++ b/src/SegmentBase.hpp @@ -23,51 +23,22 @@ class SegmentBase: public ISegment { } public: virtual void cut(Unicode::const_iterator begin, Unicode::const_iterator end, vector& res) const = 0; - virtual bool cut(const string& str, vector& res) const { - PreFilter pre_filter(symbols_, str); + virtual bool cut(const string& sentence, vector& words) const { + PreFilter pre_filter(symbols_, sentence); PreFilter::Range range; - res.clear(); + vector uwords; + uwords.reserve(sentence.size()); while (pre_filter.HasNext()) { range = pre_filter.Next(); - cut(range.begin, range.end, res); + cut(range.begin, range.end, uwords); + } + words.resize(uwords.size()); + for (size_t i = 0; i < uwords.size(); i++) { + TransCode::encode(uwords[i], words[i]); } - //Unicode unicode; - //unicode.reserve(str.size()); - - //TransCode::decode(str, unicode); - - //Unicode::const_iterator left = unicode.begin(); - //Unicode::const_iterator right; - - //for(right = unicode.begin(); right != unicode.end(); right++) { - // if(isIn(specialSymbols_, *right)) { - // if(left != right) { - // cut(left, right, res); - // } - // res.resize(res.size() + 1); - // TransCode::encode(right, right + 1, res.back()); - // left = right + 1; - // } - //} - //if(left != right) { - // cut(left, right, res); - //} - return true; } - void cut(Unicode::const_iterator begin, - Unicode::const_iterator end, - vector& res) const { - vector uRes; - uRes.reserve(end - begin); - cut(begin, end, uRes); - size_t offset = res.size(); - res.resize(res.size() + uRes.size()); - for(size_t i = 0; i < uRes.size(); i ++, offset++) { - TransCode::encode(uRes[i], res[offset]); - } - } private: void LoadSpecialSymbols() { size_t size = sizeof(SPECIAL_SYMBOL)/sizeof(*SPECIAL_SYMBOL);