예제 #1
0
        public static bool ProcessNew()
        {
            List <string> newlines = File.ReadAllLines(Path.Combine(Program.serverpath, "newentries.txt")).ToList();

            Program.newentries = newlines.Count();
            if (newlines.Count() != 0)
            {
                List <string> newitems = new List <string>();
                foreach (string item in newlines.ToList())
                {
                    newlines.Remove(item);
                    Program.newentries--;
                    try
                    {
                        string[] split   = item.Split('\t');
                        string   chinese = split[0];

                        DictionaryEntry t1 = Program.DictionaryDatatemp.FirstOrDefault(x => x.chinese == chinese || x.simplified == chinese || (x.alternate != null && x.alternate == chinese));
                        if ((split.Count() != 8 && split.Count() != 9) || t1 != null)
                        {
                            if ((split.Count() != 8 && split.Count() != 9) || t1.definition != null)
                            {
                                File.AppendAllText(Path.Combine(Program.serverpath, "rejected.txt"), item + Environment.NewLine);
                                continue;
                            }
                            else
                            {
                                t1.definition = split[7].Split('|').ToList();
                                Program.DictionaryDatatemp.RemoveAll(x => x.chinese == chinese || x.simplified == chinese || (x.alternate != null && x.alternate == chinese));
                                Program.DictionaryDatatemp.Add(t1);
                                Program.SentenceDatatemp.ForEach(x => { x.mouseover = x.chinese.Contains(chinese) ? null : x.mouseover; });
                                continue;
                            }
                        }
                        DictionaryEntry t2 = new DictionaryEntry();
                        t2.chinese     = split[0];
                        t2.simplified  = split[1];
                        t2.alternate   = split[2];
                        t2.zhuyin      = split[3];
                        t2.pinyin      = split[4];
                        t2.mainland    = split[5];
                        t2.measureword = split[6];
                        t2.definition  = split[7].Split('|').ToList();
                        Program.DictionaryDatatemp.Add(t2);
                        Program.SentenceDatatemp.ForEach(x => { x.mouseover = x.chinese.Contains(chinese) ? null : x.mouseover; });
                    }
                    catch { File.AppendAllText(Path.Combine(Program.serverpath, "rejected.txt"), item + Environment.NewLine); }
                }
                DictionaryEntry.WriteDictionaryData(Program.DictionaryDatatemp);
                SentenceEntry.WriteSentenceData(Program.SentenceDatatemp);
                File.WriteAllLines(Path.Combine(Program.serverpath, "newentries.txt"), newlines);
                return(true);
            }
            return(false);
        }
예제 #2
0
        public static List <SentenceEntry> ReadSentenceData()
        {
            List <SentenceEntry> entries   = new List <SentenceEntry>();
            bool writeprocessed            = false;
            Dictionary <string, string> t1 = new Dictionary <string, string>();

            if (File.Exists(Path.Combine(Program.serverpath, "processedsentences.txt")))
            {
                List <string> t2 = File.ReadAllLines(Path.Combine(Program.serverpath, "processedsentences.txt")).ToList();
                foreach (string ii in t2)
                {
                    if (!t1.ContainsKey(ii.Split('\t')[0]))
                    {
                        t1.Add(ii.Split('\t')[0], ii.Split('\t')[1]);
                    }
                }
            }
            Program.sentence = File.ReadAllLines(Path.Combine(Program.serverpath, "sentencesfinal.txt")).Count();
            foreach (string[] item in File.ReadAllLines(Path.Combine(Program.serverpath, "sentencesfinal.txt")).Select(x => x.Split('\t')))
            {
                Program.sentence--;
                SentenceEntry entry = new SentenceEntry();
                entry.chinese = item[0];
                entry.english = item[4];
                entry.englishwordseparated = Regex.Replace(item[4].ToLower().Insert(0, " ").Insert(item[4].Length > 1 ? (item[4].Length + 2) - 1 : 0, " ").Replace("!", " ").Replace("-", " ").Replace("i.e.", "").Replace("e.g.", "").Replace("?", " ").Replace(",", " ").Replace(".", " ").Replace("|", " "), @"\s+", " ");

                string line = null;
                if (t1.TryGetValue(item[0], out line))
                {
                    entry.mouseover = line;
                }
                else
                {
                    entry.mouseover = Utilities.GetHoverMark(entry.chinese);
                    writeprocessed  = true;
                }
                entries.Add(entry);
            }
            if (writeprocessed)
            {
                WriteSentenceData(entries);
            }
            return(entries);
        }
예제 #3
0
        public static void Init()
        {
            Loading = true;
            if (!File.Exists(Path.Combine(Program.serverpath, "newentries.txt")))
            {
                File.Create(Path.Combine(Program.serverpath, "newentries.txt")).Close();
            }

            ThreadPool.QueueUserWorkItem(delegate
            {
                while (Loading)
                {
                    if (display1.IsHandleCreated)
                    {
                        display1.Invoke((MethodInvoker) delegate()
                        {
                            int periods = display1.Display1.Text.Count(x => x == '.');
                            if (periods > 20)
                            {
                                periods = 0;
                            }
                            display1.Display1.Clear();
                            display1.Display1.Text = "Scanning Entries" + string.Concat(Enumerable.Repeat(".", periods + 1));
                            if (dictionary != -1)
                            {
                                display1.Display1.AppendText(Environment.NewLine + "Scanning existing entries: " + dictionary + " remaining");
                            }
                            if (sentence != -1)
                            {
                                display1.Display1.AppendText(Environment.NewLine + "Scanning existing sentences: " + sentence + " remaining");
                            }
                            if (newentries != -1)
                            {
                                display1.Display1.AppendText(Environment.NewLine + "Checking for new entries: " + newentries + " remaining");
                            }
                            if (newsentences != -1)
                            {
                                display1.Display1.AppendText(Environment.NewLine + "Checking for new Sentences: " + newsentences + " remaining");
                            }
                            if (writecount != -1)
                            {
                                display1.Display1.AppendText(Environment.NewLine + "Adding new entries: " + writecount + " remaining");
                            }
                            display1.Display1.Update();
                        });
                    }
                    Thread.Sleep(100);
                }
            }, null);

            DictionaryDatatemp = DictionaryEntry.ReadDictionaryData();
            SentenceDatatemp   = SentenceEntry.ReadSentenceData();
            if (Utilities.ProcessNew())
            {
                DictionaryDatatemp = DictionaryEntry.ReadDictionaryData();
                SentenceDatatemp   = SentenceEntry.ReadSentenceData();
            }

            Dictionary <string[], DictionaryEntry> DictionaryDataPinyintemp     = new Dictionary <string[], DictionaryEntry>();
            Dictionary <string[], DictionaryEntry> DictionaryExactWordtemp      = new Dictionary <string[], DictionaryEntry>();
            Dictionary <string, DictionaryEntry>   DictionaryContainingWordtemp = new Dictionary <string, DictionaryEntry>();
            Dictionary <string, SentenceEntry>     SentenceContainingWordtemp   = new Dictionary <string, SentenceEntry>();


            foreach (DictionaryEntry item in DictionaryDatatemp)
            {
                DictionaryDataPinyintemp.Add(item.pinyinlatin, item);
                if (item.cleandefinition != null)
                {
                    DictionaryExactWordtemp.Add(item.cleandefinition.ToArray(), item);
                }
                if (item.wordsearchdefintion != null)
                {
                    DictionaryContainingWordtemp.Add((random.Next().ToString() + item.wordsearchdefintion), item);
                }
            }

            foreach (SentenceEntry item in SentenceDatatemp)
            {
                if (!SentenceContainingWordtemp.ContainsKey(item.englishwordseparated))
                {
                    SentenceContainingWordtemp.Add(item.englishwordseparated, item);
                }
            }

            while (DataAccessInProgress)
            {
                Thread.Sleep(1);
            }
            DataAccessInProgress     = true;
            DictionaryData           = DictionaryDatatemp;
            SentenceData             = SentenceDatatemp;
            DictionaryDataPinyin     = DictionaryDataPinyintemp;
            DictionaryExactWord      = DictionaryExactWordtemp;
            DictionaryContainingWord = DictionaryContainingWordtemp;
            SentenceContainingWord   = SentenceContainingWordtemp;
            DataAccessInProgress     = false;
            Utilities.GetNews();
            Loading   = false;
            FullReset = false;
        }