mirror of
https://github.com/yanyiwu/cppjieba.git
synced 2025-07-18 00:00:12 +08:00
finished cutDAG
This commit is contained in:
parent
9122aeeba6
commit
83a8474a1d
72
Segment.cpp
72
Segment.cpp
@ -22,6 +22,7 @@ namespace CppJieba
|
|||||||
|
|
||||||
bool Segment::cutDAG(const string& chStr, vector<string>& res)
|
bool Segment::cutDAG(const string& chStr, vector<string>& res)
|
||||||
{
|
{
|
||||||
|
bool retFlag;
|
||||||
res.clear();
|
res.clear();
|
||||||
string uniStr = _utf8ToUni(chStr);
|
string uniStr = _utf8ToUni(chStr);
|
||||||
if(uniStr.empty())
|
if(uniStr.empty())
|
||||||
@ -32,30 +33,31 @@ namespace CppJieba
|
|||||||
|
|
||||||
//calc DAG
|
//calc DAG
|
||||||
vector<vector<uint> > dag;
|
vector<vector<uint> > dag;
|
||||||
_calcDAG(uniStr, dag);
|
retFlag = _calcDAG(uniStr, dag);
|
||||||
|
if(!retFlag)
|
||||||
cout<<__FILE__<<__LINE__<<endl;
|
|
||||||
PRINT_MATRIX(dag);
|
|
||||||
getchar();
|
|
||||||
|
|
||||||
vector<pair<int, double> > dp;
|
|
||||||
_calcDP(uniStr, dag, dp);
|
|
||||||
|
|
||||||
cout<<__FILE__<<__LINE__<<endl;
|
|
||||||
for(int i = 0 ;i< dp.size(); i++)
|
|
||||||
{
|
{
|
||||||
cout<<dp[i].first<<","
|
LogError("_calcDAG failed.");
|
||||||
<<dp[i].second<<endl;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//cout<<__FILE__<<__LINE__<<endl;
|
||||||
|
//PRINT_MATRIX(dag);
|
||||||
|
//getchar();
|
||||||
|
|
||||||
//calc dp
|
|
||||||
|
|
||||||
|
|
||||||
|
vector<pair<int, double> > dp;
|
||||||
|
retFlag = _calcDP(uniStr, dag, dp);
|
||||||
|
if(!retFlag)
|
||||||
|
{
|
||||||
|
LogError("_calcDP failed.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
retFlag = _cutDAG(uniStr, dp, res);
|
||||||
|
if(!retFlag)
|
||||||
|
{
|
||||||
|
LogError("_cutDAG failed.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -128,6 +130,38 @@ namespace CppJieba
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
res.pop_back();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
bool Segment::_cutDAG(const string& uniStr, const vector<pair<int, double> >& dp, vector<string>& res)
|
||||||
|
{
|
||||||
|
if(dp.size() != uniStr.size()/2)
|
||||||
|
{
|
||||||
|
LogError("dp or uniStr illegal!");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
res.clear();
|
||||||
|
|
||||||
|
uint begin = 0;
|
||||||
|
for(uint i = 0; i < dp.size(); i++)
|
||||||
|
{
|
||||||
|
//cout<<dp[i].first<<","
|
||||||
|
// <<dp[i].second<<endl;
|
||||||
|
uint end = dp[i].first * 2 + 2;
|
||||||
|
if(end <= begin)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
string tmp = unicodeToUtf8(uniStr.substr(begin, end - begin));
|
||||||
|
if(tmp.empty())
|
||||||
|
{
|
||||||
|
LogError("unicodeToUtf8 failed.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
res.push_back(tmp);
|
||||||
|
begin = end;
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,6 +24,7 @@ namespace CppJieba
|
|||||||
string _utf8ToUni(const string& chStr);
|
string _utf8ToUni(const string& chStr);
|
||||||
bool _calcDAG(const string& uniStr, vector<vector<uint> >& dag);
|
bool _calcDAG(const string& uniStr, vector<vector<uint> >& dag);
|
||||||
bool _calcDP(const string& uniStr, const vector<vector<uint> >& dag, vector<pair<int, double> >& res);
|
bool _calcDP(const string& uniStr, const vector<vector<uint> >& dag, vector<pair<int, double> >& res);
|
||||||
|
bool _cutDAG(const string& uniStr, const vector<pair<int, double> >& dp, vector<string>& res);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
enum {bufSize = 1024};
|
enum {bufSize = 1024};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user