Ejemplo n.º 1
0
 public override string GetImageId(Pullenti.Ner.Referent obj = null)
 {
     Pullenti.Ner.Keyword.KeywordReferent m = obj as Pullenti.Ner.Keyword.KeywordReferent;
     if (m != null)
     {
         if (m.Typ == Pullenti.Ner.Keyword.KeywordType.Predicate)
         {
             return(ImagePred);
         }
         if (m.Typ == Pullenti.Ner.Keyword.KeywordType.Referent)
         {
             return(ImageRef);
         }
     }
     return(ImageObj);
 }
Ejemplo n.º 2
0
        public static void Main(string[] args)
        {
            Stopwatch sw = Stopwatch.StartNew();

            // инициализация - необходимо проводить один раз до обработки текстов
            Console.Write("Initializing SDK Pullenti ver {0} ({1}) ... ", Pullenti.Sdk.Version, Pullenti.Sdk.VersionDate);
            // инициализируются движок и все имеющиеся анализаторы
            Pullenti.Sdk.InitializeAll();
            sw.Stop();
            Console.WriteLine("OK (by {0} ms), version {1}", (int)sw.ElapsedMilliseconds, Pullenti.Ner.ProcessorService.Version);
            // посмотрим, какие анализаторы доступны
            foreach (Pullenti.Ner.Analyzer a in Pullenti.Ner.ProcessorService.Analyzers)
            {
                Console.WriteLine("   {0} {1} \"{2}\"", (a.IsSpecific ? "Specific analyzer" : "Common analyzer"), a.Name, a.Caption);
            }
            // анализируемый текст
            string txt = "Система разрабатывается с 2011 года российским программистом Михаилом Жуковым, проживающим в Москве на Красной площади в доме номер один на втором этаже. Конкурентов у него много: Abbyy, Yandex, ООО \"Russian Context Optimizer\" (RCO) и другие компании. Он планирует продать SDK за 1.120.000.001,99 (миллиард сто двадцать миллионов один рубль 99 копеек) рублей, без НДС.";

            Console.WriteLine("Text: {0}", txt);
            // запускаем обработку на пустом процессоре (без анализаторов NER)
            Pullenti.Ner.AnalysisResult are = Pullenti.Ner.ProcessorService.EmptyProcessor.Process(new Pullenti.Ner.SourceOfAnalysis(txt), null, null);
            Console.Write("Noun groups: ");
            // перебираем токены
            for (Pullenti.Ner.Token t = are.FirstToken; t != null; t = t.Next)
            {
                // выделяем именную группу с текущего токена
                Pullenti.Ner.Core.NounPhraseToken npt = Pullenti.Ner.Core.NounPhraseHelper.TryParse(t, Pullenti.Ner.Core.NounPhraseParseAttr.No, 0, null);
                // не получилось
                if (npt == null)
                {
                    continue;
                }
                // получилось, выводим в нормализованном виде
                Console.Write("[{0}=>{1}] ", npt.GetSourceText(), npt.GetNormalCaseText(null, Pullenti.Morph.MorphNumber.Singular, Pullenti.Morph.MorphGender.Undefined, false));
                // указатель на последний токен именной группы
                t = npt.EndToken;
            }
            using (Pullenti.Ner.Processor proc = Pullenti.Ner.ProcessorService.CreateProcessor())
            {
                // анализируем текст
                Pullenti.Ner.AnalysisResult ar = proc.Process(new Pullenti.Ner.SourceOfAnalysis(txt), null, null);
                // результирующие сущности
                Console.WriteLine("\r\n==========================================\r\nEntities: ");
                foreach (Pullenti.Ner.Referent e in ar.Entities)
                {
                    Console.WriteLine("{0}: {1}", e.TypeName, e.ToString());
                    foreach (Pullenti.Ner.Slot s in e.Slots)
                    {
                        Console.WriteLine("   {0}: {1}", s.TypeName, s.Value);
                    }
                }
                // пример выделения именных групп
                Console.WriteLine("\r\n==========================================\r\nNoun groups: ");
                for (Pullenti.Ner.Token t = ar.FirstToken; t != null; t = t.Next)
                {
                    // токены с сущностями игнорируем
                    if (t.GetReferent() != null)
                    {
                        continue;
                    }
                    // пробуем создать именную группу
                    Pullenti.Ner.Core.NounPhraseToken npt = Pullenti.Ner.Core.NounPhraseHelper.TryParse(t, Pullenti.Ner.Core.NounPhraseParseAttr.AdjectiveCanBeLast, 0, null);
                    // не получилось
                    if (npt == null)
                    {
                        continue;
                    }
                    Console.WriteLine(npt);
                    // указатель перемещаем на последний токен группы
                    t = npt.EndToken;
                }
            }
            using (Pullenti.Ner.Processor proc = Pullenti.Ner.ProcessorService.CreateSpecificProcessor(Pullenti.Ner.Keyword.KeywordAnalyzer.ANALYZER_NAME))
            {
                Pullenti.Ner.AnalysisResult ar = proc.Process(new Pullenti.Ner.SourceOfAnalysis(txt), null, null);
                Console.WriteLine("\r\n==========================================\r\nKeywords1: ");
                foreach (Pullenti.Ner.Referent e in ar.Entities)
                {
                    if (e is Pullenti.Ner.Keyword.KeywordReferent)
                    {
                        Console.WriteLine(e);
                    }
                }
                Console.WriteLine("\r\n==========================================\r\nKeywords2: ");
                for (Pullenti.Ner.Token t = ar.FirstToken; t != null; t = t.Next)
                {
                    if (t is Pullenti.Ner.ReferentToken)
                    {
                        Pullenti.Ner.Keyword.KeywordReferent kw = t.GetReferent() as Pullenti.Ner.Keyword.KeywordReferent;
                        if (kw == null)
                        {
                            continue;
                        }
                        string kwstr = Pullenti.Ner.Core.MiscHelper.GetTextValueOfMetaToken(t as Pullenti.Ner.ReferentToken, Pullenti.Ner.Core.GetTextAttr.FirstNounGroupToNominativeSingle | Pullenti.Ner.Core.GetTextAttr.KeepRegister);
                        Console.WriteLine("{0} = {1}", kwstr, kw);
                    }
                }
            }
            Console.WriteLine("Over!");
        }
