예제 #1
0
        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);
        }
예제 #2
0
        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);
            }
        }
예제 #3
0
 /// <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));
 }