internal AnalysisResult _process(SourceOfAnalysis text, bool ontoRegine, bool noLog, ExtOntology extOntology = null, Pullenti.Morph.MorphLang lang = null) { m_Breaked = false; this.PrepareProgress(); Stopwatch sw0 = Stopwatch.StartNew(); this.ManageReferentLinks(); if (!noLog) { this.OnProgressHandler(this, new ProgressChangedEventArgs(0, "Морфологический анализ")); } Pullenti.Ner.Core.AnalysisKit kit = new Pullenti.Ner.Core.AnalysisKit(text, false, lang, OnProgressHandler) { Ontology = extOntology, Processor = this, OntoRegime = ontoRegine }; AnalysisResult ar = new AnalysisResult(); sw0.Stop(); string msg; this.OnProgressHandler(this, new ProgressChangedEventArgs(100, string.Format("Морфологический анализ завершён"))); int k = 0; for (Token t = kit.FirstToken; t != null; t = t.Next) { k++; } if (!noLog) { msg = string.Format("Из {0} символов текста выделено {1} термов за {2} ms", text.Text.Length, k, sw0.ElapsedMilliseconds); if (!kit.BaseLanguage.IsUndefined) { msg += string.Format(", базовый язык {0}", kit.BaseLanguage.ToString()); } this.OnMessage(msg); ar.Log.Add(msg); if (text.CrlfCorrectedCount > 0) { ar.Log.Add(string.Format("{0} переходов на новую строку заменены на пробел", text.CrlfCorrectedCount)); } if (kit.FirstToken == null) { ar.Log.Add("Пустой текст"); } } sw0.Start(); if (kit.FirstToken != null) { this._process2(kit, ar, noLog); } if (!ontoRegine) { this._createRes(kit, ar, extOntology, noLog); } sw0.Stop(); if (!noLog) { if (sw0.ElapsedMilliseconds > 5000) { float f = (float)text.Text.Length; f /= sw0.ElapsedMilliseconds; msg = string.Format("Обработка {0} знаков выполнена за {1} ({2} Kb/sec)", text.Text.Length, OutSecs(sw0.ElapsedMilliseconds), f); } else { msg = string.Format("Обработка {0} знаков выполнена за {1}", text.Text.Length, OutSecs(sw0.ElapsedMilliseconds)); } this.OnMessage(msg); ar.Log.Add(msg); } if (TimeoutSeconds > 0) { if (((DateTime.Now - kit.StartDate)).TotalSeconds > TimeoutSeconds) { ar.IsTimeoutBreaked = true; } } ar.Sofa = text; if (!ontoRegine) { ar.Entities.AddRange(kit.Entities); } ar.FirstToken = kit.FirstToken; ar.Ontology = extOntology; ar.BaseLanguage = kit.BaseLanguage; return(ar); }
internal void _createRes(Pullenti.Ner.Core.AnalysisKit kit, AnalysisResult ar, ExtOntology extOntology, bool noLog) { Stopwatch sw = Stopwatch.StartNew(); int ontoAttached = 0; for (int k = 0; k < 2; k++) { foreach (Analyzer c in Analyzers) { if (k == 0) { if (!c.IsSpecific) { continue; } } else if (c.IsSpecific) { continue; } Pullenti.Ner.Core.AnalyzerData dat = kit.GetAnalyzerData(c); if (dat != null && dat.Referents.Count > 0) { if (extOntology != null) { foreach (Referent r in dat.Referents) { if (r.OntologyItems == null) { if ((((r.OntologyItems = extOntology.AttachReferent(r)))) != null) { ontoAttached++; } } } } ar.Entities.AddRange(dat.Referents); } } } sw.Stop(); if (extOntology != null && !noLog) { string msg = string.Format("Привязано {0} объектов к внешней отнологии ({1} элементов) за {2}", ontoAttached, extOntology.Items.Count, OutSecs(sw.ElapsedMilliseconds)); this.OnMessage(msg); ar.Log.Add(msg); } }
/// <summary> /// Обработать текст /// </summary> /// <param name="text">входной контейнер текста</param> /// <param name="extOntology">внешняя онтология (null - не используется)</param> /// <param name="lang">язык (если не задан, то будет определён автоматически)</param> /// <return>аналитический контейнер с результатом</return> public AnalysisResult Process(SourceOfAnalysis text, ExtOntology extOntology = null, Pullenti.Morph.MorphLang lang = null) { return(this._process(text, false, false, extOntology, lang)); }