示例#1
0
        bool dispose()
        {
#ifndef NO_CODING_LOG
            if(!_getInitFlag())
            {
                return true;
            }
#endif
            _fullSeg.dispose();
            _hmmSeg.dispose();
            _setInitFlag(false);
            return true;
        }
示例#2
0
        bool cut(Unicode::const_iterator begin, Unicode::const_iterator end, vector<Unicode>& res) const
        {
#ifndef NO_CODING_LOG
            if (!_getInitFlag())
            {
                LogError("not inited.");
                return false;
            }
            if (begin > end)
            {
                LogError("begin > end");
                return false;
            }
#endif
            //use hmm cut first
            vector<Unicode> hmmRes;
            if (!_hmmSeg.cut(begin, end, hmmRes))
            {
                LogError("_hmmSeg cut failed.");
                return false;
            }

            vector<Unicode> fullRes;
            for (vector<Unicode>::const_iterator hmmResItr = hmmRes.begin(); hmmResItr != hmmRes.end(); hmmResItr++)
            {
                
                // if it's too long, cut with _fullSeg, put fullRes in res
                if (hmmResItr->size() > _maxWordLen)
                {
                    if (_fullSeg.cut(hmmResItr->begin(), hmmResItr->end(), fullRes))
                    {
                       for (vector<Unicode>::const_iterator fullResItr = fullRes.begin(); fullResItr != fullRes.end(); fullResItr++)
                       {
                           res.push_back(*fullResItr);
                       }
                    }
                }
                else // just use the hmm result
                {
                    res.push_back(*hmmResItr);
                }
            }

            return true;
        }
示例#3
0
        bool cut(Unicode::const_iterator begin, Unicode::const_iterator end, vector<Unicode>& res) const
        {
            assert(_getInitFlag());
            if (begin >= end)
            {
                LogError("begin >= end");
                return false;
            }

            //use mix cut first
            vector<Unicode> mixRes;
            if (!_mixSeg.cut(begin, end, mixRes))
            {
                LogError("_mixSeg cut failed.");
                return false;
            }

            vector<Unicode> fullRes;
            for (vector<Unicode>::const_iterator mixResItr = mixRes.begin(); mixResItr != mixRes.end(); mixResItr++)
            {
                
                // if it's too long, cut with _fullSeg, put fullRes in res
                if (mixResItr->size() > _maxWordLen)
                {
                    if (_fullSeg.cut(mixResItr->begin(), mixResItr->end(), fullRes))
                    {
                       for (vector<Unicode>::const_iterator fullResItr = fullRes.begin(); fullResItr != fullRes.end(); fullResItr++)
                       {
                           res.push_back(*fullResItr);
                       }

                       //clear tmp res
                       fullRes.clear();
                    }
                }
                else // just use the mix result
                {
                    res.push_back(*mixResItr);
                }
            }

            return true;
        }
示例#4
0
 bool init(const string& dict, const string& model, size_t maxWordLen)
 {
     if (_getInitFlag())
     {
         LogError("inited already.");
         return false;
     }
     if (!_mixSeg.init(dict, model))
     {
         LogError("_mixSeg init");
         return false;
     }
     if (!_fullSeg.init(dict))
     {
         LogError("_fullSeg init");
         return false;
     }
     _maxWordLen = maxWordLen;
     return _setInitFlag(true);
 }
示例#5
0
        bool init()
        {
#ifndef NO_CODING_LOG
            if (_getInitFlag())
            {
                LogError("inited.");
            }
#endif
            if (!_hmmSeg.init())
            {
                LogError("_hmmSeg init");
                return false;
            }
            if (!_fullSeg.init())
            {
                LogError("_fullSeg init");
                return false;
            }
            return _setInitFlag(true);
        }