項目源碼:請別搶我閃刀姬 / 分詞測試
前言
這個分詞是前一段需要用時,在網上扒了好久,才找到的一個,而且年代久遠,但是還能用,所以記錄一下。
頁面設計
界面方面上方一個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#實現)。
記錄完畢,不足之處,望見諒。