示例#1
0
        private static void InitializeEP()
        {
            // инициализация - необходимо проводить один раз до обработки текстов
            Logger.Info("Initializing EP... ");

            ProcessorService.Initialize(MorphLang.RU | MorphLang.EN);
            // инициализируются все используемые анализаторы
            EP.Ner.Money.MoneyAnalyzer.Initialize();
            EP.Ner.Uri.UriAnalyzer.Initialize();
            EP.Ner.Phone.PhoneAnalyzer.Initialize();
            EP.Ner.Definition.DefinitionAnalyzer.Initialize();
            EP.Ner.Date.DateAnalyzer.Initialize();
            EP.Ner.Bank.BankAnalyzer.Initialize();
            EP.Ner.Geo.GeoAnalyzer.Initialize();
            EP.Ner.Address.AddressAnalyzer.Initialize();
            EP.Ner.Org.OrganizationAnalyzer.Initialize();
            EP.Ner.Person.PersonAnalyzer.Initialize();
            EP.Ner.Mail.MailAnalyzer.Initialize();
            EP.Ner.Transport.TransportAnalyzer.Initialize();
            EP.Ner.Decree.DecreeAnalyzer.Initialize();
            EP.Ner.Titlepage.TitlePageAnalyzer.Initialize();
            EP.Ner.Booklink.BookLinkAnalyzer.Initialize();
            EP.Ner.Named.NamedEntityAnalyzer.Initialize();
            EP.Ner.Goods.GoodsAnalyzer.Initialize();
        }
示例#2
0
 public static void Init(string[] langs, string[] analyzers)
 {
     Log.Info("Init Pullenti v{0} ...", ProcessorService.Version);
     foreach (string lang in langs)
     {
         Log.Info("Load lang: {0}", lang);
         MorphologyService.LoadLanguages(LANGS[lang]);
     }
     ProcessorService.Initialize(MorphologyService.LoadedLanguages);
     foreach (string analyzer in analyzers)
     {
         Log.Info("Load analyzer: {0}", analyzer);
         ANALYZERS[analyzer]();
     }
 }
示例#3
0
        protected override void Load(ContainerBuilder builder)
        {
            base.Load(builder);
            ProcessorService.Initialize(MorphLang.RU | MorphLang.EN);
            // инициализируются все используемые анализаторы

            EP.Ner.Uri.UriAnalyzer.Initialize();
            EP.Ner.Phone.PhoneAnalyzer.Initialize();
            EP.Ner.Bank.BankAnalyzer.Initialize();
            EP.Ner.Geo.GeoAnalyzer.Initialize();
            EP.Ner.Address.AddressAnalyzer.Initialize();
            EP.Ner.Org.OrganizationAnalyzer.Initialize();
            EP.Ner.Person.PersonAnalyzer.Initialize();
            EP.Ner.Mail.MailAnalyzer.Initialize();
            EP.Ner.Named.NamedEntityAnalyzer.Initialize();
        }
        private List <Entity> CreateGeoEntities(List <Entity> entities, string text)
        {
            ProcessorService.Initialize(MorphLang.RU | MorphLang.EN);
            GeoAnalyzer.Initialize();
            using (Processor proc = ProcessorService.CreateSpecificProcessor(GeoAnalyzer.ANALYZER_NAME))
            {
                AnalysisResult ar = proc.Process(new SourceOfAnalysis(text));
                foreach (var geo in ar.Entities)
                {
                    if (geo is GeoReferent)
                    {
                        var    geoEntitiName    = geo.ToString();
                        string entityproperties = null;

                        var    props         = geo.Slots;
                        string newProperties = null;
                        foreach (var prop in props)
                        {
                            var name  = prop.TypeName.ToString();
                            var value = prop.Value.ToString();
                            newProperties += name += " = " + value + ";";
                        }
                        var existingEntity = entities.Find(m => m.Value.Equals(geoEntitiName));
                        if (existingEntity != null)
                        {
                            entityproperties = existingEntity.Properties;
                            if (entityproperties != newProperties)
                            {
                                newProperties += entityproperties;
                            }
                            entities.Remove(existingEntity);
                        }

                        entities.Add(new Entity(geoEntitiName, newProperties, EntitiesType.geo));
                    }
                }
                return(entities);
            }
        }
