/// <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); }
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); }
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); } } }