mirror of
https://github.com/yanyiwu/cppjieba.git
synced 2025-07-18 00:00:12 +08:00
finished cutRMM
This commit is contained in:
parent
22522b355c
commit
0200ff1d01
62
Segment.cpp
62
Segment.cpp
@ -22,7 +22,56 @@ namespace CppJieba
|
|||||||
|
|
||||||
bool Segment::cutRMM(const string& chStr, vector<string>& res)
|
bool Segment::cutRMM(const string& chStr, vector<string>& res)
|
||||||
{
|
{
|
||||||
return false;
|
res.clear();
|
||||||
|
char logBuf[bufSize];
|
||||||
|
char utfBuf[bufSize];
|
||||||
|
ChUnicode uniStr[bufSize];
|
||||||
|
memset(uniStr, 0, sizeof(uniStr));
|
||||||
|
size_t len = utf8ToUnicode(chStr.c_str(), chStr.size(), uniStr);
|
||||||
|
|
||||||
|
if(0 == len)
|
||||||
|
{
|
||||||
|
sprintf(logBuf, "utf8ToUnicode [%s] failed!", chStr.c_str());
|
||||||
|
LogError(logBuf);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(sizeof(uniStr) - len <= 5)
|
||||||
|
{
|
||||||
|
sprintf(logBuf, "%s too long!", chStr.c_str());
|
||||||
|
LogError(logBuf);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int i = len - 1;
|
||||||
|
while(i >= 0)
|
||||||
|
{
|
||||||
|
bool flag = false;
|
||||||
|
for(int j = 0; j <= i; j++)
|
||||||
|
{
|
||||||
|
size_t uniLen = i - j + 1;
|
||||||
|
if(_trie.find(uniStr + j, uniLen))
|
||||||
|
{
|
||||||
|
memset(utfBuf, 0 ,sizeof(utfBuf));
|
||||||
|
size_t ret = unicodeToUtf8(uniStr + j, uniLen, utfBuf);
|
||||||
|
if(0 == ret)
|
||||||
|
{
|
||||||
|
LogError("unicodeToUtf8 failed!");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
res.push_back(utfBuf);
|
||||||
|
flag = true;
|
||||||
|
i -= uniLen;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!flag)
|
||||||
|
{
|
||||||
|
i--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -34,6 +83,17 @@ int main()
|
|||||||
{
|
{
|
||||||
Segment segment;
|
Segment segment;
|
||||||
segment.init("dict.utf8");
|
segment.init("dict.utf8");
|
||||||
|
vector<string> res;
|
||||||
|
string title = "我来到北京清华大学3D电视";
|
||||||
|
bool flag = segment.cutRMM(title, res);
|
||||||
|
if(flag)
|
||||||
|
{
|
||||||
|
for(int i = 0; i < res.size(); i++)
|
||||||
|
{
|
||||||
|
cout<<res[i]<<endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
segment.destroy();
|
segment.destroy();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user