首先先描述下我們要實現的結果
這是我上一篇blog的內容
准備把以前的一個分詞程序貢獻出來,希望給大家一個思路。
這個程序我現在已經不用,因為有更好的算法去分,速度更快,所以這個就幫大家起一個拋磚引玉的作用。因為也不是高深的技術,所以就開源了
具體使用的結構 用到了鍵樹 詞庫使用 網上那個假冒的baidu詞庫
慢慢的,每天放一些代碼出來,大家可以先了解下鍵樹,這樣理解起來更好一些,修改起來也更有思路。
這個分詞程序分詞的速度大概在1w字/秒,使用最大截詞,資源占用30M占有,屬於速度比較慢的,不過純屬給大家一個思路。
下面是我們要實現的結果
准備|把|以前的|一個|分詞|程序|貢獻|出來||希望|給|大家|一個|思路||||這個|程序|我|現在|已經|不用||因為|有|更好|的|算法|去|分||速度|更|快||所以|這個|就|幫|大家|起|一個|拋磚引玉|的作|用||因為|也不|是|高深|的|技術||所以|就|開源|了|||具體|使用|的|結構||用到|了|鍵|樹||||詞庫|使用||網上|那個|假冒|的|ba|i|d|u|詞庫|||慢慢|的||每天|放一|些|代碼|出來||大家|可以|先|了解|下|鍵|樹||這樣|理解|起來|更好|一些||修改|起來|也|更有|思路||||這個|分詞|程序|分詞|的|速度|大概|在|1|w|字||秒||使用|最大|截|詞||資源|占用|30M|占有||屬於|速度|比較|慢|的||不過|純屬|給|大家|一個|思路||||
我們通過基礎的數據結構實現這一種功能,這個分詞程序不涉及語義的關系,也不涉及神經網絡的使用,就是用鍵樹
下面給出本程序定義的鍵樹代碼
樹節點定義
/**//// <summary>
/// 樹 的節點
/// </summary>
public class KeyWordTreeNode
...{
/**//// <summary>
/// 構造函數
/// </summary>
public KeyWordTreeNode()
...{ ;}
/**//// <summary>
/// 構造函數
/// </summary>
/// <param name="NodeValue">樹節點值</param>
public KeyWordTreeNode(char NodeValue)
...{
_TreeNode = NodeValue;
}
private char _TreeNode; //樹節點值
/**//// <summary>
/// 樹節點值
/// </summary>
public char TreeNode
...{
get ...{ return _TreeNode; }
set ...{ _TreeNode = value; }
}
private List<KeyWordTreeNode> _ChildList = new List<KeyWordTreeNode>(); //子樹
/**//// <summary>
/// 子樹
/// </summary>
public List<KeyWordTreeNode> ChildList
...{
get ...{ return _ChildList; }
set ...{ _ChildList = value; }
}
}
樹的定義,比較簡單
/**//// <summary>
/// 鍵樹
/// </summary>
public class KeyWordTree
...{
private KeyWordTreeNode _Root = new KeyWordTreeNode(); //根節點
/**//// <summary>
/// 根節點
/// </summary>
public KeyWordTreeNode Root
...{
get ...{ return _Root; }
set ...{ _Root = value; }
}
}
大家可以研究下
文章(三)會給出數據的插入
文章(四)給出數據的查詢
文章(五)給出源代碼和基礎的詞庫
本程序的數據查詢優化就留給讀者了,我這裡也只提供一個思路,不給出優化後的程序。