首先先描述下我们要实现的结果
这是我上一篇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; }
}
}大家可以研究下
文章(三)会给出数据的插入
文章(四)给出数据的查询
文章(五)给出源代码和基础的词库
本程序的数据查询优化就留给读者了,我这里也只提供一个思路,不给出优化后的程序。

467

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



