public void LoadTurtle(string filepath) { DateTime tt0 = DateTime.Now; Load(filepath); Console.WriteLine("Load ok. Duration={0} sec.", (DateTime.Now - tt0).Ticks / 10000000L); tt0 = DateTime.Now; PrepareArrays(); Console.WriteLine("PrepareArrays ok. Duration={0} sec.", (DateTime.Now - tt0).Ticks / 10000000L); tt0 = DateTime.Now; // Упорядочивание otriples по s-p-o SPOComparer spo_compare = new SPOComparer(); otriples.Root.SortByKey <SubjPredObjInt>(rec => new SubjPredObjInt(rec), spo_compare); Console.WriteLine("otriples.Root.Sort ok. Duration={0} sec.", (DateTime.Now - tt0).Ticks / 10000000L); tt0 = DateTime.Now; SPComparer sp_compare = new SPComparer(); // Упорядочивание otriples_op по o-p otriples_op.Root.SortByKey <SubjPredInt>(rec => { object[] r = (object[])rec; return(new SubjPredInt() { pred = (int)r[1], subj = (int)r[2] }); }, sp_compare); Console.WriteLine("otriples_op Sort ok. Duration={0} sec.", (DateTime.Now - tt0).Ticks / 10000000L); tt0 = DateTime.Now; // Упорядочивание dtriples_sp по s-p dtriples_sp.Root.SortByKey(rec => { object[] r = (object[])rec; return(new SubjPredInt() { pred = (int)r[1], subj = (int)r[0] }); }, sp_compare); Console.WriteLine("dtriples_sp.Root.Sort ok. Duration={0} sec.", (DateTime.Now - tt0).Ticks / 10000000L); tt0 = DateTime.Now; Scale.WriteScale(otriples); Console.WriteLine("CreateScale ok. Duration={0} sec.", (DateTime.Now - tt0).Ticks / 10000000L); tt0 = DateTime.Now; // Создание "широкой" таблицы ewt.Load(); Console.WriteLine("ewt.Load() ok. Duration={0} sec.", (DateTime.Now - tt0).Ticks / 10000000L); tt0 = DateTime.Now; // Вычисление кеша. Это можно не делать, все равно - кеш в оперативной памяти ewtHash.Load(); Console.WriteLine("ewtHash.Load() ok. Duration={0} sec.", (DateTime.Now - tt0).Ticks / 10000000L); tt0 = DateTime.Now; }
public void LoadTurtle(string filepath) { otriples.Clear(); otriples.Fill(new object[0]); dtriples.Clear(); dtriples.Fill(new object[0]); // Только для специальных целей: TurtleInt.sarr = new List <string>(); int i = 0; //Entity e = new Entity(); foreach (var triple in TurtleInt.LoadGraph(filepath)) { if (i % 10000 == 0) { Console.Write("{0} ", i / 10000); } i++; if (triple is OTripleInt) { var tr = (OTripleInt)triple; otriples.Root.AppendElement(new object[] { tr.subject, tr.predicate, tr.obj }); } else { var tr = (DTripleInt)triple; Literal lit = tr.data; object[] da; switch (lit.vid) { case LiteralVidEnumeration.integer: da = new object[] { 1, lit.Value }; break; case LiteralVidEnumeration.date: da = new object[] { 3, lit.Value }; break; case LiteralVidEnumeration.boolean: da = new object[] { 4, lit.Value }; break; case LiteralVidEnumeration.text: { Text t = (Text)lit.Value; da = new object[] { 2, new object[] { t.Value, t.Lang } }; } break; case LiteralVidEnumeration.typedObject: { TypedObject t = (TypedObject)lit.Value; da = new object[] { 5, new object[] { t.Value, t.Type } }; } break; default: da = new object[] { 0, null }; break; } dtriples.Root.AppendElement(new object[] { tr.subject, tr.predicate, da }); } } Console.WriteLine(); otriples.Flush(); dtriples.Flush(); // Только для специальных целей: bool specialpurposes = false; if (specialpurposes) { int ii = 0; foreach (string s in TurtleInt.sarr) { if (ii % 20 == 0) { Console.WriteLine("\"{0}\", ", s); } ii++; } Console.WriteLine("sarr.Count() = {0}", TurtleInt.sarr.Count()); } SPOComparer spo_compare = new SPOComparer(); SPComparer sp_compare = new SPComparer(); // Создание и упорядочивание дополнительных структур otriples_op.Clear(); otriples_op.Fill(new object[0]); foreach (object v in otriples.Root.ElementValues()) { otriples_op.Root.AppendElement(v); } otriples_op.Flush(); dtriples_sp.Clear(); dtriples_sp.Fill(new object[0]); foreach (PaEntry entry in dtriples.Root.Elements()) { int s = (int)entry.Field(0).Get(); int p = (int)entry.Field(1).Get(); dtriples_sp.Root.AppendElement(new object[] { s, p, entry.offset }); } dtriples_sp.Flush(); // Упорядочивание otriples по s-p-o otriples.Root.SortByKey <SubjPredObjInt>(rec => new SubjPredObjInt(rec), spo_compare); // Упорядочивание otriples_op по o-p otriples_op.Root.SortByKey <SubjPredInt>(rec => { object[] r = (object[])rec; return(new SubjPredInt() { pred = (int)r[1], subj = (int)r[2] }); }, sp_compare); // Упорядочивание dtriples_sp по s-p dtriples_sp.Root.SortByKey(rec => { object[] r = (object[])rec; return(new SubjPredInt() { pred = (int)r[1], subj = (int)r[0] }); }, sp_compare); // Индексирование if (spo_o_index == null) { OpenCreateIndexes(); } //spo_o_index.Load(spo_compare); //sp_d_index.Load(sp_compare); //op_o_index.Load(sp_compare); if (filescale) { // Создание шкалы (Надо переделать) CreateScale(); //ShowScale(); oscale.Clear(); oscale.Fill(new object[0]); foreach (int v in scale.Values()) { oscale.Root.AppendElement(v); } oscale.Flush(); CalculateRange(); // Наверное, range считается в CreateScale() } ewt.Load(); ewtHash.Load(); //getable.ConstructGroupedEntities(new DiapLinksScanner[] { // new DiapLinksScanner(otriples, 0), // new DiapLinksScanner(otriples_op, 2), // new DiapLinksScanner(dtriples_sp, 0)}); }