示例#5
0
 public UnitTest1()
 {
     ProcessorService.Initialize(MorphLang.RU | MorphLang.EN);
     // инициализируются все используемые анализаторы
     EP.Ner.Money.MoneyAnalyzer.Initialize();
     EP.Ner.Uri.UriAnalyzer.Initialize();
     EP.Ner.Phone.PhoneAnalyzer.Initialize();
     EP.Ner.Definition.DefinitionAnalyzer.Initialize();
     EP.Ner.Date.DateAnalyzer.Initialize();
     EP.Ner.Bank.BankAnalyzer.Initialize();
     EP.Ner.Geo.GeoAnalyzer.Initialize();
     EP.Ner.Address.AddressAnalyzer.Initialize();
     EP.Ner.Org.OrganizationAnalyzer.Initialize();
     EP.Ner.Person.PersonAnalyzer.Initialize();
     EP.Ner.Mail.MailAnalyzer.Initialize();
     EP.Ner.Transport.TransportAnalyzer.Initialize();
     EP.Ner.Decree.DecreeAnalyzer.Initialize();
     EP.Ner.Titlepage.TitlePageAnalyzer.Initialize();
     EP.Ner.Booklink.BookLinkAnalyzer.Initialize();
     EP.Ner.Named.NamedEntityAnalyzer.Initialize();
     EP.Ner.Goods.GoodsAnalyzer.Initialize();
 }
示例#6
0
        void crawler_ProcessPageCrawlCompleted(object sender, PageCrawlCompletedArgs e)
        {
            CrawledPage crawledPage = e.CrawledPage;
            string      uri         = crawledPage.Uri.AbsoluteUri;

            if (crawledPage.WebException != null || crawledPage.HttpWebResponse.StatusCode != HttpStatusCode.OK)
            {
                new HelloResponse {
                    Result = $"Crawl of page failed {uri}!"
                }
            }
            ;

            else
            {
                new HelloResponse {
                    Result = $"Crawl of page succeeded {uri}!"
                }
            };

            var htmlAgilityPackDocument = crawledPage.HtmlDocument; //Html Agility Pack parser

            Extract(e, htmlAgilityPackDocument);
        }

        string RemoveQuotes(string articleText)
        {
            return(Regex.Replace(articleText, "\"", String.Empty));
        }

        void Extract(PageCrawlCompletedArgs page, HtmlDocument htmlAgilityPackDocument)
        {
            try
            {
                DateTime      date       = default(DateTime);
                string        entityText = "";
                StringBuilder text       = new StringBuilder();

                StringBuilder headerArticle = new StringBuilder();
                StringBuilder articleText   = new StringBuilder();

                var t2 = htmlAgilityPackDocument.DocumentNode.SelectSingleNode("//div[@class='news-detail']");
                if (t2 != null)
                {
                    // You need to add an * to the xpath. The * means you want to select any element.
                    // With an xpath query you can also use "." to indicate the search should start at the current node.
                    HtmlNode HeaderArticleNode = t2.SelectSingleNode(".//*[@class='name']");
                    if (HeaderArticleNode != null)
                    {
                        headerArticle.Append(RemoveQuotes(HeaderArticleNode.InnerText));
                    }

                    HtmlNode TextNode = t2.SelectSingleNode(".//*[@id='detailText']");
                    if (TextNode != null)
                    {
                        if (TextNode.InnerText != "")
                        {
                            articleText.Append(RemoveQuotes(TextNode.InnerText));

                            ProcessorService.Initialize(MorphLang.RU | MorphLang.EN);
                            EP.Ner.Geo.GeoAnalyzer.Initialize();
                            EP.Ner.Org.OrganizationAnalyzer.Initialize();
                            EP.Ner.Person.PersonAnalyzer.Initialize();

                            //// создаём экземпляр обычного процессора
                            using (Processor proc = ProcessorService.CreateProcessor())
                            {
                                // анализируем текст
                                AnalysisResult ar = proc.Process(new SourceOfAnalysis(articleText.ToString().Trim()));

                                // результирующие сущности
                                foreach (var e in ar.Entities)
                                {
                                    //  if (e.GetType().Name.Equals("GeoReferent"))
                                    //e.GetType().Name + " " + e;
                                    entityText += e.ToString() + " ";
                                }
                            }
                        }
                    }

                    /*
                     * // Вариант с перебором всех дочерних узлов и использованием Descendants
                     * HtmlNodeCollection childNodes = t2.ChildNodes;
                     * foreach (var nNode in childNodes.Descendants("h1"))
                     * {
                     *  if (nNode.NodeType == HtmlNodeType.Element)
                     *  {
                     *      name = nNode.InnerText;
                     *  }
                     * }
                     */
                }
                htmlAgilityPackDocument.DocumentNode.SelectNodes("//style|//script").ToList().ForEach(n => n.Remove());

                var xpath      = "//text()[not(normalize-space())]";
                var emptyNodes = htmlAgilityPackDocument.DocumentNode.SelectNodes(xpath);

                //replace each and all empty text nodes with single new-line text node
                foreach (HtmlNode emptyNode in emptyNodes)
                {
                    emptyNode.ParentNode
                    .ReplaceChild(HtmlTextNode.CreateNode(Environment.NewLine)
                                  , emptyNode
                                  );
                }

                string FullText = htmlAgilityPackDocument.DocumentNode.InnerHtml.AsString();

                var bla = htmlAgilityPackDocument.DocumentNode.SelectSingleNode("//span[@class='news-date-time news_date']");
                if (bla != null)
                {
                    bla.InnerHtml.ToString();
                    date = DateTime.Parse(bla.InnerText);
                }

                if (headerArticle.Length != 0 & articleText.Length != 0)
                {
                    using (var db = dbConnectionFactory.OpenDbConnection())
                    {
                        db.Insert(new Article()
                        {
                            // HeaderArticle = HeaderArticle,
                            HeaderArticle = headerArticle.ToString().Trim(),
                            UrlArticle    = page.CrawledPage.Uri.AbsoluteUri,
                            FullText      = page.CrawledPage.HtmlDocument.DocumentNode.OuterHtml,
                            Text          = articleText.ToString().Trim(),
                            LastUpdated   = date,
                            EntityText    = entityText,
                        }
                                  );
                    }
                }
            }
            catch (Exception e) {
                Console.WriteLine("", e.Message);
            }
        }
    }
