下面的代码是加载词库和分词使用
首先定义一个全局对象
public KeyWordTree KeyTree = new KeyWordTree();接下就是要先把词库加载到内存中,我这里使用一个文本的词库,大小是700k左右,所以放在内存并不会占很大内存,一般来说20-30w的词库放在内存中问题都不大,因为键树本来就很节省空间,首部分相同的字不会重复记录。
比如(计算机,计算,计算器,其中的"计"和"算"都只保存了一次)。下面是加载词库的代码,我放在一个button事件中,大家可以自己喜欢放哪都行,load也行
private void button3_Click(object sender, EventArgs e)
...{
string path = System.Environment.CurrentDirectory + "/baidu.txt";
if (File.Exists(path))
...{
this.richTextBox1.AppendText(DateTime.Now.ToLongTimeString() + " ");
StreamReader Reader = new StreamReader(path, Encoding.Default);
List<KeyWordTreeNode> tmpRoot =KeyTree.Root .ChildList ;
while (Reader.Peek() != -1)
...{
string[] tmp = Reader.ReadLine().Split('|');
KeyTree.AddKeyWord(tmp[0]);
}
Reader.Close();
Reader.Dispose();
this.richTextBox1.AppendText(DateTime.Now.ToLongTimeString() + " ");
}
}接下来就是分词了,我的窗口是用了两个richtextbox,一个分词,一个是系统状态,richtextbox2对应分词内容和分词结果。下面是代码
private void button4_Click(object sender, EventArgs e)
...{
string tmp = this.richTextBox2.Text;
this.richTextBox2.Text = "";
this.richTextBox1.AppendText(DateTime.Now.ToLongTimeString() + " ");
string Result =KeyTree.FindKeyWord(tmp);
this.richTextBox1.AppendText(DateTime.Now.ToLongTimeString() + " ");
this.richTextBox2.Text = Result.ToString();
}

这篇博客介绍了如何在C#中实现一个简单的分词程序,通过定义全局对象和加载词库到内存,词库大小约700k。加载词库的代码放在button事件中,利用键树结构节省空间。分词过程使用了两个richtextbox,分别显示分词内容和系统状态。
704

被折叠的 条评论
为什么被折叠?



