Exemplo n.º 1
0
        public IList <string> Export(WordLibraryList wlList)
        {
            //对全拼方案进行编码转换
            wlList = Filter(wlList);
            string tempPath = Path.Combine(FileOperationHelper.GetCurrentFolderPath(), "dictionary.txt");

            if (File.Exists(tempPath))
            {
                File.Delete(tempPath);
            }
            var sb = new StringBuilder();

            sb.Append("# Gboard Dictionary version:1\n");
            for (int i = 0; i < wlList.Count; i++)
            {
                sb.Append(ExportLine(wlList[i]));
                sb.Append("\n");
            }
            FileOperationHelper.WriteFile(tempPath, new UTF8Encoding(false), sb.ToString());
            string zipPath = Path.Combine(FileOperationHelper.GetCurrentFolderPath(), "Gboard词库.zip");

            if (File.Exists(zipPath))
            {
                File.Delete(zipPath);
            }
            FileOperationHelper.ZipFile(tempPath, zipPath);
            return(new List <string>()
            {
                "词库文件在:" + zipPath
            });
            //return new List<string>() { sb.ToString() };
        }
Exemplo n.º 2
0
        public IList <string> Export(WordLibraryList wlList)
        {
            //Win10拼音只支持最多32个字符的编码
            wlList = Filter(wlList);
            string tempPath = Path.Combine(FileOperationHelper.GetCurrentFolderPath(), "Win10微软五笔词库.dat");

            if (File.Exists(tempPath))
            {
                File.Delete(tempPath);
            }
            var          fs = new FileStream(tempPath, FileMode.OpenOrCreate, FileAccess.Write);
            BinaryWriter bw = new BinaryWriter(fs);

            bw.Write(Encoding.ASCII.GetBytes("mschxudp"));            //proto8
            bw.Write(BitConverter.GetBytes(0x00600002));              //Unknown
            bw.Write(BitConverter.GetBytes(1));                       //version
            bw.Write(BitConverter.GetBytes(0x40));                    //phrase_offset_start
            bw.Write(BitConverter.GetBytes(0x40 + 4 * wlList.Count)); //phrase_start=phrase_offset_start + 4*phrase_count
            bw.Write(BitConverter.GetBytes(0));                       //phrase_end input after process all!
            bw.Write(BitConverter.GetBytes(wlList.Count));            //phrase_count
            bw.Write(BitConverter.GetBytes(DateTime.Now.Ticks));      //timestamp
            bw.Write(BitConverter.GetBytes((long)0));                 //0
            bw.Write(BitConverter.GetBytes((long)0));                 //0
            bw.Write(BitConverter.GetBytes((long)0));                 //0
            int offset = 0;

            for (var i = 0; i < wlList.Count; i++)
            {
                bw.Write(BitConverter.GetBytes(offset));
                var wl = wlList[i];
                offset += 8 + 8 + wl.Word.Length * 2 + 2 + wl.GetPinYinLength() * 2 + 2;
            }
            for (var i = 0; i < wlList.Count; i++)
            {
                bw.Write(BitConverter.GetBytes(0x00100010)); //magic
                var wl           = wlList[i];
                var hanzi_offset = 8 + 8 + wl.GetPinYinLength() * 2 + 2;
                bw.Write(BitConverter.GetBytes((short)hanzi_offset));
                bw.Write((byte)wl.Rank);                     //1是詞頻
                bw.Write((byte)0x6);                         //6不知道
                bw.Write(BitConverter.GetBytes(0x00000000)); //Unknown
                bw.Write(BitConverter.GetBytes(0xE679CD20)); //Unknown
                var py = wl.GetPinYinString("", BuildType.None);
                bw.Write(Encoding.Unicode.GetBytes(py));
                bw.Write(BitConverter.GetBytes((short)0));
                bw.Write(Encoding.Unicode.GetBytes(wl.Word));
                bw.Write(BitConverter.GetBytes((short)0));
            }

            fs.Position = 0x18;
            fs.Write(BitConverter.GetBytes(fs.Length), 0, 4);

            fs.Close();
            return(new List <string>()
            {
                "词库文件在:" + tempPath
            });
        }
Exemplo n.º 3
0
        public WordLibraryList Import(string path)
        {
            var tempUnzipFolder = FileOperationHelper.GetCurrentFolderPath();

            FileOperationHelper.UnZip(path, tempUnzipFolder);
            var    tempFilePath = Path.Combine(FileOperationHelper.GetCurrentFolderPath(), "dictionary.txt");
            string str          = FileOperationHelper.ReadFile(tempFilePath, new UTF8Encoding(false));

            File.Delete(tempFilePath);
            return(ImportText(str));
        }
        /// <summary>
        /// 最多支持2W条一个dat文件
        /// </summary>
        /// <param name="wlList"></param>
        /// <returns></returns>
        public IList <string> Export(WordLibraryList wlList)
        {
            //Win10拼音对词条长度有限制
            wlList = Filter(wlList);
            var list = new List <WordLibraryList>();

            if (wlList.Count > 20000)
            {
                SendExportErrorNotice("微软拼音自学习词库最多支持2万条记录的导入,当前词条数为:" + wlList.Count + ",超过限制,请设置过滤条件或者更换词库源。");
                //以后微软拼音放开2W限制了,再把这个异常取消吧。
                var item20000 = new WordLibraryList();
                for (var i = 0; i < wlList.Count; i++)
                {
                    item20000.Add(wlList[i]);
                    if (i % 19999 == 0 && i != 0)
                    {
                        list.Add(item20000);
                        item20000 = new WordLibraryList();
                    }
                }
                if (item20000.Count != 0)
                {
                    list.Add(item20000);
                }
            }
            else
            {
                list.Add(wlList);
            }
            var fileList = "";

            for (var i = 0; i < list.Count; i++)
            {
                string tempPath = Path.Combine(FileOperationHelper.GetCurrentFolderPath(), "Win10微软拼音自学习词库" + i + ".dat");
                if (!string.IsNullOrEmpty(this.ExportFilePath))//For test
                {
                    tempPath = this.ExportFilePath;
                }
                fileList += tempPath + "\r\n";
                ExportTo1File(tempPath, list[i]);
            }
            return(new List <string>()
            {
                "词库文件在:" + fileList
            });
        }