示例#7
0
        static void Main(string[] args)
        {
            Stopwatch sw = Stopwatch.StartNew();

            // инициализация - необходимо проводить один раз до обработки текстов
            Console.Write("Initializing ... ");

            ProcessorService.Initialize(MorphLang.RU | MorphLang.EN);
            // инициализируются все используемые анализаторы
            //EP.Ner.Money.MoneyAnalyzer.Initialize();
            //EP.Ner.Uri.UriAnalyzer.Initialize();
            //EP.Ner.Phone.PhoneAnalyzer.Initialize();
            //EP.Ner.Definition.DefinitionAnalyzer.Initialize();
            //EP.Ner.Date.DateAnalyzer.Initialize();
            //EP.Ner.Bank.BankAnalyzer.Initialize();
            EP.Ner.Geo.GeoAnalyzer.Initialize();          // этот нужен
            // EP.Ner.Address.AddressAnalyzer.Initialize();
            EP.Ner.Org.OrganizationAnalyzer.Initialize(); // Этот нужен
            EP.Ner.Person.PersonAnalyzer.Initialize();    // этот нужен
            //EP.Ner.Mail.MailAnalyzer.Initialize();
            //EP.Ner.Transport.TransportAnalyzer.Initialize();
            //EP.Ner.Decree.DecreeAnalyzer.Initialize();
            //EP.Ner.Titlepage.TitlePageAnalyzer.Initialize();
            //EP.Ner.Booklink.BookLinkAnalyzer.Initialize();
            //EP.Ner.Named.NamedEntityAnalyzer.Initialize();
            //EP.Ner.Goods.GoodsAnalyzer.Initialize();

            sw.Stop();
            Console.WriteLine("OK (by {0} ms), version {1}", (int)sw.ElapsedMilliseconds, ProcessorService.Version);

            // анализируемый текст
            string txt = " улица Куйбышева Единственным конкурентом «Трансмаша» на этом дебильном тендере фамилия Гуполович было ООО «Плассер Алека Рейл Сервис», основным владельцем которого является австрийская компания «СТЦ-Холдинг ГМБХ». До конца 2011 г. эта же фирма была совладельцем «Трансмаша» вместе с «Тако» Краснова. Зато совладельцем «Плассера», также до конца 2011 г., был тот самый Карл Контрус, который имеет четверть акций «Трансмаша». ";

            // создаём экземпляр обычного процессора
            using (Processor proc = ProcessorService.CreateProcessor())
            {
                // анализируем текст
                AnalysisResult ar = proc.Process(new SourceOfAnalysis(txt));

                // результирующие сущности
                Console.WriteLine("Entities: ");
                foreach (var e in ar.Entities)
                {
                    if (e.GetType().Name.Equals("GeoReferent"))
                    {
                        Console.WriteLine(e.GetType().Name + " " + e + " if прошел успешно");
                    }
                    else
                    {
                        Console.WriteLine(e.GetType().Name + " " + e);
                    }
                }

                //// пример выделения именных групп
                //Console.WriteLine("Noun groups: ");
                //for (Token t = ar.FirstToken; t != null; t = t.Next)
                //{
                //    if (t.GetReferent() != null) continue; // токены с сущностями игнорируем
                //    // пробуем создать именную группу
                //    NounPhraseToken npt = NounPhraseHelper.TryParse(t, NounPhraseParseAttr.AdjectiveCanBeLast);
                //    if (npt == null) continue; // не получилось
                //    Console.WriteLine(npt);
                //    t = npt.EndToken; // указатель на последний токен группы
                //}
            }

            Console.WriteLine("Over!");
        }
