/// <summary>
        /// 加载指定路径的词典文件,并保存到字典对象中
        /// 词典文件是字符串文件
        /// </summary>
        /// <param name="dict">保存的字典对象</param>
        /// <param name="reverse">是否需要反转</param>
        /// <param name="paths">词典文件路径</param>
        /// <returns></returns>
        public static bool Load(SortedDictionary <string, string> dict, bool reverse, params string[] paths)
        {
            var sd = new StringDictionary();

            foreach (var path in paths)
            {
                if (!sd.Load(path))
                {
                    return(false);
                }
            }
            if (reverse)
            {
                sd = sd.Reverse();
            }

            foreach (var entry in sd.GetEntries())
            {
                dict.Add(entry.Key, entry.Value);
            }


            //var arr = new int[dict.Count];
            //int i = 0;
            //foreach(var p in dict)
            //{
            //    arr[i++] = p.Key.First();
            //}

            return(true);
        }
Ejemplo n.º 2
0
        private static bool Load(string path)
        {
            if (LoadDat(path))
            {
                return(true);                   // 尝试加载二进制数据文件
            }
            var sd = new StringDictionary();

            if (!sd.Load(path))
            {
                return(false);                  // 加载字符串文件到字典对象中
            }
            // 将数据放入排序字典中,以便建立Trie
            var dict = new SortedDictionary <string, Pinyin[]>(StrComparer.Default);

            foreach (var p in sd.GetEntries())
            {
                var segs = p.Value.Split(',');      // 词语的每个字的拼音使用逗号分隔
                var pys  = new Pinyin[segs.Length];
                for (int i = 0; i < pys.Length; i++)
                {
                    var index = (int)Enum.Parse(typeof(PYName), segs[i]);
                    pys[i] = Pinyin.PinyinTable[index];
                }

                dict.Add(p.Key, pys);           // 添加中文词条与其对应的拼音
            }
            _trie.Build(dict);
            SaveDat(path, _trie, dict);
            return(true);
        }
Ejemplo n.º 3
0
        static SYTDictionary()
        {
            var sd = new StringDictionary();

            if (sd.Load(Config.SYT_Dict_Path))
            {
                foreach (var p in sd.GetEntries())
                {
                    var segs = p.Value.Split(',');
                    if (segs[0].Length == 0)
                    {
                        segs[0] = "none";
                    }
                    if (!string.IsNullOrWhiteSpace(segs[0]))
                    {
                        _smSet.Add(segs[0]);
                    }
                    if (!string.IsNullOrWhiteSpace(segs[1]))
                    {
                        _ymSet.Add(segs[1]);
                    }
                    if (!string.IsNullOrWhiteSpace(segs[2]))
                    {
                        _stSet.Add(segs[2]);
                    }

                    var va = new string[4];
                    Array.Copy(segs, va, 3);
                    va[3] = PinyinUtil.Pinyin_ToneNum2ToneMark(p.Key);
                    _map.Add(p.Key, va);
                }
            }
        }