针对盘古dll重写词库读取 及新词增删改查方法

本文详细介绍了如何针对盘古DLL进行词库读取的重写,以及新词的增删改查方法。重点参考了PosDisplayCtrl类库中PosCtrl.cs的GetChsPos方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#region +对盘古词库执行增删改查 InsertPanGuDict | DeleteWord | UpdateWord | UpdateWord
        /// <summary>
        /// 盘古词库增加新词
        /// </summary>
        /// <param name="name"></param>
        /// <param name="_posStr"></param>
        /// <param name="frequency"></param>
        public static void InsertPanGuDict(string word, double frequency, string _posStr)
        {
            POS _pos = DisplayPos.GetChsPos(_posStr);
            WordDictionary wd = new WordDictionary();
            wd.Load(Dictpath);
            wd.InsertWord(word, frequency, _pos);
            wd.Save(Dictpath);
        }

        /// <summary>
        /// 盘古词库删除指定词汇
        /// </summary>
        /// <param name="word"></param>
        public static void DeleteWord(string word)
        {
            WordDictionary wd = new WordDictionary();
            wd.Load(Dictpath);
            wd.DeleteWord(word);
            wd.Save(Dictpath);
        }

        /// <summary>
        /// 盘古词库修改指定词汇
        /// </summary>
        /// <param name="word"></param>
        /// <param name="frequency"></param>
        /// <param name="_posStr"></param>
        public static void UpdateWord(string word, double frequency, string _posStr)
        {
            POS _pos = DisplayPos.GetChsPos(_posStr);
            WordDictionary wd = new WordDictionary();
            wd.Load(Dictpath);
            wd.UpdateWord(word, frequency, _pos);
            wd.Save(Dictpath);
        }

        public static List<string> SearchWord(string word)
        {
            List<string> wordList = new List<string>();
            WordDictionary wd = new WordDictionary();
            wd.Load(Dictpath);
            List<SearchWordResult> result = wd.Search(word.Trim());
            result.Sort();
            foreach (SearchWordResult w in result)
            {
                wordList.Add(w.ToString());
            }
            return wordList;
        }

        #endregion


POS 参数请参照盘古分词代码中的PosDisplayCtrl类库下面的PosCtrl.cs GetChsPos方法,下文也会贴出

public static string GetChsPosStr(POS pos)
        {
            switch (pos)
            {
                case POS.POS_UNK:
                    return "未知词性";

                case POS.POS_D_K:
                    return "后接成分";

                case POS.POS_D_H:
                    return "前接成分";

                case POS.POS_A_NZ:
                    return "其他专名";

                case POS.POS_A_NX:
                    return "外文字符";

                case POS.POS_A_NR:
                    return "人名";

                case POS.POS_D_Z:
                    return "状态词";

                case POS.POS_A_NT:
                    return "机构团体";

                case POS.POS_A_NS:
                    return "地名";

                case POS.POS_D_Y:
                    return "语气词 语气语素";

                case POS.POS_D_X:
                    return "非语素字";

                case POS.POS_D_W:
                    return "标点符号";

                case POS.POS_D_T:
                    return "时间词";

                case POS.POS_D_S:
                    return "处所词";

                case POS.POS_D_V:
                    return "动词 动语素";

                case POS.POS_D_U:
                    return "助词 助语素";

                case POS.POS_D_R:
                    return "代词 代语素";

                case POS.POS_A_Q:
                    return "量词 量语素";

                case POS.POS_D_P:
                    return "介词";

                case POS.POS_D_MQ:
                    return "数量词";

                case POS.POS_A_M:
                    return "数词 数语素";

                case POS.POS_D_O:
                    return "拟声词";

                case POS.POS_D_N:
                    return "名词 名语素";

                case POS.POS_D_F:
                    return "方位词 方位语素";

                case POS.POS_D_E:
                    return "叹词 叹语素";

                case POS.POS_D_L:
                    return "习语";

                case POS.POS_D_I:
                    return "成语";

                case POS.POS_D_D:
                    return "副词 副语素";

                case POS.POS_D_C:
                    return "连词 连语素";

                case POS.POS_D_B:
                    return "区别词 区别语素";

                case POS.POS_D_A:
                    return "形容词 形语素";
            }
            return "未知词性";

        }


 

 

1、 修改字典格式,提高字典加载速度 2、 增加对英文专业名词的支持 如C++,C#等只要加入字典就可以被分出来 3、 增加词频判断功能,在无法取舍时根据词频取舍 4、 增加优先优先词频选项,通过这个选项动态决定分词粒度 需打开 FreqFirst 5、 增加中文人名前后缀统计和根据该统计定位人名的功能 6、 增加中文人名和未登录词出现频率统计功能 7、 增加自动更新字典功能,对超过阈值的人名和未登录词自动插入字典 需打开 AutoInsertUnknownWords 开关 并设置 UnknownWordsThreshold,(不推荐自动插入,推荐手工插入) 8、 增加定期保存字典和统计结果功能 需设置 AutoSaveInterval 9、 增加KTDictSeg.xml配置文件来配置分词参数 10、增加对Lucene.net 的支持,提供 KTDictSegAnalyzer 分析器给Lucene.net 11、增加字典管理功能,可以添加删除修改字典 12、字典管理中提供从未登录词中批量插入字典功能,可帮助使用者手工选择合适的未登录词插入字典(推荐) 13、提供一个新闻搜索的简单例子,采用Lucene.net+KTDictSegAnalyzer+KTDictSeg,项目名为Demo.KTDictSegAnalyzer 14、将所有ArrayList 改为List 其中 src_V1.3.01是源码 rel_V1.3.01 包含所有的可执行文件,配置文件;Data目录下是词库,停用词表,以及我目前统计的人名前后缀词表;News 目录下是Lucene.net为 新闻搜索的例子建的索引。 News.zip 是上图中批量插入时要输入的XML文件,它包含3万条从新浪和中华网抓下来的过时的新闻,大约2000万字左右,可供各位朋友学习使用。 注意:如果要导入news.xml,这个文件必须要和Demo.KTDictSegAnalyzer.exe放在同一个目录下!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值