Example #1
0
File: DFA.cs Project: dkme/moooyo
        /**
         * 创建DFA
         * @param keywordList
         * @throws UnsupportedEncodingException
         */
        public void createKeywordTree(List<String> keywordList)
        {
            foreach (String keyword in keywordList)
            {
                if(keyword == null) continue;
                byte[] bytes = System.Text.Encoding.GetEncoding(charset).GetBytes(keyword.Trim());

                TreeNode tempNode = rootNode;
                //循环每个字节
                for (int i = 0; i < bytes.Length; i++) {
                    int index = bytes[i] & 0xff; //字符转换成数字
                    TreeNode node = tempNode.getSubNode(index);

                    if(node == null){ //没初始化
                        node = new TreeNode();
                        tempNode.setSubNode(index, node);
                    }

                    tempNode = node;

                    if(i == bytes.Length - 1){
                        tempNode.setKeywordEnd(true);	 //关键词结束, 设置结束标志
                    }
                }//end for
            }//end for
        }
Example #2
0
 /// <summary>
 /// 向指定位置添加节点
 /// </summary>
 /// <param name="index">位置索引</param>
 /// <param name="node">节点实例</param>
 public void setSubNode(int index, TreeNode node)
 {
     subNodes[index] = node;
 }
Example #3
0
        /// <summary>
        /// 创建过滤字词Byte树形
        /// </summary>
        /// <param name="wordlist">过滤字词List集合</param>
        /// <returns></returns>
        private void CreateWordTree(List<string> wordlist)
        {
            //创建根节点
            rootNode = new TreeNode();
            foreach (String word in wordlist)
            {
                if (word == null)
                    continue;
                byte[] word_bytes = Encoding.GetEncoding(CharSet).GetBytes(word.Trim());
                TreeNode tempNode = rootNode;

                for (int i = 0; i < word_bytes.Length; i++)
                {
                    int index = word_bytes[i] & 0xff;
                    TreeNode node = tempNode.getSubNode(index);

                    if (null == node)
                    {
                        node = new TreeNode();
                        tempNode.setSubNode(index, node);
                    }
                    //临时树为最后插入到节点中的树
                    tempNode = node;
                    if (i + 1 == word_bytes.Length)
                    {
                        tempNode.setKeywordEnd(true);
                    }
                }
            }
        }