modify Trie.cpp Trie.h

This commit is contained in:
gwdwyy 2013-07-09 14:09:33 +08:00
parent 5fcee293d1
commit e652417351
2 changed files with 26 additions and 6 deletions

View File

@ -63,7 +63,7 @@ namespace CppJieba
return false;
}
string chWord = vecBuf[0];
unsigned int count = atoi(vecBuf[1].c_str());
uint count = atoi(vecBuf[1].c_str());
const string& tag = vecBuf[2];
//insert node
@ -104,10 +104,26 @@ namespace CppJieba
_display(_root, 0);
}
const TrieNodeInfo* Trie::find(const string& uniStr)
{
ChUnicode* pUni = new ChUnicode[uniStr.size()];
for(uint i = 0; i < uniStr.size(); i+=2)
{
//ChUnicode w = (uniStr[i] & 0x00ff);
//w <<= 8;
//w |= (uniStr[i+1] & 0x00ff);
//pUni[i/2] = w;
pUni[i/2] = twocharToUint16(uniStr[i], uniStr[i+1]);
}
const TrieNodeInfo* res = find(pUni, uniStr.size()/2);
delete [] pUni;
return res;
}
const TrieNodeInfo* Trie::find(const ChUnicode* const chUniStr, size_t len)
{
TrieNode* p = _root;
for(size_t i = 0; i < len; i++)
for(uint i = 0; i < len; i++)
{
ChUnicode chUni = chUniStr[i];
if(p->hmap.find(chUni) == p-> hmap.end())
@ -121,7 +137,7 @@ namespace CppJieba
}
if(p->isLeaf)
{
unsigned int pos = p->nodeInfoVecPos;
uint pos = p->nodeInfoVecPos;
if(pos < _nodeInfoVec.size())
{
return &(_nodeInfoVec[pos]);
@ -176,6 +192,7 @@ namespace CppJieba
}
*/
/*
int Trie::findMaxMatch(const ChUnicode* chUniStr, size_t len)
{
int res = -1;
@ -198,9 +215,10 @@ namespace CppJieba
break;
}
}
cout<<__FILE__<<__LINE__<<res<<endl;
//cout<<__FILE__<<__LINE__<<res<<endl;
return res;
}
*/
double Trie::getWeight(const ChUnicode* uniStr, size_t len)
{
@ -353,7 +371,7 @@ namespace CppJieba
_minWeight = nodeInfo.weight;
}
}
cout<<_minWeight<<endl;
//cout<<_minWeight<<endl;
return true;
}

4
Trie.h
View File

@ -68,11 +68,13 @@ namespace CppJieba
void display();
public:
const TrieNodeInfo* find(const string& uniStr);
const TrieNodeInfo* find(const ChUnicode* const chUniStr, size_t len);
int findMaxMatch(const ChUnicode* chUniStr, size_t len);
//int findMaxMatch(const ChUnicode* chUniStr, size_t len);
public:
double getWeight(const ChUnicode* uniStr, size_t len);
double getWeight(const string& uniStr);
private:
bool _buildTree(const char* const filePath);