public static void GenerateTripletFlowNt2(string fileName, long limit, sema2012m.Engine engine, sema2012m.LogLine turlog) { StreamReader sr = new StreamReader(fileName); // Начало транзакции ввода engine.InitAdapterBuffers(); //engine.IncludeXElement(xelement); XElement xelement = null; string current_subject = null; long cnt = 0; string line = null; bool skip = false; while ((line = sr.ReadLine()) != null) { if (cnt > limit) break; cnt++; if (cnt % 1000000 == 0) turlog("Загружено: " + cnt + " линий."); if (string.IsNullOrWhiteSpace(line) || line[0] == '@') continue; string subject; int position = GetEntityOrLiteral(line, 0, out subject); if (subject == null) continue; string predicate; position = GetEntityOrLiteral(line, position, out predicate); if (predicate == null) continue; string obj; bool isObjectProperty = line[position] == '\"' ? false : true; position = GetEntityOrLiteral(line, position, out obj); if (obj == null) continue; if (xelement == null || subject != current_subject) { if (!skip && xelement != null) engine.IncludeXElement(xelement); xelement = new XElement(sema2012m.ONames.rdfdescription, new XAttribute(sema2012m.ONames.rdfabout, subject)); current_subject = subject; } if (xelement.Elements().Count() > 100) continue; if (isObjectProperty) { xelement.Add(new XElement(sema2012m.ONames.GetXName(predicate), new XAttribute(sema2012m.ONames.rdfresource, obj))); } else // DatatypeProperty { xelement.Add(new XElement(sema2012m.ONames.GetXName(predicate), obj)); // пока без языкового спецификатора } } if (!skip && xelement != null) engine.IncludeXElement(xelement); // Конец транзакции ввода engine.FlushAdapterBuffers(); }
public static void GenerateTripletFlowTsv(string fileName, long limit, sema2012m.Engine engine, sema2012m.LogLine turlog) { engine.InitAdapterBuffers(); StreamReader sr = new StreamReader(fileName); Ntriplets = 0; string line; while ((line=sr.ReadLine()) != null) { if (Ntriplets > limit) break; if (Ntriplets % 200000 == 0) turlog("Загружено: " + Ntriplets + " триплетов."); string[] parts = line.Split('\t'); if (parts == null || parts.Length < 4) { continue; } string subj_ = parts[1]; string pred_ = parts[2]; string obj_ = parts[3]; string subj = ConvertEntityId(subj_.Substring(1, subj_.Length - 2)); string pred = pred_[0] == '<' ? pred_.Substring(1, pred_.Length - 2) : pred_; // Надо бы преобразовать конструкции вида rdfs:label в нормальную форму... // Смотрим на объект и определяем вид утверждения char c = obj_[0]; if (c == '<') // объектное свойство { Ntriplets++; //yield return new sema2012m.OProp(subj, pred, obj_.Substring(1, obj_.Length - 2).Replace('\'', '_')); engine.AddTripletToBuffer(new sema2012m.OProp(subj, pred, ConvertEntityId(obj_.Substring(1, obj_.Length - 2)))); } else if (c == '\"') // данные { int pos = obj_.LastIndexOf('\"'); string lang = null; if (pos < obj_.Length - 3 && obj_[pos + 1] == '@') { lang = obj_.Substring(pos + 2); } var dp = new sema2012m.DProp(subj, pred, obj_.Substring(1, pos - 1)); if (lang != null) dp.lang = lang; Ntriplets++; //yield return dp; engine.AddTripletToBuffer(dp); } else // неизвестно что { } } engine.FlushAdapterBuffers(); }