Ejemplo n.º 3
0
        public static Pullenti.Ner.Keyword.KeywordReferent CreateAnnotation(Pullenti.Ner.Core.AnalysisKit kit, int maxSents)
        {
            List <AutoannoSentToken> sents = new List <AutoannoSentToken>();

            for (Pullenti.Ner.Token t = kit.FirstToken; t != null; t = t.Next)
            {
                AutoannoSentToken sent = TryParse(t);
                if (sent == null)
                {
                    continue;
                }
                if (sent.Rank > 0)
                {
                    sents.Add(sent);
                }
                t = sent.EndToken;
            }
            if (sents.Count < 2)
            {
                return(null);
            }
            for (int i = 0; i < sents.Count; i++)
            {
                sents[i].Rank *= (((double)((sents.Count - i))) / sents.Count);
            }
            if ((maxSents * 3) > sents.Count)
            {
                maxSents = sents.Count / 3;
                if (maxSents == 0)
                {
                    maxSents = 1;
                }
            }
            while (sents.Count > maxSents)
            {
                int    mini = 0;
                double min  = sents[0].Rank;
                for (int i = 1; i < sents.Count; i++)
                {
                    if (sents[i].Rank <= min)
                    {
                        min  = sents[i].Rank;
                        mini = i;
                    }
                }
                sents.RemoveAt(mini);
            }
            Pullenti.Ner.Keyword.KeywordReferent ano = new Pullenti.Ner.Keyword.KeywordReferent();
            ano.Typ = Pullenti.Ner.Keyword.KeywordType.Annotation;
            StringBuilder tmp = new StringBuilder();

            foreach (AutoannoSentToken s in sents)
            {
                if (tmp.Length > 0)
                {
                    tmp.Append(' ');
                }
                tmp.Append(s.Value);
                ano.Occurrence.Add(new Pullenti.Ner.TextAnnotation()
                {
                    BeginChar = s.BeginChar, EndChar = s.EndChar, OccurenceOf = ano, Sofa = kit.Sofa
                });
            }
            ano.AddSlot(Pullenti.Ner.Keyword.KeywordReferent.ATTR_VALUE, tmp.ToString(), true, 0);
            return(ano);
        }