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(); }
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](); } }
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); } }
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(); }
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); } } }
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!"); }
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); }
public EpTextProcessor() { ProcessorService.Initialize(false); (new PersonInitializer()).Initialize(); }