项目源码:请别抢我闪刀姬 / 分词测试
前言
这个分词是前一段需要用时,在网上扒了好久,才找到的一个,而且年代久远,但是还能用,所以记录一下。
页面设计
界面方面上方一个richTextBox用来输入需要分词的数据,下方一个是“开始分词”按钮和其正下方的“简单分词输出”和“详细示例”下面的“较详细输出”。
代码实现部分
引用dll
using IKAnalyzerNet;
using IKAnalyzerNet.dict;
using Lucene.Net.Analysis;
using Wintellect.PowerCollections;
简洁分词代码
点击“开始分词”按钮后,仅将分词结果显示在文本框内。
private void button1_Click(object sender, EventArgs e)
{
string teststring = richTextBox1.Text; //获取字符串
IKAnalyzer ika = new IKAnalyzer();
System.IO.TextReader r = new System.IO.StringReader(teststring);
TokenStream ts = ika.TokenStream("TestField", r); //分词
for (Token t = ts.Next(); t != null; t = ts.Next())
{
richTextBox2.Text += t.TermText() + "\r\n"; //显示内容
}
}
详细示例代码
点击“详细示例”按钮后,将分词结果的序列号、起始位置和结束位置进行显示,并记录解析时间。
private void button2_Click(object sender, EventArgs e)
{
string testString = richTextBox1.Text; //获取字符串
string slen = testString.Length.ToString(); //获取字符串长度
IKAnalyzer ika = new IKAnalyzer();
System.IO.TextReader r = new System.IO.StringReader(testString);
TokenStream ts = ika.TokenStream("TestField", r);
int m = 0;
long begin = System.DateTime.Now.Ticks;
for (Token t = ts.Next(); t != null; t = ts.Next())
{
m++; //显示每项分词结果的序列号、起始字符数、结尾字符数
richTextBox3.Text += m + ")" + (t.StartOffset() + "," + t.EndOffset() + " = " + t.TermText()) + "\r\n";
}
int end = (int)((System.DateTime.Now.Ticks - begin) / 10000);
richTextBox3.Text += ("长度:" + slen + " 耗时: " + (end) + "ms" + " 分词个数:" + m + " 效率(词/秒):" + ((int)(m * 1.0f / (end) * 1000))) + "\r\n";
}
运行效果
结语
当然,这种方法只是C#分词众多方法中的一种,同时也可以使用jieba.NET进行分词,可以参考这篇文章:jieba.NET是jieba中文分词的.NET版本(C#实现)。
记录完毕,不足之处,望见谅。