public void InsertWord(String word, double frequency, POS pos)
{
if (_WordDict == null)
{
return;
}
string key = word.ToLower();
if (key.Length == 1)
{
if (_FirstCharDict.ContainsKey(key[0]))
{
_FirstCharDict[key[0]].Pos = pos;
_FirstCharDict[key[0]].Frequency += frequency;
return;
}
}
if (key.Length == 2)
{
uint doubleChar = ((uint)key[0] * 65536) + key[1];
if (_DoubleCharDict.ContainsKey(doubleChar))
{
_DoubleCharDict[doubleChar].Pos = pos;
_DoubleCharDict[doubleChar].Frequency += frequency;
return;
}
}
if (_WordDict.ContainsKey(key))
{
_WordDict[key].Pos = pos;
_WordDict[key].Frequency += frequency;
return;
}
WordAttribute wa = new WordAttribute(word, pos, frequency);
if (key.Length == 1)
{
if (!_FirstCharDict.ContainsKey(key[0]))
{
_FirstCharDict.Add(key[0], wa);
return;
}
}
if (key.Length == 2)
{
uint doubleChar = ((uint)key[0] * 65536) + key[1];
if (!_DoubleCharDict.ContainsKey(doubleChar))
{
_DoubleCharDict.Add(doubleChar, wa);
return;
}
}
_WordDict.Add(key, wa);
long tripleChar = ((long)key[0]) * 0x100000000 + (uint)(key[1] * 65536) + key[2];
byte[] wordLenArray;
if (!_TripleCharDict.TryGetValue(tripleChar, out wordLenArray))
{
wordLenArray = new byte[4];
wordLenArray[0] = (byte)key.Length;
_TripleCharDict.Add(tripleChar, wordLenArray);
}
else
{
bool find = false;
int i;
for (i = 0; i < wordLenArray.Length; i++)
{
byte len = wordLenArray[i];
if (len == key.Length)
{
find = true;
break;
}
if (len == 0)
{
wordLenArray[i] = (byte)key.Length;
find = true;
break;
}
}
if (!find)
{
byte[] temp = new byte[wordLenArray.Length * 2];
wordLenArray.CopyTo(temp, 0);
wordLenArray = temp;
wordLenArray[i] = (byte)key.Length;
_TripleCharDict[tripleChar] = wordLenArray;
}
}
}