示例#8
0
        static void Main(string[] args)
        {
            Stopwatch sw = Stopwatch.StartNew();

            // инициализация - необходимо проводить один раз до обработки текстов
            Console.Write("Initializing ... ");

            ProcessorService.Initialize(MorphLang.RU | MorphLang.EN);
            // инициализируются все используемые анализаторы
            MyAnalyzer.Initialize();

            Console.WriteLine("OK (by {0} ms), version {1}", (int)sw.ElapsedMilliseconds, ProcessorService.Version);

            AnalysisResult ar = null;

            if (args.Length > 0)
            {
                if (args[0] == "csv")
                {
                    ClientApiSettings settings = new ClientApiSettings();
                    foreach (var file in Directory.GetFiles("Texts", "*.csv"))
                    {
                        using (var sr = new StreamReader(file))
                        {
                            var i    = 1;
                            var line = sr.ReadLine();
                            while (line != null)
                            {
                                var data = line.Split(';', ' ', ';');
                                if (data.Length < 3)
                                {
                                    Console.WriteLine("Ошибка формата csv. \r\n Формат\r\n Name;CaseId;DocumentId");
                                }

                                GlobalState.File = i + "_" + MakeValidFileName(data[0]) + ".txt";

                                var client = new PravoRu.DataLake.Arbitr.CaseCard.Api.Client.v1.FileClient(settings,
                                                                                                           new HttpClientFactory());
                                DocumentPlainText response = null;
                                try
                                {
                                    response = client.GetDocumentTextAsync(new DocumentFileRequest()
                                    {
                                        CaseId     = Guid.Parse(data[1]),
                                        IsBase64   = false,
                                        DocumentId = Guid.Parse(data[2])
                                    }).GetAwaiter().GetResult();
                                }
                                catch (Exception e)
                                {
                                    Console.WriteLine(data[0] + "\t" + e.Message);
                                }

                                if (response == null)
                                {
                                    line = sr.ReadLine();
                                    continue;
                                }


                                File.WriteAllText(Path.Combine("Results", "Original_" + GlobalState.File), response.HtmlText);

                                // создаём экземпляр обычного процессора
                                using (Processor proc = ProcessorService.CreateSpecificProcessor(nameof(MyAnalyzer)))
                                {
                                    // анализируем текст
                                    ar = proc.Process(new SourceOfAnalysis(response.HtmlText));
                                    try
                                    {
                                        PostExecute(ar);
                                    }
                                    catch (Exception e)
                                    {
                                        Console.WriteLine(e);
                                    }
                                }

                                Console.WriteLine("Обработан файл " + GlobalState.File);
                                line = sr.ReadLine();
                                i++;
                            }
                        }
                    }
                }

                if (args[0] == "txt")
                {
                    foreach (var file in Directory.GetFiles("Texts", "*.txt"))
                    {
                        Console.WriteLine($"{file}------------------------------------");
                        string txt = File.ReadAllText(file);
                        GlobalState.File = new FileInfo(file).Name;
                        // создаём экземпляр обычного процессора
                        using (Processor proc = ProcessorService.CreateSpecificProcessor(nameof(MyAnalyzer)))
                        {
                            // анализируем текст
                            ar = proc.Process(new SourceOfAnalysis(txt));
                            try
                            {
                                PostExecute(ar);
                            }
                            catch (Exception e)
                            {
                                Console.WriteLine(e);
                            }
                        }
                    }
                }
            }


            sw.Stop();
            Console.WriteLine("Over!(by {0} ms), version {1}", (int)sw.ElapsedMilliseconds, ProcessorService.Version);
        }
示例#9
0
 public EpTextProcessor()
 {
     ProcessorService.Initialize(false);
     (new PersonInitializer()).Initialize();
 }