⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dictmanage.cs

📁 KTDictSeg 简介: KTDictSeg 是由KaiToo搜索开发的一款基于字典的简单中英文分词算法 * 主要功能: 中英文分词
💻 CS
字号:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
using KTDictSeg;

namespace DictManage
{
    public class SearchWordResult : IComparable
    {
        /// <summary>
        /// 单词
        /// </summary>
        public T_DictStruct Word;

        /// <summary>
        /// 相似度
        /// </summary>
        public float SimilarRatio;

        public override string ToString()
        {
            return Word.Word;
        }



        #region IComparable 成员

        public int CompareTo(object obj)
        {
            SearchWordResult dest = (SearchWordResult)obj;

            if (this.SimilarRatio == dest.SimilarRatio)
            {
                return 0;
            }
            else if (this.SimilarRatio > dest.SimilarRatio)
            {
                return -1;
            }
            else
            {
                return 1;
            }
        }

        #endregion
    }

    /// <summary>
    /// 字典管理
    /// 包括插入,修改,删除,搜索
    /// </summary>
    public class DictMgr
    {
        T_DictFile m_Dict = null;
        bool m_Approximate = false;
        Hashtable m_DictTbl = new Hashtable();

        /// <summary>
        /// 字典
        /// </summary>
        public T_DictFile Dict
        {
            get
            {
                return m_Dict;
            }

            set
            {
                m_Dict = value;

                foreach (T_DictStruct w in m_Dict.Dicts)
                {
                    m_DictTbl[w.Word] = w;
                }
            }
        }

        /// <summary>
        /// 是否允许模糊查询
        /// </summary>
        public bool Approximate
        {
            get
            {
                return m_Approximate;
            }

            set
            {
                m_Approximate = value;
            }
        }

        /// <summary>
        /// 通过遍历方式搜索
        /// </summary>
        /// <returns></returns>
        private List<SearchWordResult> SearchByTraversal(String key)
        {
            Debug.Assert(m_Dict != null);

            List<SearchWordResult> result = new List<SearchWordResult>();

            foreach (T_DictStruct word in m_Dict.Dicts)
            {
                if (word.Word.Contains(key))
                {
                    SearchWordResult wordResult = new SearchWordResult();
                    wordResult.Word = word;
                    wordResult.SimilarRatio = (float)key.Length / (float)word.Word.Length;
                    result.Add(wordResult);
                }
            }

            return result;
        }

        private List<SearchWordResult> SearchByLucene(String key)
        {
            return null;
        }

        public List<SearchWordResult> Search(String key)
        {
            if (Approximate)
            {
                return SearchByLucene(key);
            }
            else
            {
                return SearchByTraversal(key);
            }
        }

        public T_DictStruct GetWord(String word)
        {
            return (T_DictStruct)m_DictTbl[word];
        }

        public void InsertWord(String word, double frequency, int pos)
        {
            word = word.Trim();

            if (GetWord(word) != null)
            {
                return;
            }

            T_DictStruct w = new T_DictStruct();
            w.Word = word;
            w.Frequency = frequency;
            w.Pos = pos;

            m_Dict.Dicts.Add(w);
            m_DictTbl[word] = w;
        }

        public void UpdateWord(String word, double frequency, int pos)
        {
            word = word.Trim();

            T_DictStruct w = GetWord(word) ;

            if (w == null)
            {
                return;
            }
           
            w.Frequency = frequency;
            w.Pos = pos;
        }

        public void DeleteWord(String word)
        {
            word = word.Trim();

            T_DictStruct w = GetWord(word);

            if (w == null)
            {
                return;
            }

            m_DictTbl.Remove(w.Word);
            m_Dict.Dicts.Remove(w);
        }
    }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -