/// <summary> /// 获得指定键中出现频率最高的键。 /// </summary> /// <typeparam name="TKey">键类型。</typeparam> /// <param name="st">用于计算的符号表。</param> /// <param name="keys">所有的键。</param> /// <returns><paramref name="keys"/> 中出现频率最高的键。</returns> public static TKey MostFrequentlyKey <TKey>(IST <TKey, int> st, TKey[] keys) { foreach (var s in keys) { if (st.Contains(s)) { st.Put(s, st.Get(s) + 1); } else { st.Put(s, 1); } } var max = keys[0]; foreach (var s in st.Keys()) { if (st.Get(s) > st.Get(max)) { max = s; } } return(max); }
public static void InvokeLog(this ISynchronizeInvoke si, Delegate method, object[] args) { int pid = Thread.CurrentThread.ManagedThreadId; List <string> IST = null; bool listExists; lock (dicoLock) listExists = InvokeStackTraces.TryGetValue(32, out IST); if (listExists) { IST = new List <string>(); lock (dicoLock) InvokeStackTraces.Add(pid, IST); } IST.Add(Environment.StackTrace); var iar = si.BeginInvoke(method, args); si.EndInvoke(iar); lock (dicoLock) { InvokeStackTraces.Remove(InvokeStackTraces.Count - 1); if (InvokeStackTraces.Count == 0) { InvokeStackTraces.Remove(pid); } } }
/// <summary> /// 用指定的数据测试符号表,返回 <see cref="FrequencyCounter"/> 用去的时间。 /// </summary> /// <param name="st">用于测试的空符号表。</param> /// <param name="keys">键数组。</param> /// <returns>计算一次最常出现单词的时间。(毫秒)</returns> public static long Time <TKey>(IST <TKey, int> st, TKey[] keys) { var sw = new Stopwatch(); sw.Start(); FrequencyCounter.MostFrequentlyKey(st, keys); sw.Stop(); return(sw.ElapsedMilliseconds); }
private void Test(IST <string, int> st) { FrequencyCounter.MostFrequentlyWordAnalysis("tale.txt", 8, st, out var callIndex, out var timeRecord); var panel = new Form2 { Text = st.GetType().Name }; panel.Show(); panel.Draw(callIndex, timeRecord); }
/// <summary> /// 计算数组中不重复元素的数量。 /// </summary> /// <typeparam name="TKey">数组元素的类型。</typeparam> /// <param name="keys">包含重复元素的数组。</param> /// <param name="st">用于计算的符号表。</param> /// <returns><paramref name="keys"/> 中的不重复元素数量。</returns> public static int CountDistinct <TKey>(TKey[] keys, IST <TKey, int> st) { var distinct = 0; for (var i = 0; i < keys.Length; i++) { if (!st.Contains(keys[i])) { st.Put(keys[i], ++distinct); } } return(distinct); }
/// <summary> /// 获得指定文本文档中出现频率最高的所有字符串。 /// </summary> /// <param name="filename">文件名。</param> /// <param name="minLength">字符串最小长度。</param> /// <param name="st">用于计算的符号表。</param> /// <returns>文本文档出现频率最高的字符串数组。</returns> public static string[] MostFrequentlyWords(string filename, int minLength, IST <string, int> st) { int distinct = 0, words = 0; var sr = new StreamReader(File.OpenRead(filename)); var inputs = sr .ReadToEnd() .Split(new char[] { ' ', '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries); foreach (var s in inputs) { if (s.Length < minLength) { continue; } words++; if (st.Contains(s)) { st.Put(s, st.Get(s) + 1); } else { st.Put(s, 1); distinct++; } } var max = ""; var queue = new Queue <string>(); st.Put(max, 0); foreach (var s in st.Keys()) { if (st.Get(s) > st.Get(max)) { max = s; queue.Clear(); queue.Enqueue(s); } else if (st.Get(s) == st.Get(max)) { queue.Enqueue(s); } } return(queue.ToArray()); }
/// <summary> /// 获得指定文本文档中出现频率最高的字符串。 /// </summary> /// <param name="filename">文件名。</param> /// <param name="minLength">字符串最小长度。</param> /// <param name="st">用于计算的符号表。</param> /// <returns>文本文档出现频率最高的字符串。</returns> public static string MostFrequentlyWord(string filename, int minLength, IST <string, int> st) { int distinct = 0, words = 0; var sr = new StreamReader(File.OpenRead(filename)); var inputs = sr .ReadToEnd() .Split(new char[] { ' ', '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries); var lastPut = ""; foreach (var s in inputs) { if (s.Length < minLength) { continue; } words++; if (st.Contains(s)) { lastPut = s; st.Put(s, st.Get(s) + 1); } else { lastPut = s; st.Put(s, 1); distinct++; } } Console.WriteLine("Last Put: " + lastPut + "\t words count: " + words); var max = ""; st.Put(max, 0); foreach (var s in st.Keys()) { if (st.Get(s) > st.Get(max)) { max = s; } } return(max); }
/// <summary> /// 对符号表进行性能测试,先 <see cref="IST{TKey, TValue}.Put(TKey, TValue)"/> <paramref name="n"/> 个字符串, /// 再进行若干次 <see cref="IST{TKey, TValue}.Get(TKey)"/>, /// 使得每个元素被平均访问 <paramref name="averageHit"/> 次, /// 以及同样多的未命中访问。 /// </summary> /// <param name="st">需要进行性能测试的符号表。</param> /// <param name="n">需要插入符号表中的字符串数量。</param> /// <param name="averageHit">平均每个元素被查询的次数。</param> /// <returns>测试耗时,单位为毫秒。</returns> public static long Performance(IST <string, int> st, int n, int averageHit) { var keys = GetRandomArrayString(n, 2, 50); var keyNotExist = GetRandomString(51, 52); var sw = Stopwatch.StartNew(); // 构建 for (var i = 0; i < n; i++) { st.Put(keys[i], i); } // 查询 for (var i = 0; i < averageHit; i++) { for (var j = 0; j < n; j++) { st.Get(keys[j]); st.Get(keyNotExist); } } sw.Stop(); return(sw.ElapsedMilliseconds); }
static void Test(int n, IST <int, int> st) { var data = new int[n]; for (var i = 0; i < n; i++) { data[i] = i; } Shuffle(data); var sw = Stopwatch.StartNew(); foreach (var item in data) { st.Put(item, item); } sw.Stop(); Console.WriteLine("Random Put " + n + ":" + sw.ElapsedMilliseconds + "ms"); Shuffle(data); sw.Restart(); foreach (var item in data) { st.Get(item); } sw.Stop(); Console.WriteLine("Random Get " + n + ":" + sw.ElapsedMilliseconds + "ms"); Shuffle(data); sw.Restart(); foreach (var item in data) { st.Delete(item); } sw.Stop(); Console.WriteLine("Random Delete " + n + ":" + sw.ElapsedMilliseconds + "ms"); }
/// <summary> /// 计算指定文本文档中出现频率最高的字符串, /// 保存 <see cref="IST{TKey, TValue}.Get(TKey)"/> /// 和 <see cref="IST{TKey, TValue}.Put(TKey, TValue)"/> /// 的调用次数以及对应的耗时。 /// </summary> /// <param name="filename">文件名。</param> /// <param name="minLength">字符串最小长度。</param> /// <param name="st">用于计算的符号表。</param> /// <param name="callIndex">调用次数。</param> /// <param name="timeRecord">对应耗时。</param> public static void MostFrequentlyWordAnalysis(string filename, int minLength, IST <string, int> st, out int[] callIndex, out long[] timeRecord) { var call = new List <int>(); var time = new List <long>(); var sw = Stopwatch.StartNew(); var callTime = 0; int distinct = 0, words = 0; var sr = new StreamReader(File.OpenRead(filename)); var inputs = sr .ReadToEnd() .Split(new char[] { ' ', '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries); for (var i = 0; i < inputs.Length; i++) { if (inputs[i].Length < minLength) { continue; } words++; if (st.Contains(inputs[i])) { st.Put(inputs[i], st.Get(inputs[i]) + 1); callTime += 2; time.Add(sw.ElapsedMilliseconds); call.Add(callTime); } else { st.Put(inputs[i], 1); callTime++; time.Add(sw.ElapsedMilliseconds); call.Add(callTime); distinct++; } } var max = ""; st.Put(max, 0); callTime++; time.Add(sw.ElapsedMilliseconds); call.Add(callTime); foreach (var s in st.Keys()) { if (st.Get(s) > st.Get(max)) { max = s; } callTime += 2; time.Add(sw.ElapsedMilliseconds); call.Add(callTime); } callIndex = call.ToArray(); timeRecord = time.ToArray(); }
/// <summary> /// 获得指定文本文档中出现频率最高的字符串。 /// </summary> /// <param name="filename">文件名。</param> /// <param name="counts">从文件读入的单词数目。</param> /// <param name="minLength">字符串最小长度。</param> /// <param name="st">用于计算的符号表。</param> /// <returns>文本文档出现频率最高的字符串。</returns> public static string MostFrequentlyWord(string filename, int counts, int minLength, IST <string, int> st) { int distinct = 0, words = 0; var sr = new StreamReader(File.OpenRead(filename)); var inputs = sr .ReadToEnd() .Split(new char[] { ' ', '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries); for (var i = 0; i < counts && i < inputs.Length; i++) { if (inputs[i].Length < minLength) { counts++; continue; } words++; if (st.Contains(inputs[i])) { st.Put(inputs[i], st.Get(inputs[i]) + 1); } else { st.Put(inputs[i], 1); distinct++; } } var max = ""; st.Put(max, 0); foreach (var s in st.Keys()) { if (st.Get(s) > st.Get(max)) { max = s; } } return(max); }
public void GenerateSocialHistoryEntry(string observerValue, ref int refId, string obsrvType, III hl7III, Factory hl7Factory) { if (obsrvType == "Smoking") { IEntry entry = functionalStatus.Section.Entry.Append(); //GetSNOMED(obsrvType) entry.AsObservation.ClassCode = "OBS"; entry.AsObservation.MoodCode = x_ActMoodDocumentObservation.EVN; IIVXB_TS TS = hl7Factory.CreateIVXB_TS(); hl7III = entry.AsObservation.Id.Append(); hl7III.Init(Guid.NewGuid().ToString()); hl7III = entry.AsObservation.TemplateId.Append(); hl7III.Init("2.16.840.1.113883.10.20.22.4.78"); //entry.AsObservation.Code.Code = IIf(obsrvType = "Smoking", "230056004", IIf(obsrvType = "Alcohol", "160573003", IIf(obsrvType = "Drugs", "228423003", "229819007"))) IED ED = hl7Factory.CreateED(); entry.AsObservation.Code.Code = "ASSERTION"; entry.AsObservation.Code.DisplayName = "Assertion"; entry.AsObservation.Code.CodeSystem = "2.16.840.1.113883.5.4"; entry.AsObservation.Code.CodeSystemName = "ActCode"; //ED.Reference.Value = "#Sec" + refId //entry.AsObservation.Code.OriginalText = ED //entry.AsObservation.Code.CodeSystem = "2.16.840.1.113883.6.96" //entry.AsObservation.Code.DisplayName = IIf(obsrvType = "Smoking", "Cigarette smoking", IIf(obsrvType = "Alcohol", "Alcohol consumption", IIf(obsrvType = "Drugs", "Drugs consumption", "Tobacoo consumption"))) entry.AsObservation.StatusCode.Init("completed"); entry.AsObservation.EffectiveTime = new IVL_TS().Init(low: new IVXB_TS(), high: new IVXB_TS()); //entry.AsObservation.EffectiveTime.High.Value = "UNK" ICD CD = hl7Factory.CreateCD(); CD.CodeSystemName = "SNOMED CT"; //= observerValue CD.CodeSystem = "2.16.840.1.113883.6.96"; CD.Code = "77176002"; CD.DisplayName = "Cigarette smoking"; CD.OriginalText.Reference.Value = "#Sec" + refId; entry.AsObservation.Value.Add(CD); refId = refId + 1; } else { IEntry entry = functionalStatus.Section.Entry.Append(); GetSNOMED(obsrvType); entry.TypeCode = x_ActRelationshipEntry.DRIV; entry.AsObservation.ClassCode = "OBS"; entry.AsObservation.MoodCode = x_ActMoodDocumentObservation.EVN; IIVXB_TS TS = hl7Factory.CreateIVXB_TS(); hl7III = entry.AsObservation.Id.Append(); hl7III.Init(Guid.NewGuid().ToString()); hl7III = entry.AsObservation.TemplateId.Append(); hl7III.Init("2.16.840.1.113883.10.20.22.4.38"); entry.AsObservation.Code.Code = (obsrvType == "Smoking" ? "230056004" : (obsrvType == "Alcohol" ? "160573003" : (obsrvType == "Drugs" ? "228423003" : "229819007"))); IED ED = hl7Factory.CreateED(); ED.Reference.Value = "#Sec" + refId; entry.AsObservation.Code.OriginalText = ED; entry.AsObservation.Code.CodeSystem = "2.16.840.1.113883.6.96"; entry.AsObservation.Code.DisplayName = (obsrvType == "Smoking" ? "Cigarette smoking" : (obsrvType == "Alcohol" ? "Alcohol consumption" : (obsrvType == "Drugs" ? "Drugs consumption" : "Tobacoo consumption"))); entry.AsObservation.StatusCode.Init("completed"); entry.AsObservation.EffectiveTime.NullFlavor = "UNK"; IST ST = hl7Factory.CreateST(); ST.Text = observerValue; entry.AsObservation.Value.Add(ST); refId = refId + 1; } }
public static string ToUri(this IST st) { return(EntityEx.ToUri(st)); }
public OperationCardModel Execute(string heatNumber) { try { if (string.IsNullOrEmpty(heatNumber)) { return(null); } using (var dbSession = dbFacade.Transaction()) { var order = dbSession.Set <ProductionOrder>() .Include(x => x.Grade) .Include(x => x.MotherHeat) .Include(x => x.Plant) .Include(x => x.ElectrodeFormat) .Where(x => x.HeatNumber == heatNumber) .SingleOrDefault(); if (order == null) { return(null); } var electrode = dbSession.Set <Electrode>() .Where(x => x.Name == heatNumber) .SingleOrDefault(); if (electrode == null) { return(null); } var operationCard = dbSession.Set <OperationCard>() .Where(x => x.HeatNumber == heatNumber) .SingleOrDefault(); var blockSurfaces = dbSession.Set <CrossSection>().Where(c => c.Type == "BlockSurface").ToList(); var Substances = new SubstanceWrapper() { SubstanceList = new List <OperationCardModel.Substance>() }; var ISTs = new List <IST>(); var Grindings = new List <Grinding>(); var Blocks = new List <Block>(); if (operationCard != null) { // Signatures var loggedData = dbSession.Set <OperationCardLogs>() .Include(x => x.Operator) .Where(x => x.OperationCardID == operationCard.ID); foreach (var item in loggedData) { switch (item.Type) { case "Substances": Substances.LogPKID = item.ID; Substances.Date = item.Date; Substances.Operator = item.Operator; break; case "IST": var ist = new IST() { LogPKID = item.ID, Ist = item.Content, Date = item.Date, Operator = item.Operator }; ISTs.Add(ist); break; case "Grinding": var grinding = new Grinding() { LogPKID = item.ID, GrindingTime = int.Parse(item.Content), Error = item.Error, Date = item.Date, Operator = item.Operator }; Grindings.Add(grinding); break; case "Block": var block = new Block() { LogPKID = item.ID, Weight = item.Content, Date = item.Date, Operator = item.Operator }; Blocks.Add(block); break; default: throw Oops.Rewrap(new EntryPointNotFoundException($"The signed row of item Type {item.Type} does not have processing implemented.")); } } } return(new OperationCardModel() { HeatNumber = heatNumber, Customer = order.Customer, Quantity1 = "Missing from ERP", // Missing from ERP BGHNumber = order.Grade.Name, ScrapGroup = order.ScrapGroup, StorageMold = false, // Missing from ERP ElectrodeFormat = order.ElectrodeFormat.Name, ElectrodeLength = electrode.Length, Surface = "Missing from ERP", // Missing from ERP Quantity2 = 0, // Missing from ERP BilletNumber = electrode.BilletNumber, SandBlasting = order.Grade.SandBlasting, SlagNumber = operationCard?.SlagNumber, AGGNumber = order.Plant.AGGNumber, BlockSurfaces = blockSurfaces, BlockSurface = operationCard?.BlockSurfaceID != null?blockSurfaces.FirstOrDefault(c => c.ID == operationCard.BlockSurfaceID) : null, ErrorCode = operationCard?.ErrorCode, Photo = operationCard?.Photo, Glow = operationCard?.Glow, UserID = operationCard != null ? operationCard.UserID : -1, Substances = Substances, ISTs = ISTs, Grindings = Grindings, Blocks = Blocks, }); } } catch (Exception e) { throw Oops.Rewrap(e); } }