コード例 #1
0
 public static void Initialize()
 {
     m_Onto = new Pullenti.Ner.Core.TerminCollection();
     Pullenti.Ner.Core.Termin t;
     t = new Pullenti.Ner.Core.Termin("НО")
     {
         Tag = DelimType.But
     };
     t.AddVariant("А", false);
     t.AddVariant("ОДНАКО", false);
     t.AddVariant("ХОТЯ", false);
     m_Onto.Add(t);
     t = new Pullenti.Ner.Core.Termin("ЕСЛИ")
     {
         Tag = DelimType.If
     };
     t.AddVariant("В СЛУЧАЕ ЕСЛИ", false);
     m_Onto.Add(t);
     t = new Pullenti.Ner.Core.Termin("КОГДА")
     {
         Tag = DelimType.If, Tag2 = m_Onto
     };
     m_Onto.Add(t);
     t = new Pullenti.Ner.Core.Termin("ТО")
     {
         Tag = DelimType.Then
     };
     t.AddVariant("ТОГДА", false);
     m_Onto.Add(t);
     t = new Pullenti.Ner.Core.Termin("ИНАЧЕ")
     {
         Tag = DelimType.Else
     };
     t.AddVariant("В ПРОТИВНОМ СЛУЧАЕ", false);
     m_Onto.Add(t);
     t = new Pullenti.Ner.Core.Termin("ТАК КАК")
     {
         Tag = DelimType.Because
     };
     t.AddVariant("ПОТОМУ ЧТО", false);
     t.AddVariant("ПО ПРИЧИНЕ ТОГО ЧТО", false);
     t.AddVariant("ИЗ ЗА ТОГО ЧТО", false);
     t.AddVariant("ИЗЗА ТОГО ЧТО", false);
     t.AddVariant("ИЗ-ЗА ТОГО ЧТО", false);
     t.AddVariant("ТО ЕСТЬ", false);
     m_Onto.Add(t);
     t = new Pullenti.Ner.Core.Termin("ЧТОБЫ")
     {
         Tag = DelimType.For
     };
     t.AddVariant("ДЛЯ ТОГО ЧТОБЫ", false);
     m_Onto.Add(t);
     t = new Pullenti.Ner.Core.Termin("ЧТО")
     {
         Tag = DelimType.What
     };
     m_Onto.Add(t);
 }
コード例 #2
0
 public static void Initialize()
 {
     if (m_Ontology != null)
     {
         return;
     }
     m_Ontology = new Pullenti.Ner.Core.TerminCollection();
     foreach (string s in new string[] { "СОДЕРЖАНИЕ", "СОДЕРЖИМОЕ", "ОГЛАВЛЕНИЕ", "ПЛАН", "PLAN", "ЗМІСТ", "CONTENTS", "INDEX" })
     {
         m_Ontology.Add(new Pullenti.Ner.Core.Termin(s)
         {
             Tag = BlkTyps.Index
         });
     }
     foreach (string s in new string[] { "ГЛАВА", "CHAPTER", "РАЗДЕЛ", "ПАРАГРАФ", "VOLUME", "SECTION", "РОЗДІЛ" })
     {
         m_Ontology.Add(new Pullenti.Ner.Core.Termin(s)
         {
             Tag = BlkTyps.Chapter
         });
     }
     foreach (string s in new string[] { "ВВЕДЕНИЕ", "ВСТУПЛЕНИЕ", "ПРЕДИСЛОВИЕ", "INTRODUCTION" })
     {
         m_Ontology.Add(new Pullenti.Ner.Core.Termin(s)
         {
             Tag = BlkTyps.Intro
         });
     }
     foreach (string s in new string[] { "ВСТУП", "ПЕРЕДМОВА" })
     {
         m_Ontology.Add(new Pullenti.Ner.Core.Termin(s, Pullenti.Morph.MorphLang.UA)
         {
             Tag = BlkTyps.Intro
         });
     }
     foreach (string s in new string[] { "ВЫВОДЫ", "ВЫВОД", "ЗАКЛЮЧЕНИЕ", "CONCLUSION", "ВИСНОВОК", "ВИСНОВКИ" })
     {
         m_Ontology.Add(new Pullenti.Ner.Core.Termin(s)
         {
             Tag = BlkTyps.Conslusion
         });
     }
     foreach (string s in new string[] { "ПРИЛОЖЕНИЕ", "APPENDIX", "ДОДАТОК" })
     {
         m_Ontology.Add(new Pullenti.Ner.Core.Termin(s)
         {
             Tag = BlkTyps.Appendix
         });
     }
     foreach (string s in new string[] { "СПИСОК СОКРАЩЕНИЙ", "СПИСОК УСЛОВНЫХ СОКРАЩЕНИЙ", "СПИСОК ИСПОЛЬЗУЕМЫХ СОКРАЩЕНИЙ", "УСЛОВНЫЕ СОКРАЩЕНИЯ", "ОБЗОР ЛИТЕРАТУРЫ", "АННОТАЦИЯ", "ANNOTATION", "БЛАГОДАРНОСТИ", "SUPPLEMENT", "ABSTRACT", "СПИСОК СКОРОЧЕНЬ", "ПЕРЕЛІК УМОВНИХ СКОРОЧЕНЬ", "СПИСОК ВИКОРИСТОВУВАНИХ СКОРОЧЕНЬ", "УМОВНІ СКОРОЧЕННЯ", "ОГЛЯД ЛІТЕРАТУРИ", "АНОТАЦІЯ", "ПОДЯКИ" })
     {
         m_Ontology.Add(new Pullenti.Ner.Core.Termin(s)
         {
             Tag = BlkTyps.Misc
         });
     }
 }
コード例 #3
0
 public static void Initialize()
 {
     if (m_Termins != null)
     {
         return;
     }
     m_Termins = new Pullenti.Ner.Core.TerminCollection();
     foreach (string s in new string[] { "ИТАК", "СЛЕДОВАТЕЛЬНО", "ТАКИМ ОБРАЗОМ" })
     {
         m_Termins.Add(new Pullenti.Ner.Core.Termin(s, Pullenti.Morph.MorphLang.RU, true));
     }
 }
コード例 #4
0
 internal static void Initialize()
 {
     if (m_StdAdjectives != null)
     {
         return;
     }
     m_StdAdjectives = new Pullenti.Ner.Core.TerminCollection();
     foreach (string s in new string[] { "СЕВЕРНЫЙ", "ЮЖНЫЙ", "ЗАПАДНЫЙ", "ВОСТОЧНЫЙ" })
     {
         m_StdAdjectives.Add(new Pullenti.Ner.Core.Termin(s));
     }
 }
コード例 #5
0
        public static List <UnitToken> TryParseList(Pullenti.Ner.Token t, Pullenti.Ner.Core.TerminCollection addUnits, bool parseUnknownUnits = false)
        {
            UnitToken ut = TryParse(t, addUnits, null, parseUnknownUnits);

            if (ut == null)
            {
                return(null);
            }
            List <UnitToken> res = new List <UnitToken>();

            res.Add(ut);
            for (Pullenti.Ner.Token tt = ut.EndToken.Next; tt != null; tt = tt.Next)
            {
                ut = TryParse(tt, addUnits, res[res.Count - 1], true);
                if (ut == null)
                {
                    break;
                }
                if (ut.Unit != null && ut.Unit.Kind != Pullenti.Ner.Measure.MeasureKind.Undefined)
                {
                    if (res[res.Count - 1].Unit != null && res[res.Count - 1].Unit.Kind == ut.Unit.Kind)
                    {
                        break;
                    }
                }
                res.Add(ut);
                tt = ut.EndToken;
                if (res.Count > 2)
                {
                    break;
                }
            }
            for (int i = 0; i < res.Count; i++)
            {
                if (res[i].Unit != null && res[i].Unit.BaseUnit != null && res[i].Unit.MultUnit != null)
                {
                    UnitToken ut2 = new UnitToken(res[i].BeginToken, res[i].EndToken);
                    ut2.Unit = res[i].Unit.MultUnit;
                    res.Insert(i + 1, ut2);
                    res[i].Unit = res[i].Unit.BaseUnit;
                }
            }
            if (res.Count > 1)
            {
                foreach (UnitToken r in res)
                {
                    r.IsDoubt = false;
                }
            }
            return(res);
        }
コード例 #6
0
        public static NumbersWithUnitToken TryParse(Pullenti.Ner.Token t, Pullenti.Ner.Core.TerminCollection addUnits, bool canOmitNumber = false, bool not = false, bool canBeNan = false, bool isResctriction = false)
        {
            if (t == null)
            {
                return(null);
            }
            NumbersWithUnitToken res = _tryParse(t, addUnits, isResctriction, canOmitNumber, canBeNan);

            if (res != null)
            {
                res.Not = not;
            }
            return(res);
        }
コード例 #7
0
 public static void Initialize()
 {
     if (m_Ontology != null)
     {
         return;
     }
     Pullenti.Ner.Bank.Internal.MetaBank.Initialize();
     m_Ontology = new Pullenti.Ner.Core.TerminCollection();
     Pullenti.Ner.Core.Termin t = new Pullenti.Ner.Core.Termin("БАНКОВСКИЕ РЕКВИЗИТЫ", null, true);
     t.AddVariant("ПЛАТЕЖНЫЕ РЕКВИЗИТЫ", false);
     t.AddVariant("РЕКВИЗИТЫ", false);
     m_Ontology.Add(t);
     Pullenti.Ner.ProcessorService.RegisterAnalyzer(new BankAnalyzer());
 }
コード例 #8
0
 public static void Initialize()
 {
     if (m_StdGroups != null)
     {
         return;
     }
     m_StdGroups = new Pullenti.Ner.Core.TerminCollection();
     string[] domainGroups = new string[] { "com;net;org;inf;biz;name;aero;arpa;edu;int;gov;mil;coop;museum;mobi;travel", "ac;ad;ae;af;ag;ai;al;am;an;ao;aq;ar;as;at;au;aw;az", "ba;bb;bd;be;bf;bg;bh;bi;bj;bm;bn;bo;br;bs;bt;bv;bw;by;bz", "ca;cc;cd;cf;cg;ch;ci;ck;cl;cm;cn;co;cr;cu;cv;cx;cy;cz", "de;dj;dk;dm;do;dz", "ec;ee;eg;eh;er;es;et;eu", "fi;fj;fk;fm;fo;fr", "ga;gd;ge;gf;gg;gh;gi;gl;gm;gn;gp;gq;gr;gs;gt;gu;gw;gy", "hk;hm;hn;hr;ht;hu", "id;ie;il;im;in;io;iq;ir;is;it", "je;jm;jo;jp", "ke;kg;kh;ki;km;kn;kp;kr;kw;ky;kz", "la;lb;lc;li;lk;lr;ls;lt;lu;lv;ly", "ma;mc;md;mg;mh;mk;ml;mm;mn;mo;mp;mq;mr;ms;mt;mu;mv;mw;mx;my;mz", "na;nc;ne;nf;ng;ni;nl;no;np;nr;nu;nz", "om", "pa;pe;pf;pg;ph;pk;pl;pm;pn;pr;ps;pt;pw;py", "qa", "re;ro;ru;rw", "sa;sb;sc;sd;se;sg;sh;si;sj;sk;sl;sm;sn;so;sr;st;su;sv;sy;sz", "tc;td;tf;tg;th;tj;tk;tm;tn;to;tp;tr;tt;tv;tw;tz", "ua;ug;uk;um;us;uy;uz", "va;vc;ve;vg;vi;vn;vu", "wf;ws", "ye;yt;yu", "za;zm;zw" };
     char[]   separator    = new char[] { ';' };
     foreach (string domainGroup in domainGroups)
     {
         foreach (string domain in domainGroup.ToUpper().Split(separator, StringSplitOptions.RemoveEmptyEntries))
         {
             m_StdGroups.Add(new Pullenti.Ner.Core.Termin(domain, Pullenti.Morph.MorphLang.Unknown, true));
         }
     }
 }
コード例 #9
0
        public static MeasureToken TryParseMinimal(Pullenti.Ner.Token t, Pullenti.Ner.Core.TerminCollection addUnits, bool canOmitNumber = false)
        {
            if (t == null || (t is Pullenti.Ner.ReferentToken))
            {
                return(null);
            }
            List <NumbersWithUnitToken> mt = NumbersWithUnitToken.TryParseMulti(t, addUnits, canOmitNumber, false, false, false);

            if (mt == null)
            {
                return(null);
            }
            if (mt[0].Units.Count == 0)
            {
                return(null);
            }
            if ((mt.Count == 1 && mt[0].Units.Count == 1 && mt[0].Units[0].IsDoubt) && !mt[0].IsNewlineBefore)
            {
                return(null);
            }
            MeasureToken res;

            if (mt.Count == 1)
            {
                res = new MeasureToken(mt[0].BeginToken, mt[mt.Count - 1].EndToken)
                {
                    Nums = mt[0]
                };
                res._parseInternals(addUnits);
                return(res);
            }
            res = new MeasureToken(mt[0].BeginToken, mt[mt.Count - 1].EndToken);
            foreach (NumbersWithUnitToken m in mt)
            {
                res.Internals.Add(new MeasureToken(m.BeginToken, m.EndToken)
                {
                    Nums = m
                });
            }
            return(res);
        }
コード例 #10
0
 public static void Initialize()
 {
     if (m_RegardWords != null)
     {
         return;
     }
     m_RegardWords = new Pullenti.Ner.Core.TerminCollection();
     foreach (string s in new string[] { "УВАЖЕНИЕ", "ПОЧТЕНИЕ", "С УВАЖЕНИЕМ", "ПОЖЕЛАНИE", "ДЕНЬ", "ХОРОШЕГО ДНЯ", "ИСКРЕННЕ ВАШ", "УДАЧА", "СПАСИБО", "ЦЕЛОВАТЬ", "ПОВАГА", "З ПОВАГОЮ", "ПОБАЖАННЯ", "ДЕНЬ", "ЩИРО ВАШ", "ДЯКУЮ", "ЦІЛУВАТИ", "BEST REGARDS", "REGARDS", "BEST WISHES", "KIND REGARDS", "GOOD BYE", "BYE", "THANKS", "THANK YOU", "MANY THANKS", "DAY", "VERY MUCH", "HAVE", "LUCK", "Yours sincerely", "sincerely Yours", "Looking forward", "Ar cieņu" })
     {
         m_RegardWords.Add(new Pullenti.Ner.Core.Termin(s.ToUpper()));
     }
     m_FromWords = new Pullenti.Ner.Core.TerminCollection();
     foreach (string s in new string[] { "FROM", "TO", "CC", "SENT", "SUBJECT", "SENDER", "TIME", "ОТ КОГО", "КОМУ", "ДАТА", "ТЕМА", "КОПИЯ", "ОТ", "ОТПРАВЛЕНО", "WHEN", "WHERE" })
     {
         m_FromWords.Add(new Pullenti.Ner.Core.Termin(s));
     }
     m_HelloWords = new Pullenti.Ner.Core.TerminCollection();
     foreach (string s in new string[] { "HI", "HELLO", "DEAR", "GOOD MORNING", "GOOD DAY", "GOOD EVENING", "GOOD NIGHT", "ЗДРАВСТВУЙ", "ЗДРАВСТВУЙТЕ", "ПРИВЕТСТВУЮ", "ПРИВЕТ", "ПРИВЕТИК", "УВАЖАЕМЫЙ", "ДОРОГОЙ", "ЛЮБЕЗНЫЙ", "ДОБРОЕ УТРО", "ДОБРЫЙ ДЕНЬ", "ДОБРЫЙ ВЕЧЕР", "ДОБРОЙ НОЧИ", "ЗДРАСТУЙ", "ЗДРАСТУЙТЕ", "ВІТАЮ", "ПРИВІТ", "ПРИВІТ", "ШАНОВНИЙ", "ДОРОГИЙ", "ЛЮБИЙ", "ДОБРОГО РАНКУ", "ДОБРИЙ ДЕНЬ", "ДОБРИЙ ВЕЧІР", "ДОБРОЇ НОЧІ" })
     {
         m_HelloWords.Add(new Pullenti.Ner.Core.Termin(s));
     }
 }
コード例 #11
0
        internal static void Initialize()
        {
            if (m_Nords != null)
            {
                return;
            }
            m_Nords = new Pullenti.Ner.Core.TerminCollection();
            foreach (string s in new string[] { "СЕВЕРНЫЙ", "ЮЖНЫЙ", "ЗАПАДНЫЙ", "ВОСТОЧНЫЙ", "ЦЕНТРАЛЬНЫЙ", "БЛИЖНИЙ", "ДАЛЬНИЙ", "СРЕДНИЙ", "СЕВЕР", "ЮГ", "ЗАПАД", "ВОСТОК", "СЕВЕРО", "ЮГО", "ЗАПАДНО", "ВОСТОЧНО", "СЕВЕРОЗАПАДНЫЙ", "СЕВЕРОВОСТОЧНЫЙ", "ЮГОЗАПАДНЫЙ", "ЮГОВОСТОЧНЫЙ" })
            {
                m_Nords.Add(new Pullenti.Ner.Core.Termin(s, Pullenti.Morph.MorphLang.RU, true));
            }
            string table = "\nAF\tAFG\nAX\tALA\nAL\tALB\nDZ\tDZA\nAS\tASM\nAD\tAND\nAO\tAGO\nAI\tAIA\nAQ\tATA\nAG\tATG\nAR\tARG\nAM\tARM\nAW\tABW\nAU\tAUS\nAT\tAUT\nAZ\tAZE\nBS\tBHS\nBH\tBHR\nBD\tBGD\nBB\tBRB\nBY\tBLR\nBE\tBEL\nBZ\tBLZ\nBJ\tBEN\nBM\tBMU\nBT\tBTN\nBO\tBOL\nBA\tBIH\nBW\tBWA\nBV\tBVT\nBR\tBRA\nVG\tVGB\nIO\tIOT\nBN\tBRN\nBG\tBGR\nBF\tBFA\nBI\tBDI\nKH\tKHM\nCM\tCMR\nCA\tCAN\nCV\tCPV\nKY\tCYM\nCF\tCAF\nTD\tTCD\nCL\tCHL\nCN\tCHN\nHK\tHKG\nMO\tMAC\nCX\tCXR\nCC\tCCK\nCO\tCOL\nKM\tCOM\nCG\tCOG\nCD\tCOD\nCK\tCOK\nCR\tCRI\nCI\tCIV\nHR\tHRV\nCU\tCUB\nCY\tCYP\nCZ\tCZE\nDK\tDNK\nDJ\tDJI\nDM\tDMA\nDO\tDOM\nEC\tECU\nEG\tEGY\nSV\tSLV\nGQ\tGNQ\nER\tERI\nEE\tEST\nET\tETH\nFK\tFLK\nFO\tFRO\nFJ\tFJI\nFI\tFIN\nFR\tFRA\nGF\tGUF\nPF\tPYF\nTF\tATF\nGA\tGAB\nGM\tGMB\nGE\tGEO\nDE\tDEU\nGH\tGHA\nGI\tGIB\nGR\tGRC\nGL\tGRL\nGD\tGRD\nGP\tGLP\nGU\tGUM\nGT\tGTM\nGG\tGGY\nGN\tGIN\nGW\tGNB\nGY\tGUY\nHT\tHTI\nHM\tHMD\nVA\tVAT\nHN\tHND\nHU\tHUN\nIS\tISL\nIN\tIND\nID\tIDN\nIR\tIRN\nIQ\tIRQ\nIE\tIRL\nIM\tIMN\nIL\tISR\nIT\tITA\nJM\tJAM\nJP\tJPN\nJE\tJEY\nJO\tJOR\nKZ\tKAZ\nKE\tKEN\nKI\tKIR\nKP\tPRK\nKR\tKOR\nKW\tKWT\nKG\tKGZ\nLA\tLAO\nLV\tLVA\nLB\tLBN\nLS\tLSO\nLR\tLBR\nLY\tLBY\nLI\tLIE\nLT\tLTU\nLU\tLUX\nMK\tMKD\nMG\tMDG\nMW\tMWI\nMY\tMYS\nMV\tMDV\nML\tMLI\nMT\tMLT\nMH\tMHL\nMQ\tMTQ\nMR\tMRT\nMU\tMUS\nYT\tMYT\nMX\tMEX\nFM\tFSM\nMD\tMDA\nMC\tMCO\nMN\tMNG\nME\tMNE\nMS\tMSR\nMA\tMAR\nMZ\tMOZ\nMM\tMMR\nNA\tNAM\nNR\tNRU\nNP\tNPL\nNL\tNLD\nAN\tANT\nNC\tNCL\nNZ\tNZL\nNI\tNIC\nNE\tNER\nNG\tNGA\nNU\tNIU\nNF\tNFK\nMP\tMNP\nNO\tNOR\nOM\tOMN\nPK\tPAK\nPW\tPLW\nPS\tPSE\nPA\tPAN\nPG\tPNG\nPY\tPRY\nPE\tPER\nPH\tPHL\nPN\tPCN\nPL\tPOL\nPT\tPRT\nPR\tPRI\nQA\tQAT\nRE\tREU\nRO\tROU\nRU\tRUS\nRW\tRWA\nBL\tBLM\nSH\tSHN\nKN\tKNA\nLC\tLCA\nMF\tMAF\nPM\tSPM\nVC\tVCT\nWS\tWSM\nSM\tSMR\nST\tSTP\nSA\tSAU\nSN\tSEN\nRS\tSRB\nSC\tSYC\nSL\tSLE\nSG\tSGP\nSK\tSVK\nSI\tSVN\nSB\tSLB\nSO\tSOM\nZA\tZAF\nGS\tSGS\nSS\tSSD\nES\tESP\nLK\tLKA\nSD\tSDN\nSR\tSUR\nSJ\tSJM\nSZ\tSWZ\nSE\tSWE\nCH\tCHE\nSY\tSYR\nTW\tTWN\nTJ\tTJK\nTZ\tTZA\nTH\tTHA\nTL\tTLS\nTG\tTGO\nTK\tTKL\nTO\tTON\nTT\tTTO\nTN\tTUN\nTR\tTUR\nTM\tTKM\nTC\tTCA\nTV\tTUV\nUG\tUGA\nUA\tUKR\nAE\tARE\nGB\tGBR\nUS\tUSA\nUM\tUMI\nUY\tURY\nUZ\tUZB\nVU\tVUT\nVE\tVEN\nVN\tVNM\nVI\tVIR\nWF\tWLF\nEH\tESH\nYE\tYEM\nZM\tZMB\nZW\tZWE ";

            foreach (string s in table.Split('\n'))
            {
                string ss = s.Trim();
                if ((ss.Length < 6) || !char.IsWhiteSpace(ss[2]))
                {
                    continue;
                }
                string cod2 = ss.Substring(0, 2);
                string cod3 = ss.Substring(3).Trim();
                if (cod3.Length != 3)
                {
                    continue;
                }
                if (!m_Alpha2_3.ContainsKey(cod2))
                {
                    m_Alpha2_3.Add(cod2, cod3);
                }
                if (!m_Alpha3_2.ContainsKey(cod3))
                {
                    m_Alpha3_2.Add(cod3, cod2);
                }
            }
        }
コード例 #12
0
 void _parseInternals(Pullenti.Ner.Core.TerminCollection addUnits)
 {
     if (EndToken.Next != null && ((EndToken.Next.IsCharOf("\\/") || EndToken.Next.IsValue("ПРИ", null))))
     {
         MeasureToken mt1 = TryParse(EndToken.Next.Next, addUnits, true, false, false, false);
         if (mt1 != null)
         {
             Internals.Add(mt1);
             EndToken = mt1.EndToken;
         }
         else
         {
             NumbersWithUnitToken mt = NumbersWithUnitToken.TryParse(EndToken.Next.Next, addUnits, false, false, false, false);
             if (mt != null && mt.Units.Count > 0 && !UnitToken.CanBeEquals(Nums.Units, mt.Units))
             {
                 Internals.Add(new MeasureToken(mt.BeginToken, mt.EndToken)
                 {
                     Nums = mt
                 });
                 EndToken = mt.EndToken;
             }
         }
     }
 }
コード例 #13
0
 public static void Initialize()
 {
     if (m_Termins != null)
     {
         return;
     }
     m_Termins = new Pullenti.Ner.Core.TerminCollection();
     foreach (string s in new string[] { "РАБОТА", "ДИССЕРТАЦИЯ", "ОТЧЕТ", "ОБЗОР", "ДИПЛОМ", "ПРОЕКТ", "СПРАВКА", "АВТОРЕФЕРАТ", "РЕФЕРАТ", "TECHNOLOGY ISSUES", "TECHNOLOGY COURSE", "УЧЕБНИК", "УЧЕБНОЕ ПОСОБИЕ" })
     {
         m_Termins.Add(new Pullenti.Ner.Core.Termin(s)
         {
             Tag = Types.Typ
         });
     }
     foreach (string s in new string[] { "РОБОТА", "ДИСЕРТАЦІЯ", "ЗВІТ", "ОГЛЯД", "ДИПЛОМ", "ПРОЕКТ", "ДОВІДКА", "АВТОРЕФЕРАТ", "РЕФЕРАТ" })
     {
         m_Termins.Add(new Pullenti.Ner.Core.Termin(s, Pullenti.Morph.MorphLang.UA)
         {
             Tag = Types.Typ
         });
     }
     foreach (string s in new string[] { "ДОПУСТИТЬ К ЗАЩИТА", "РЕКОМЕНДОВАТЬ К ЗАЩИТА", "ДОЛЖНОСТЬ", "ЦЕЛЬ РАБОТЫ", "НА ПРАВАХ РУКОПИСИ", "ПО ИЗДАНИЮ", "ПОЛУЧЕНО" })
     {
         m_Termins.Add(new Pullenti.Ner.Core.Termin(s)
         {
             Tag = Types.Dust
         });
     }
     foreach (string s in new string[] { "ДОПУСТИТИ ДО ЗАХИСТУ", "РЕКОМЕНДУВАТИ ДО ЗАХИСТ", "ПОСАДА", "МЕТА РОБОТИ", "НА ПРАВАХ РУКОПИСУ", "ПО ВИДАННЮ", "ОТРИМАНО" })
     {
         m_Termins.Add(new Pullenti.Ner.Core.Termin(s, Pullenti.Morph.MorphLang.UA)
         {
             Tag = Types.Dust
         });
     }
     foreach (string s in new string[] { "УТВЕРЖДАТЬ", "СОГЛАСЕН", "СТВЕРДЖУВАТИ", "ЗГОДЕН" })
     {
         m_Termins.Add(new Pullenti.Ner.Core.Termin(s)
         {
             Tag = Types.Adopt
         });
     }
     foreach (string s in new string[] { "НАУЧНЫЙ РУКОВОДИТЕЛЬ", "РУКОВОДИТЕЛЬ РАБОТА", "НАУКОВИЙ КЕРІВНИК", "КЕРІВНИК РОБОТА" })
     {
         m_Termins.Add(new Pullenti.Ner.Core.Termin(s)
         {
             Tag = Types.Boss
         });
     }
     foreach (string s in new string[] { "НАУЧНЫЙ КОНСУЛЬТАНТ", "КОНСУЛЬТАНТ", "НАУКОВИЙ КОНСУЛЬТАНТ" })
     {
         m_Termins.Add(new Pullenti.Ner.Core.Termin(s)
         {
             Tag = Types.Consultant
         });
     }
     foreach (string s in new string[] { "РЕДАКТОР", "РЕДАКТОРСКАЯ ГРУППА", "РЕЦЕНЗЕНТ", "РЕДАКТОРСЬКА ГРУПА" })
     {
         m_Termins.Add(new Pullenti.Ner.Core.Termin(s)
         {
             Tag = Types.Editor
         });
     }
     foreach (string s in new string[] { "ОФИЦИАЛЬНЫЙ ОППОНЕНТ", "ОППОНЕНТ", "ОФІЦІЙНИЙ ОПОНЕНТ" })
     {
         m_Termins.Add(new Pullenti.Ner.Core.Termin(s)
         {
             Tag = Types.Opponent
         });
     }
     foreach (string s in new string[] { "ИСПОЛНИТЕЛЬ", "ОТВЕТСТВЕННЫЙ ИСПОЛНИТЕЛЬ", "АВТОР", "ДИПЛОМНИК", "КОЛЛЕКТТИВ ИСПОЛНИТЕЛЕЙ", "ВЫПОЛНИТЬ", "ИСПОЛНИТЬ" })
     {
         m_Termins.Add(new Pullenti.Ner.Core.Termin(s)
         {
             Tag = Types.Worker
         });
     }
     foreach (string s in new string[] { "ВИКОНАВЕЦЬ", "ВІДПОВІДАЛЬНИЙ ВИКОНАВЕЦЬ", "АВТОР", "ДИПЛОМНИК", "КОЛЛЕКТТИВ ВИКОНАВЦІВ", "ВИКОНАТИ", "ВИКОНАТИ" })
     {
         m_Termins.Add(new Pullenti.Ner.Core.Termin(s, Pullenti.Morph.MorphLang.UA)
         {
             Tag = Types.Worker
         });
     }
     foreach (string s in new string[] { "КЛЮЧЕВЫЕ СЛОВА", "KEYWORDS", "КЛЮЧОВІ СЛОВА" })
     {
         m_Termins.Add(new Pullenti.Ner.Core.Termin(s)
         {
             Tag = Types.Keywords
         });
     }
 }
コード例 #14
0
 public static void Initialize()
 {
     m_StdTails    = new Pullenti.Ner.Core.TerminCollection();
     m_StdNames    = new Pullenti.Ner.Core.TerminCollection();
     m_VervotWords = new Pullenti.Ner.Core.TerminCollection();
     Pullenti.Ner.Core.Termin t;
     t = new Pullenti.Ner.Core.Termin("INCORPORATED");
     t.AddAbridge("INC.");
     m_StdTails.Add(t);
     t = new Pullenti.Ner.Core.Termin("CORPORATION");
     t.AddAbridge("CORP.");
     m_StdTails.Add(t);
     t = new Pullenti.Ner.Core.Termin("LIMITED");
     t.AddAbridge("LTD.");
     m_StdTails.Add(t);
     t = new Pullenti.Ner.Core.Termin("AG");
     m_StdTails.Add(t);
     t = new Pullenti.Ner.Core.Termin("GMBH");
     m_StdTails.Add(t);
     foreach (string s in new string[] { "ЗАКАЗЧИК", "ИСПОЛНИТЕЛЬ", "РАЗРАБОТЧИК", "БЕНЕФИЦИАР", "ПОЛУЧАТЕЛЬ", "ОТПРАВИТЕЛЬ", "ИЗГОТОВИТЕЛЬ", "ПРОИЗВОДИТЕЛЬ", "ПОСТАВЩИК", "АБОНЕНТ", "КЛИЕНТ", "ВКЛАДЧИК", "СУБЪЕКТ", "ПРОДАВЕЦ", "ПОКУПАТЕЛЬ", "АРЕНДОДАТЕЛЬ", "АРЕНДАТОР", "СУБАРЕНДАТОР", "НАЙМОДАТЕЛЬ", "НАНИМАТЕЛЬ", "АГЕНТ", "ПРИНЦИПАЛ", "ПРОДАВЕЦ", "ПОСТАВЩИК", "ПОДРЯДЧИК", "СУБПОДРЯДЧИК" })
     {
         m_StdTails.Add(new Pullenti.Ner.Core.Termin(s)
         {
             Tag = s
         });
     }
     foreach (string s in new string[] { "ЗАМОВНИК", "ВИКОНАВЕЦЬ", "РОЗРОБНИК", "БЕНЕФІЦІАР", "ОДЕРЖУВАЧ", "ВІДПРАВНИК", "ВИРОБНИК", "ВИРОБНИК", "ПОСТАЧАЛЬНИК", "АБОНЕНТ", "КЛІЄНТ", "ВКЛАДНИК", "СУБ'ЄКТ", "ПРОДАВЕЦЬ", "ПОКУПЕЦЬ", "ОРЕНДОДАВЕЦЬ", "ОРЕНДАР", "СУБОРЕНДАР", "НАЙМОДАВЕЦЬ", "НАЙМАЧ", "АГЕНТ", "ПРИНЦИПАЛ", "ПРОДАВЕЦЬ", "ПОСТАЧАЛЬНИК", "ПІДРЯДНИК", "СУБПІДРЯДНИК" })
     {
         m_StdTails.Add(new Pullenti.Ner.Core.Termin(s, Pullenti.Morph.MorphLang.UA)
         {
             Tag = s
         });
     }
     t = new Pullenti.Ner.Core.Termin("РАЗРАБОТКА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ");
     t.AddAbridge("РАЗРАБОТКИ ПО");
     m_StdNames.Add(t);
     foreach (string s in new string[] { "СПЕЦИАЛЬНОСТЬ", "ДИАГНОЗ" })
     {
         m_VervotWords.Add(new Pullenti.Ner.Core.Termin(s));
     }
     foreach (string s in new string[] { "СПЕЦІАЛЬНІСТЬ", "ДІАГНОЗ" })
     {
         m_VervotWords.Add(new Pullenti.Ner.Core.Termin(s, Pullenti.Morph.MorphLang.UA));
     }
     m_StdNouns = new Pullenti.Ner.Core.TerminCollection();
     for (int k = 0; k < 2; k++)
     {
         string name = (k == 0 ? "NameNouns_ru.dat" : "NameNouns_ua.dat");
         byte[] dat  = ResourceHelper.GetBytes(name);
         if (dat == null)
         {
             throw new Exception(string.Format("Can't file resource file {0} in Organization analyzer", name));
         }
         string str = Encoding.UTF8.GetString(OrgItemTypeToken.Deflate(dat));
         foreach (string line0 in str.Split('\n'))
         {
             string line = line0.Trim();
             if (string.IsNullOrEmpty(line))
             {
                 continue;
             }
             if (k == 0)
             {
                 m_StdNouns.Add(new Pullenti.Ner.Core.Termin(line));
             }
             else
             {
                 m_StdNouns.Add(new Pullenti.Ner.Core.Termin(line)
                 {
                     Lang = Pullenti.Morph.MorphLang.UA
                 });
             }
         }
     }
 }
コード例 #15
0
        public static BlockLine Create(Pullenti.Ner.Token t, Pullenti.Ner.Core.TerminCollection names)
        {
            if (t == null)
            {
                return(null);
            }
            BlockLine res = new BlockLine(t, t);

            for (Pullenti.Ner.Token tt = t; tt != null; tt = tt.Next)
            {
                if (tt != t && tt.IsNewlineBefore)
                {
                    break;
                }
                else
                {
                    res.EndToken = tt;
                }
            }
            int nums = 0;

            while (t != null && t.Next != null && t.EndChar <= res.EndChar)
            {
                if (t is Pullenti.Ner.NumberToken)
                {
                }
                else
                {
                    Pullenti.Ner.NumberToken rom = Pullenti.Ner.Core.NumberHelper.TryParseRoman(t);
                    if (rom != null && rom.EndToken.Next != null)
                    {
                        t = rom.EndToken;
                    }
                    else
                    {
                        break;
                    }
                }
                if (t.Next.IsChar('.'))
                {
                }
                else if ((t.Next is Pullenti.Ner.TextToken) && !t.Next.Chars.IsAllLower)
                {
                }
                else
                {
                    break;
                }
                res.NumberEnd = t;
                t             = t.Next;
                if (t.IsChar('.') && t.Next != null)
                {
                    res.NumberEnd = t;
                    t             = t.Next;
                }
                if (t.IsNewlineBefore)
                {
                    return(res);
                }
                nums++;
            }
            Pullenti.Ner.Core.TerminToken tok = m_Ontology.TryParse(t, Pullenti.Ner.Core.TerminParseAttr.No);
            if (tok == null)
            {
                Pullenti.Ner.Core.NounPhraseToken npt1 = Pullenti.Ner.Core.NounPhraseHelper.TryParse(t, Pullenti.Ner.Core.NounPhraseParseAttr.No, 0, null);
                if (npt1 != null && npt1.EndToken != npt1.BeginToken)
                {
                    tok = m_Ontology.TryParse(npt1.Noun.BeginToken, Pullenti.Ner.Core.TerminParseAttr.No);
                }
            }
            if (tok != null)
            {
                if (t.Previous != null && t.Previous.IsChar(':'))
                {
                    tok = null;
                }
            }
            if (tok != null)
            {
                BlkTyps typ = (BlkTyps)tok.Termin.Tag;
                if (typ == BlkTyps.Conslusion)
                {
                    if (t.IsNewlineAfter)
                    {
                    }
                    else if (t.Next != null && t.Next.Morph.Class.IsPreposition && t.Next.Next != null)
                    {
                        Pullenti.Ner.Core.TerminToken tok2 = m_Ontology.TryParse(t.Next.Next, Pullenti.Ner.Core.TerminParseAttr.No);
                        if (tok2 != null && ((BlkTyps)tok2.Termin.Tag) == BlkTyps.Chapter)
                        {
                        }
                        else
                        {
                            tok = null;
                        }
                    }
                    else
                    {
                        tok = null;
                    }
                }
                if (t.Kit.BaseLanguage != t.Morph.Language)
                {
                    tok = null;
                }
                if (typ == BlkTyps.Index && !t.IsValue("ОГЛАВЛЕНИЕ", null))
                {
                    if (!t.IsNewlineAfter && t.Next != null)
                    {
                        Pullenti.Ner.Core.NounPhraseToken npt = Pullenti.Ner.Core.NounPhraseHelper.TryParse(t.Next, Pullenti.Ner.Core.NounPhraseParseAttr.No, 0, null);
                        if (npt != null && npt.IsNewlineAfter && npt.Morph.Case.IsGenitive)
                        {
                            tok = null;
                        }
                        else if (npt == null)
                        {
                            tok = null;
                        }
                    }
                }
                if ((typ == BlkTyps.Intro && tok != null && !tok.IsNewlineAfter) && t.IsValue("ВВЕДЕНИЕ", null))
                {
                    Pullenti.Ner.Core.NounPhraseToken npt = Pullenti.Ner.Core.NounPhraseHelper.TryParse(t.Next, Pullenti.Ner.Core.NounPhraseParseAttr.No, 0, null);
                    if (npt != null && npt.Morph.Case.IsGenitive)
                    {
                        tok = null;
                    }
                }
                if (tok != null)
                {
                    if (res.NumberEnd == null)
                    {
                        res.NumberEnd = tok.EndToken;
                        if (res.NumberEnd.EndChar > res.EndChar)
                        {
                            res.EndToken = res.NumberEnd;
                        }
                    }
                    res.Typ = typ;
                    t       = tok.EndToken;
                    if (t.Next != null && t.Next.IsCharOf(":."))
                    {
                        t            = t.Next;
                        res.EndToken = t;
                    }
                    if (t.IsNewlineAfter || t.Next == null)
                    {
                        return(res);
                    }
                    t = t.Next;
                }
            }
            if (t.IsChar('§') && (t.Next is Pullenti.Ner.NumberToken))
            {
                res.Typ       = BlkTyps.Chapter;
                res.NumberEnd = t;
                t             = t.Next;
            }
            if (names != null)
            {
                Pullenti.Ner.Core.TerminToken tok2 = names.TryParse(t, Pullenti.Ner.Core.TerminParseAttr.No);
                if (tok2 != null && tok2.EndToken.IsNewlineAfter)
                {
                    res.EndToken    = tok2.EndToken;
                    res.IsExistName = true;
                    if (res.Typ == BlkTyps.Undefined)
                    {
                        BlockLine li2 = Create((res.NumberEnd == null ? null : res.NumberEnd.Next), null);
                        if (li2 != null && ((li2.Typ == BlkTyps.Literature || li2.Typ == BlkTyps.Intro || li2.Typ == BlkTyps.Conslusion)))
                        {
                            res.Typ = li2.Typ;
                        }
                        else
                        {
                            res.Typ = BlkTyps.Chapter;
                        }
                    }
                    return(res);
                }
            }
            Pullenti.Ner.Token t1 = res.EndToken;
            if ((((t1 is Pullenti.Ner.NumberToken) || t1.IsChar('.'))) && t1.Previous != null)
            {
                t1 = t1.Previous;
                if (t1.IsChar('.'))
                {
                    res.HasContentItemTail = true;
                    for (; t1 != null && t1.BeginChar > res.BeginChar; t1 = t1.Previous)
                    {
                        if (!t1.IsChar('.'))
                        {
                            break;
                        }
                    }
                }
            }
            res.IsAllUpper = true;
            for (; t != null && t.EndChar <= t1.EndChar; t = t.Next)
            {
                if (!(t is Pullenti.Ner.TextToken) || !t.Chars.IsLetter)
                {
                    res.NotWords++;
                }
                else
                {
                    Pullenti.Morph.MorphClass mc = t.GetMorphClassInDictionary();
                    if (mc.IsUndefined)
                    {
                        res.NotWords++;
                    }
                    else if (t.LengthChar > 2)
                    {
                        res.Words++;
                    }
                    if (!t.Chars.IsAllUpper)
                    {
                        res.IsAllUpper = false;
                    }
                    if ((t as Pullenti.Ner.TextToken).IsPureVerb)
                    {
                        if (!(t as Pullenti.Ner.TextToken).Term.EndsWith("ING"))
                        {
                            res.HasVerb = true;
                        }
                    }
                }
            }
            if (res.Typ == BlkTyps.Undefined)
            {
                Pullenti.Ner.Core.NounPhraseToken npt = Pullenti.Ner.Core.NounPhraseHelper.TryParse((res.NumberEnd == null ? res.BeginToken : res.NumberEnd.Next), Pullenti.Ner.Core.NounPhraseParseAttr.No, 0, null);
                if (npt != null)
                {
                    if (npt.Noun.IsValue("ХАРАКТЕРИСТИКА", null) || npt.Noun.IsValue("СОДЕРЖАНИЕ", "ЗМІСТ"))
                    {
                        bool ok = true;
                        for (Pullenti.Ner.Token tt = npt.EndToken.Next; tt != null && tt.EndChar <= res.EndChar; tt = tt.Next)
                        {
                            if (tt.IsChar('.'))
                            {
                                continue;
                            }
                            Pullenti.Ner.Core.NounPhraseToken npt2 = Pullenti.Ner.Core.NounPhraseHelper.TryParse(tt, Pullenti.Ner.Core.NounPhraseParseAttr.No, 0, null);
                            if (npt2 == null || !npt2.Morph.Case.IsGenitive)
                            {
                                ok = false;
                                break;
                            }
                            tt = npt2.EndToken;
                            if (tt.EndChar > res.EndChar)
                            {
                                res.EndToken = tt;
                                if (!tt.IsNewlineAfter)
                                {
                                    for (; res.EndToken.Next != null; res.EndToken = res.EndToken.Next)
                                    {
                                        if (res.EndToken.IsNewlineAfter)
                                        {
                                            break;
                                        }
                                    }
                                }
                            }
                        }
                        if (ok)
                        {
                            res.Typ         = BlkTyps.Intro;
                            res.IsExistName = true;
                        }
                    }
                    else if (npt.Noun.IsValue("ВЫВОД", "ВИСНОВОК") || npt.Noun.IsValue("РЕЗУЛЬТАТ", "ДОСЛІДЖЕННЯ"))
                    {
                        bool ok = true;
                        for (Pullenti.Ner.Token tt = npt.EndToken.Next; tt != null && tt.EndChar <= res.EndChar; tt = tt.Next)
                        {
                            if (tt.IsCharOf(",.") || tt.IsAnd)
                            {
                                continue;
                            }
                            Pullenti.Ner.Core.NounPhraseToken npt1 = Pullenti.Ner.Core.NounPhraseHelper.TryParse(tt, Pullenti.Ner.Core.NounPhraseParseAttr.No, 0, null);
                            if (npt1 != null)
                            {
                                if (npt1.Noun.IsValue("РЕЗУЛЬТАТ", "ДОСЛІДЖЕННЯ") || npt1.Noun.IsValue("РЕКОМЕНДАЦИЯ", "РЕКОМЕНДАЦІЯ") || npt1.Noun.IsValue("ИССЛЕДОВАНИЕ", "ДОСЛІДЖЕННЯ"))
                                {
                                    tt = npt1.EndToken;
                                    if (tt.EndChar > res.EndChar)
                                    {
                                        res.EndToken = tt;
                                        if (!tt.IsNewlineAfter)
                                        {
                                            for (; res.EndToken.Next != null; res.EndToken = res.EndToken.Next)
                                            {
                                                if (res.EndToken.IsNewlineAfter)
                                                {
                                                    break;
                                                }
                                            }
                                        }
                                    }
                                    continue;
                                }
                            }
                            ok = false;
                            break;
                        }
                        if (ok)
                        {
                            res.Typ         = BlkTyps.Conslusion;
                            res.IsExistName = true;
                        }
                    }
                    if (res.Typ == BlkTyps.Undefined && npt != null && npt.EndChar <= res.EndChar)
                    {
                        bool ok   = false;
                        int  publ = 0;
                        if (_isPub(npt))
                        {
                            ok   = true;
                            publ = 1;
                        }
                        else if ((npt.Noun.IsValue("СПИСОК", null) || npt.Noun.IsValue("УКАЗАТЕЛЬ", "ПОКАЖЧИК") || npt.Noun.IsValue("ПОЛОЖЕНИЕ", "ПОЛОЖЕННЯ")) || npt.Noun.IsValue("ВЫВОД", "ВИСНОВОК") || npt.Noun.IsValue("РЕЗУЛЬТАТ", "ДОСЛІДЖЕННЯ"))
                        {
                            if (npt.EndChar == res.EndChar)
                            {
                                return(null);
                            }
                            ok = true;
                        }
                        if (ok)
                        {
                            if (npt.BeginToken == npt.EndToken && npt.Noun.IsValue("СПИСОК", null) && npt.EndChar == res.EndChar)
                            {
                                ok = false;
                            }
                            for (Pullenti.Ner.Token tt = npt.EndToken.Next; tt != null && tt.EndChar <= res.EndChar; tt = tt.Next)
                            {
                                if (tt.IsCharOf(",.:") || tt.IsAnd || tt.Morph.Class.IsPreposition)
                                {
                                    continue;
                                }
                                if (tt.IsValue("ОТРАЖЕНЫ", "ВІДОБРАЖЕНІ"))
                                {
                                    continue;
                                }
                                npt = Pullenti.Ner.Core.NounPhraseHelper.TryParse(tt, Pullenti.Ner.Core.NounPhraseParseAttr.No, 0, null);
                                if (npt == null)
                                {
                                    ok = false;
                                    break;
                                }
                                if (((_isPub(npt) || npt.Noun.IsValue("РАБОТА", "РОБОТА") || npt.Noun.IsValue("ИССЛЕДОВАНИЕ", "ДОСЛІДЖЕННЯ")) || npt.Noun.IsValue("АВТОР", null) || npt.Noun.IsValue("ТРУД", "ПРАЦЯ")) || npt.Noun.IsValue("ТЕМА", null) || npt.Noun.IsValue("ДИССЕРТАЦИЯ", "ДИСЕРТАЦІЯ"))
                                {
                                    tt = npt.EndToken;
                                    if (_isPub(npt))
                                    {
                                        publ++;
                                    }
                                    if (tt.EndChar > res.EndChar)
                                    {
                                        res.EndToken = tt;
                                        if (!tt.IsNewlineAfter)
                                        {
                                            for (; res.EndToken.Next != null; res.EndToken = res.EndToken.Next)
                                            {
                                                if (res.EndToken.IsNewlineAfter)
                                                {
                                                    break;
                                                }
                                            }
                                        }
                                    }
                                    continue;
                                }
                                ok = false;
                                break;
                            }
                            if (ok)
                            {
                                res.Typ         = BlkTyps.Literature;
                                res.IsExistName = true;
                                if (publ == 0 && (res.EndChar < (((res.Kit.Sofa.Text.Length * 2) / 3))))
                                {
                                    if (res.NumberEnd != null)
                                    {
                                        res.Typ = BlkTyps.Misc;
                                    }
                                    else
                                    {
                                        res.Typ = BlkTyps.Undefined;
                                    }
                                }
                            }
                        }
                    }
                }
            }
            return(res);
        }
コード例 #16
0
        public static List <BlockTitleToken> TryAttachList(Pullenti.Ner.Token t)
        {
            BlockTitleToken        content = null;
            BlockTitleToken        intro   = null;
            List <BlockTitleToken> lits    = null;

            for (Pullenti.Ner.Token tt = t; tt != null; tt = tt.Next)
            {
                if (tt.IsNewlineBefore)
                {
                    BlockTitleToken btt = TryAttach(tt, false, null);
                    if (btt == null)
                    {
                        continue;
                    }
                    if (btt.Typ == BlkTyps.Index)
                    {
                        content = btt;
                        break;
                    }
                    if (btt.Typ == BlkTyps.Intro)
                    {
                        Pullenti.Ner.Token tt2 = btt.EndToken.Next;
                        for (int k = 0; k < 5; k++)
                        {
                            BlockLine li = BlockLine.Create(tt2, null);
                            if (li == null)
                            {
                                break;
                            }
                            if (li.HasContentItemTail || li.Typ == BlkTyps.IndexItem)
                            {
                                content = btt;
                                break;
                            }
                            if (li.HasVerb)
                            {
                                break;
                            }
                            if (li.Typ != BlkTyps.Undefined)
                            {
                                if ((li.BeginChar - btt.EndChar) < 400)
                                {
                                    content = btt;
                                    break;
                                }
                            }
                            tt2 = li.EndToken.Next;
                        }
                        if (content == null)
                        {
                            intro = btt;
                        }
                        break;
                    }
                    if (btt.Typ == BlkTyps.Literature)
                    {
                        if (lits == null)
                        {
                            lits = new List <BlockTitleToken>();
                        }
                        lits.Add(btt);
                    }
                }
            }
            if (content == null && intro == null && ((lits == null || lits.Count != 1)))
            {
                return(null);
            }
            List <BlockTitleToken> res = new List <BlockTitleToken>();

            Pullenti.Ner.Core.TerminCollection chapterNames = new Pullenti.Ner.Core.TerminCollection();
            Pullenti.Ner.Token t0 = null;
            if (content != null)
            {
                res.Add(content);
                int cou = 0;
                int err = 0;
                for (Pullenti.Ner.Token tt = content.EndToken.Next; tt != null; tt = tt.Next)
                {
                    if (!tt.IsNewlineBefore)
                    {
                        continue;
                    }
                    BlockLine li = BlockLine.Create(tt, null);
                    if (li == null)
                    {
                        break;
                    }
                    if (li.HasVerb)
                    {
                        if (li.EndToken.IsChar('.'))
                        {
                            break;
                        }
                        if (li.LengthChar > 100)
                        {
                            break;
                        }
                    }
                    BlockTitleToken btt = TryAttach(tt, true, null);
                    if (btt == null)
                    {
                        continue;
                    }
                    err = 0;
                    if (btt.Typ == BlkTyps.Intro)
                    {
                        if (content.Typ == BlkTyps.Intro || cou > 2)
                        {
                            break;
                        }
                    }
                    cou++;
                    tt = (content.EndToken = btt.EndToken);
                    if (btt.Value != null)
                    {
                        chapterNames.AddString(btt.Value, null, null, false);
                    }
                }
                content.Typ = BlkTyps.Index;
                t0          = content.EndToken.Next;
            }
            else if (intro != null)
            {
                t0 = intro.BeginToken;
            }
            else if (lits != null)
            {
                t0 = t;
            }
            else
            {
                return(null);
            }
            bool first = true;

            for (Pullenti.Ner.Token tt = t0; tt != null; tt = tt.Next)
            {
                if (!tt.IsNewlineBefore)
                {
                    continue;
                }
                if (tt.IsValue("СЛАБОЕ", null))
                {
                }
                BlockTitleToken btt = TryAttach(tt, false, chapterNames);
                if (btt == null)
                {
                    continue;
                }
                if (res.Count == 104)
                {
                }
                tt = btt.EndToken;
                if (content != null && btt.Typ == BlkTyps.Index)
                {
                    continue;
                }
                if (res.Count > 0 && res[res.Count - 1].Typ == BlkTyps.Literature)
                {
                    if (btt.Typ != BlkTyps.Appendix && btt.Typ != BlkTyps.Misc && btt.Typ != BlkTyps.Literature)
                    {
                        if (btt.Typ == BlkTyps.Chapter && (res[res.Count - 1].EndChar < ((tt.Kit.Sofa.Text.Length * 3) / 4)))
                        {
                        }
                        else
                        {
                            continue;
                        }
                    }
                }
                if (first)
                {
                    if ((tt.BeginChar - t0.BeginChar) > 300)
                    {
                        BlockTitleToken btt0 = new BlockTitleToken(t0, (t0.Previous == null ? t0 : t0.Previous));
                        btt0.Typ   = BlkTyps.Chapter;
                        btt0.Value = "Похоже на начало";
                        res.Add(btt0);
                    }
                }
                res.Add(btt);
                tt    = btt.EndToken;
                first = false;
            }
            for (int i = 0; i < (res.Count - 1); i++)
            {
                if (res[i].Typ == BlkTyps.Literature && res[i + 1].Typ == res[i].Typ)
                {
                    res.RemoveAt(i + 1);
                    i--;
                }
            }
            return(res);
        }
コード例 #17
0
        public static BlockTitleToken TryAttach(Pullenti.Ner.Token t, bool isContentItem = false, Pullenti.Ner.Core.TerminCollection names = null)
        {
            if (t == null)
            {
                return(null);
            }
            if (!t.IsNewlineBefore)
            {
                return(null);
            }
            if (t.Chars.IsAllLower)
            {
                return(null);
            }
            BlockLine li = BlockLine.Create(t, names);

            if (li == null)
            {
                return(null);
            }
            if (li.Words == 0 && li.Typ == BlkTyps.Undefined)
            {
                return(null);
            }
            if (li.Typ == BlkTyps.Index)
            {
            }
            if (li.IsExistName)
            {
                return new BlockTitleToken(t, li.EndToken)
                       {
                           Typ = li.Typ
                       }
            }
            ;
            if (li.EndToken == li.NumberEnd || ((li.EndToken.IsCharOf(".:") && li.EndToken.Previous == li.NumberEnd)))
            {
                BlockTitleToken res2 = new BlockTitleToken(t, li.EndToken)
                {
                    Typ = li.Typ
                };

                if (li.Typ == BlkTyps.Chapter || li.Typ == BlkTyps.Appendix)
                {
                    BlockLine li2 = BlockLine.Create(li.EndToken.Next, names);
                    if ((li2 != null && li2.Typ == BlkTyps.Undefined && li2.IsAllUpper) && li2.Words > 0)
                    {
                        res2.EndToken = li2.EndToken;
                        for (Pullenti.Ner.Token tt = res2.EndToken.Next; tt != null; tt = tt.Next)
                        {
                            li2 = BlockLine.Create(tt, names);
                            if (li2 == null)
                            {
                                break;
                            }
                            if (li2.Typ != BlkTyps.Undefined || !li2.IsAllUpper || li2.Words == 0)
                            {
                                break;
                            }
                            tt = (res2.EndToken = li2.EndToken);
                        }
                    }
                }
                return(res2);
            }
            if (li.NumberEnd == null)
            {
                return(null);
            }
            BlockTitleToken res = new BlockTitleToken(t, li.EndToken)
            {
                Typ = li.Typ
            };

            if (res.Typ == BlkTyps.Undefined)
            {
                if (li.Words < 1)
                {
                    return(null);
                }
                if (li.HasVerb)
                {
                    return(null);
                }
                if (!isContentItem)
                {
                    if (!li.IsAllUpper || li.NotWords > (li.Words / 2))
                    {
                        return(null);
                    }
                }
                res.Typ = BlkTyps.Chapter;
                if ((li.NumberEnd.EndChar - t.BeginChar) == 7 && li.NumberEnd.Next != null && li.NumberEnd.Next.IsHiphen)
                {
                    res.Typ = BlkTyps.Undefined;
                }
            }
            if (li.HasContentItemTail && isContentItem)
            {
                res.Typ = BlkTyps.IndexItem;
            }
            if (res.Typ == BlkTyps.Chapter || res.Typ == BlkTyps.Appendix)
            {
                if (li.HasVerb)
                {
                    return(null);
                }
                if (li.NotWords > li.Words && !isContentItem)
                {
                    return(null);
                }
                for (t = li.EndToken.Next; t != null; t = t.Next)
                {
                    BlockLine li2 = BlockLine.Create(t, names);
                    if (li2 == null)
                    {
                        break;
                    }
                    if (li2.HasVerb || (li2.Words < 1))
                    {
                        break;
                    }
                    if (!li2.IsAllUpper && !isContentItem)
                    {
                        break;
                    }
                    if (li2.Typ != BlkTyps.Undefined || li2.NumberEnd != null)
                    {
                        break;
                    }
                    t = (res.EndToken = li2.EndToken);
                    if (isContentItem && li2.HasContentItemTail)
                    {
                        res.Typ = BlkTyps.IndexItem;
                        break;
                    }
                }
            }
            for (Pullenti.Ner.Token tt = res.EndToken; tt != null && tt.BeginChar > li.NumberEnd.EndChar; tt = tt.Previous)
            {
                if ((tt is Pullenti.Ner.TextToken) && tt.Chars.IsLetter)
                {
                    res.Value = Pullenti.Ner.Core.MiscHelper.GetTextValue(li.NumberEnd.Next, tt, Pullenti.Ner.Core.GetTextAttr.No);
                    break;
                }
            }
            if ((res.Typ == BlkTyps.Index || res.Typ == BlkTyps.Intro || res.Typ == BlkTyps.Conslusion) || res.Typ == BlkTyps.Literature)
            {
                if (res.Value != null && res.Value.Length > 100)
                {
                    return(null);
                }
                if (li.Words < li.NotWords)
                {
                    return(null);
                }
            }
            return(res);
        }
    }
コード例 #18
0
 public static void Initialize()
 {
     if (m_Termins != null)
     {
         return;
     }
     m_Termins = new Pullenti.Ner.Core.TerminCollection();
     Pullenti.Ner.Core.Termin tt;
     tt = new Pullenti.Ner.Core.Termin("ТЕКСТ")
     {
         Tag = BookLinkTyp.NameTail
     };
     m_Termins.Add(tt);
     tt = new Pullenti.Ner.Core.Termin("ЭЛЕКТРОННЫЙ РЕСУРС")
     {
         Tag = BookLinkTyp.ElectronRes
     };
     tt.AddVariant("ЕЛЕКТРОННИЙ РЕСУРС", false);
     tt.AddVariant("MODE OF ACCESS", false);
     tt.AddVariant("URL", false);
     tt.AddVariant("URLS", false);
     tt.AddVariant("ELECTRONIC RESOURCE", false);
     tt.AddVariant("ON LINE", false);
     tt.AddVariant("ONLINE", false);
     m_Termins.Add(tt);
     tt = new Pullenti.Ner.Core.Termin("РЕЖИМ ДОСТУПА")
     {
         Tag = BookLinkTyp.Misc
     };
     tt.AddVariant("РЕЖИМ ДОСТУПУ", false);
     tt.AddVariant("AVAILABLE", false);
     m_Termins.Add(tt);
     tt = new Pullenti.Ner.Core.Termin("МОНОГРАФИЯ")
     {
         Tag = BookLinkTyp.Type
     };
     tt.AddVariant("МОНОГРАФІЯ", false);
     m_Termins.Add(tt);
     tt = new Pullenti.Ner.Core.Termin("УЧЕБНОЕ ПОСОБИЕ")
     {
         Tag = BookLinkTyp.Type
     };
     tt.AddAbridge("УЧ.ПОСОБИЕ");
     tt.AddAbridge("УЧЕБ.");
     tt.AddAbridge("УЧЕБН.");
     tt.AddVariant("УЧЕБНИК", false);
     tt.AddVariant("ПОСОБИЕ", false);
     m_Termins.Add(tt);
     tt = new Pullenti.Ner.Core.Termin("НАВЧАЛЬНИЙ ПОСІБНИК")
     {
         Tag = BookLinkTyp.Type, Lang = Pullenti.Morph.MorphLang.UA
     };
     tt.AddAbridge("НАВЧ.ПОСІБНИК");
     tt.AddAbridge("НАВЧ.ПОСІБ");
     tt.AddVariant("ПІДРУЧНИК", false);
     tt.AddVariant("ПІДРУЧ", false);
     m_Termins.Add(tt);
     tt = new Pullenti.Ner.Core.Termin("АВТОРЕФЕРАТ")
     {
         Tag = BookLinkTyp.Type
     };
     tt.AddAbridge("АВТОРЕФ.");
     m_Termins.Add(tt);
     tt = new Pullenti.Ner.Core.Termin("ДИССЕРТАЦИЯ")
     {
         Tag = BookLinkTyp.Type
     };
     tt.AddVariant("ДИСС", false);
     tt.AddAbridge("ДИС.");
     tt.AddVariant("ДИСЕРТАЦІЯ", false);
     tt.AddVariant("DISSERTATION", false);
     m_Termins.Add(tt);
     tt = new Pullenti.Ner.Core.Termin("ДОКЛАД")
     {
         Tag = BookLinkTyp.Type
     };
     tt.AddVariant("ДОКЛ", false);
     tt.AddAbridge("ДОКЛ.");
     tt.AddVariant("ДОПОВІДЬ", false);
     m_Termins.Add(tt);
     tt = new Pullenti.Ner.Core.Termin("ПОД РЕДАКЦИЕЙ")
     {
         Tag = BookLinkTyp.Editors
     };
     tt.AddAbridge("ПОД РЕД");
     tt.AddAbridge("ОТВ.РЕД");
     tt.AddAbridge("ОТВ.РЕДАКТОР");
     tt.AddVariant("ПОД ОБЩЕЙ РЕДАКЦИЕЙ", false);
     tt.AddAbridge("ОТВ.РЕД");
     tt.AddAbridge("ОТВ.РЕДАКТОР");
     tt.AddAbridge("ПОД ОБЩ. РЕД");
     tt.AddAbridge("ПОД ОБЩЕЙ РЕД");
     m_Termins.Add(tt);
     tt = new Pullenti.Ner.Core.Termin("ПІД РЕДАКЦІЄЮ")
     {
         Tag = BookLinkTyp.Editors, Lang = Pullenti.Morph.MorphLang.UA
     };
     tt.AddAbridge("ПІД РЕД");
     tt.AddAbridge("ОТВ.РЕД");
     tt.AddAbridge("ВІД. РЕДАКТОР");
     tt.AddVariant("ЗА ЗАГ.РЕД", false);
     tt.AddAbridge("ВІДПОВІДАЛЬНИЙ РЕДАКТОР");
     m_Termins.Add(tt);
     tt = new Pullenti.Ner.Core.Termin("СОСТАВИТЕЛЬ")
     {
         Tag = BookLinkTyp.Sostavitel
     };
     tt.AddAbridge("СОСТ.");
     m_Termins.Add(tt);
     tt = new Pullenti.Ner.Core.Termin("УКЛАДАЧ")
     {
         Tag = BookLinkTyp.Sostavitel, Lang = Pullenti.Morph.MorphLang.UA
     };
     tt.AddAbridge("УКЛ.");
     m_Termins.Add(tt);
     foreach (string s in new string[] { "Политиздат", "Прогресс", "Мысль", "Просвещение", "Наука", "Физматлит", "Физматкнига", "Инфра-М", "Питер", "Интеллект", "Аспект пресс", "Аспект-пресс", "АСВ", "Радиотехника", "Радио и связь", "Лань", "Академия", "Академкнига", "URSS", "Академический проект", "БИНОМ", "БВХ", "Вильямс", "Владос", "Волтерс Клувер", "Wolters Kluwer", "Восток-Запад", "Высшая школа", "ГЕО", "Дашков и К", "Кнорус", "Когито-Центр", "КолосС", "Проспект", "РХД", "Статистика", "Финансы и статистика", "Флинта", "Юнити-дана" })
     {
         m_Termins.Add(new Pullenti.Ner.Core.Termin(s.ToUpper())
         {
             Tag = BookLinkTyp.Press
         });
     }
     tt = new Pullenti.Ner.Core.Termin("ИЗДАТЕЛЬСТВО")
     {
         Tag = BookLinkTyp.Press
     };
     tt.AddAbridge("ИЗ-ВО");
     tt.AddAbridge("ИЗД-ВО");
     tt.AddAbridge("ИЗДАТ-ВО");
     tt.AddVariant("ISSN", false);
     tt.AddVariant("PRESS", false);
     tt.AddVariant("VERLAG", false);
     tt.AddVariant("JOURNAL", false);
     m_Termins.Add(tt);
 }
コード例 #19
0
        public static UnitToken TryParse(Pullenti.Ner.Token t, Pullenti.Ner.Core.TerminCollection addUnits, UnitToken prev, bool parseUnknownUnits = false)
        {
            if (t == null)
            {
                return(null);
            }
            Pullenti.Ner.Token t0 = t;
            int  pow   = 1;
            bool isNeg = false;

            if ((t.IsCharOf("\\/") || t.IsValue("НА", null) || t.IsValue("OF", null)) || t.IsValue("PER", null))
            {
                isNeg = true;
                t     = t.Next;
            }
            else if (t.IsValue("В", null) && prev != null)
            {
                isNeg = true;
                t     = t.Next;
            }
            else if (MeasureHelper.IsMultChar(t))
            {
                t = t.Next;
            }
            Pullenti.Ner.TextToken tt = t as Pullenti.Ner.TextToken;
            if (tt == null)
            {
                return(null);
            }
            if (tt.Term == "КВ" || tt.Term == "КВАДР" || tt.IsValue("КВАДРАТНЫЙ", null))
            {
                pow = 2;
                tt  = tt.Next as Pullenti.Ner.TextToken;
                if (tt != null && tt.IsChar('.'))
                {
                    tt = tt.Next as Pullenti.Ner.TextToken;
                }
                if (tt == null)
                {
                    return(null);
                }
            }
            else if (tt.Term == "КУБ" || tt.Term == "КУБИЧ" || tt.IsValue("КУБИЧЕСКИЙ", null))
            {
                pow = 3;
                tt  = tt.Next as Pullenti.Ner.TextToken;
                if (tt != null && tt.IsChar('.'))
                {
                    tt = tt.Next as Pullenti.Ner.TextToken;
                }
                if (tt == null)
                {
                    return(null);
                }
            }
            else if (tt.Term == "µ")
            {
                UnitToken res = TryParse(tt.Next, addUnits, prev, false);
                if (res != null)
                {
                    foreach (Unit u in UnitsHelper.Units)
                    {
                        if (u.Factor == UnitsFactors.Micro && string.Compare("мк" + u.NameCyr, res.Unit.NameCyr, true) == 0)
                        {
                            res.Unit       = u;
                            res.BeginToken = tt;
                            res.Pow        = pow;
                            if (isNeg)
                            {
                                res.Pow = -pow;
                            }
                            return(res);
                        }
                    }
                }
            }
            List <Pullenti.Ner.Core.TerminToken> toks = UnitsHelper.Termins.TryParseAll(tt, Pullenti.Ner.Core.TerminParseAttr.No);

            if (toks != null)
            {
                if ((prev != null && tt == t0 && toks.Count == 1) && t.IsWhitespaceBefore)
                {
                    return(null);
                }
                if (toks[0].BeginToken == toks[0].EndToken && tt.Morph.Class.IsPreposition && (tt.WhitespacesAfterCount < 3))
                {
                    if (Pullenti.Ner.Core.NounPhraseHelper.TryParse(tt, Pullenti.Ner.Core.NounPhraseParseAttr.ParsePreposition, 0, null) != null)
                    {
                        return(null);
                    }
                    if (tt.Next is Pullenti.Ner.NumberToken)
                    {
                        if ((tt.Next as Pullenti.Ner.NumberToken).Typ != Pullenti.Ner.NumberSpellingType.Digit)
                        {
                            return(null);
                        }
                    }
                    UnitToken nex = TryParse(tt.Next, addUnits, null, false);
                    if (nex != null)
                    {
                        return(null);
                    }
                }
                if (toks[0].BeginToken == toks[0].EndToken && ((toks[0].BeginToken.IsValue("М", null) || toks[0].BeginToken.IsValue("M", null))) && toks[0].BeginToken.Chars.IsAllLower)
                {
                    if (prev != null && prev.Unit != null && prev.Unit.Kind == Pullenti.Ner.Measure.MeasureKind.Length)
                    {
                        UnitToken res = new UnitToken(t0, toks[0].EndToken)
                        {
                            Unit = UnitsHelper.uMinute
                        };
                        res.Pow = pow;
                        if (isNeg)
                        {
                            res.Pow = -pow;
                        }
                        return(res);
                    }
                }
                List <UnitToken> uts = new List <UnitToken>();
                foreach (Pullenti.Ner.Core.TerminToken tok in toks)
                {
                    UnitToken res = new UnitToken(t0, tok.EndToken)
                    {
                        Unit = tok.Termin.Tag as Unit
                    };
                    res.Pow = pow;
                    if (isNeg)
                    {
                        res.Pow = -pow;
                    }
                    if (res.Unit.BaseMultiplier == 1000000 && (t0 is Pullenti.Ner.TextToken) && char.IsLower((t0 as Pullenti.Ner.TextToken).GetSourceText()[0]))
                    {
                        foreach (Unit u in UnitsHelper.Units)
                        {
                            if (u.Factor == UnitsFactors.Milli && string.Compare(u.NameCyr, res.Unit.NameCyr, true) == 0)
                            {
                                res.Unit = u;
                                break;
                            }
                        }
                    }
                    res._correct();
                    res._checkDoubt();
                    uts.Add(res);
                }
                int       max  = 0;
                UnitToken best = null;
                foreach (UnitToken ut in uts)
                {
                    if (ut.Keyword != null)
                    {
                        if (ut.Keyword.BeginChar >= max)
                        {
                            max  = ut.Keyword.BeginChar;
                            best = ut;
                        }
                    }
                }
                if (best != null)
                {
                    return(best);
                }
                foreach (UnitToken ut in uts)
                {
                    if (!ut.IsDoubt)
                    {
                        return(ut);
                    }
                }
                return(uts[0]);
            }
            Pullenti.Ner.Token t1 = null;
            if (t.IsCharOf("º°"))
            {
                t1 = t;
            }
            else if ((t.IsChar('<') && t.Next != null && t.Next.Next != null) && t.Next.Next.IsChar('>') && ((t.Next.IsValue("О", null) || t.Next.IsValue("O", null) || (((t.Next is Pullenti.Ner.NumberToken) && (t.Next as Pullenti.Ner.NumberToken).Value == "0")))))
            {
                t1 = t.Next.Next;
            }
            if (t1 != null)
            {
                UnitToken res = new UnitToken(t0, t1)
                {
                    Unit = UnitsHelper.uGradus
                };
                res._checkDoubt();
                t = t1.Next;
                if (t != null && t.IsComma)
                {
                    t = t.Next;
                }
                if (t != null && t.IsValue("ПО", null))
                {
                    t = t.Next;
                }
                if (t is Pullenti.Ner.TextToken)
                {
                    string vv = (t as Pullenti.Ner.TextToken).Term;
                    if (vv == "C" || vv == "С" || vv.StartsWith("ЦЕЛЬС"))
                    {
                        res.Unit     = UnitsHelper.uGradusC;
                        res.IsDoubt  = false;
                        res.EndToken = t;
                    }
                    if (vv == "F" || vv.StartsWith("ФАР"))
                    {
                        res.Unit     = UnitsHelper.uGradusF;
                        res.IsDoubt  = false;
                        res.EndToken = t;
                    }
                }
                return(res);
            }
            if ((t is Pullenti.Ner.TextToken) && ((t.IsValue("ОС", null) || t.IsValue("OC", null))))
            {
                string str = t.GetSourceText();
                if (str == "оС" || str == "oC")
                {
                    UnitToken res = new UnitToken(t, t)
                    {
                        Unit = UnitsHelper.uGradusC, IsDoubt = false
                    };
                    return(res);
                }
            }
            if (t.IsChar('%'))
            {
                Pullenti.Ner.Token tt1 = t.Next;
                if (tt1 != null && tt1.IsChar('('))
                {
                    tt1 = tt1.Next;
                }
                if ((tt1 is Pullenti.Ner.TextToken) && (tt1 as Pullenti.Ner.TextToken).Term.StartsWith("ОБ"))
                {
                    UnitToken re = new UnitToken(t, tt1)
                    {
                        Unit = UnitsHelper.uAlco
                    };
                    if (re.EndToken.Next != null && re.EndToken.Next.IsChar('.'))
                    {
                        re.EndToken = re.EndToken.Next;
                    }
                    if (re.EndToken.Next != null && re.EndToken.Next.IsChar(')') && t.Next.IsChar('('))
                    {
                        re.EndToken = re.EndToken.Next;
                    }
                    return(re);
                }
                return(new UnitToken(t, t)
                {
                    Unit = UnitsHelper.uPercent
                });
            }
            if (addUnits != null)
            {
                Pullenti.Ner.Core.TerminToken tok = addUnits.TryParse(t, Pullenti.Ner.Core.TerminParseAttr.No);
                if (tok != null)
                {
                    UnitToken res = new UnitToken(t0, tok.EndToken)
                    {
                        ExtOnto = tok.Termin.Tag as Pullenti.Ner.Measure.UnitReferent
                    };
                    if (tok.EndToken.Next != null && tok.EndToken.Next.IsChar('.'))
                    {
                        tok.EndToken = tok.EndToken.Next;
                    }
                    res.Pow = pow;
                    if (isNeg)
                    {
                        res.Pow = -pow;
                    }
                    res._correct();
                    return(res);
                }
            }
            if (!parseUnknownUnits)
            {
                return(null);
            }
            if ((t.WhitespacesBeforeCount > 2 || !t.Chars.IsLetter || t.LengthChar > 5) || !(t is Pullenti.Ner.TextToken))
            {
                return(null);
            }
            if (Pullenti.Ner.Core.MiscHelper.CanBeStartOfSentence(t))
            {
                return(null);
            }
            t1 = t;
            if (t.Next != null && t.Next.IsChar('.'))
            {
                t1 = t;
            }
            bool ok = false;

            if (t1.Next == null || t1.WhitespacesAfterCount > 2)
            {
                ok = true;
            }
            else if (t1.Next.IsComma || t1.Next.IsCharOf("\\/") || t1.Next.IsTableControlChar)
            {
                ok = true;
            }
            else if (MeasureHelper.IsMultChar(t1.Next))
            {
                ok = true;
            }
            if (!ok)
            {
                return(null);
            }
            Pullenti.Morph.MorphClass mc = t.GetMorphClassInDictionary();
            if (mc.IsUndefined)
            {
            }
            else if (t.LengthChar > 7)
            {
                return(null);
            }
            UnitToken res1 = new UnitToken(t0, t1)
            {
                Pow = pow, IsDoubt = true
            };

            res1.UnknownName = (t as Pullenti.Ner.TextToken).GetSourceText();
            res1._correct();
            return(res1);
        }
コード例 #20
0
 public static void Initialize()
 {
     if (m_PhoneTermins != null)
     {
         return;
     }
     m_PhoneTermins = new Pullenti.Ner.Core.TerminCollection();
     Pullenti.Ner.Core.Termin t;
     t = new Pullenti.Ner.Core.Termin("ТЕЛЕФОН", Pullenti.Morph.MorphLang.RU, true);
     t.AddAbridge("ТЕЛ.");
     t.AddAbridge("TEL.");
     t.AddAbridge("Т-Н");
     t.AddAbridge("Т.");
     t.AddAbridge("T.");
     t.AddAbridge("TEL.EXT.");
     t.AddVariant("ТЛФ", false);
     t.AddVariant("ТЛФН", false);
     t.AddAbridge("Т/Ф");
     m_PhoneTermins.Add(t);
     t = new Pullenti.Ner.Core.Termin("МОБИЛЬНЫЙ", Pullenti.Morph.MorphLang.RU, true)
     {
         Tag2 = Pullenti.Ner.Phone.PhoneKind.Mobile
     };
     t.AddAbridge("МОБ.");
     t.AddAbridge("Т.М.");
     t.AddAbridge("М.Т.");
     t.AddAbridge("М.");
     m_PhoneTermins.Add(t);
     t = new Pullenti.Ner.Core.Termin("СОТОВЫЙ", Pullenti.Morph.MorphLang.RU, true)
     {
         Tag2 = Pullenti.Ner.Phone.PhoneKind.Mobile
     };
     t.AddAbridge("СОТ.");
     t.AddAbridge("CELL.");
     m_PhoneTermins.Add(t);
     t = new Pullenti.Ner.Core.Termin("РАБОЧИЙ", Pullenti.Morph.MorphLang.RU, true)
     {
         Tag2 = Pullenti.Ner.Phone.PhoneKind.Work
     };
     t.AddAbridge("РАБ.");
     t.AddAbridge("Т.Р.");
     t.AddAbridge("Р.Т.");
     m_PhoneTermins.Add(t);
     t = new Pullenti.Ner.Core.Termin("ГОРОДСКОЙ", Pullenti.Morph.MorphLang.RU, true);
     t.AddAbridge("ГОР.");
     t.AddAbridge("Г.Т.");
     m_PhoneTermins.Add(t);
     t = new Pullenti.Ner.Core.Termin("ДОМАШНИЙ", Pullenti.Morph.MorphLang.RU, true)
     {
         Tag2 = Pullenti.Ner.Phone.PhoneKind.Home
     };
     t.AddAbridge("ДОМ.");
     m_PhoneTermins.Add(t);
     t = new Pullenti.Ner.Core.Termin("КОНТАКТНЫЙ", Pullenti.Morph.MorphLang.RU, true);
     t.AddVariant("КОНТАКТНЫЕ ДАННЫЕ", false);
     m_PhoneTermins.Add(t);
     t = new Pullenti.Ner.Core.Termin("МНОГОКАНАЛЬНЫЙ", Pullenti.Morph.MorphLang.RU, true);
     m_PhoneTermins.Add(t);
     t = new Pullenti.Ner.Core.Termin("ФАКС", Pullenti.Morph.MorphLang.RU, true)
     {
         Tag2 = Pullenti.Ner.Phone.PhoneKind.Fax
     };
     t.AddAbridge("Ф.");
     t.AddAbridge("Т/ФАКС");
     t.AddAbridge("ТЕЛ/ФАКС");
     m_PhoneTermins.Add(t);
     t = new Pullenti.Ner.Core.Termin("ЗВОНИТЬ", Pullenti.Morph.MorphLang.RU, true);
     m_PhoneTermins.Add(t);
     t = new Pullenti.Ner.Core.Termin("ПРИЕМНАЯ", Pullenti.Morph.MorphLang.RU, true)
     {
         Tag2 = Pullenti.Ner.Phone.PhoneKind.Work
     };
     m_PhoneTermins.Add(t);
     t = new Pullenti.Ner.Core.Termin("PHONE", Pullenti.Morph.MorphLang.EN, true);
     t.AddAbridge("PH.");
     t.AddVariant("TELEFON", true);
     m_PhoneTermins.Add(t);
     t = new Pullenti.Ner.Core.Termin("DIRECT LINE", Pullenti.Morph.MorphLang.EN, true)
     {
         Tag2 = Pullenti.Ner.Phone.PhoneKind.Work
     };
     t.AddVariant("DIRECT LINES", true);
     m_PhoneTermins.Add(t);
     t = new Pullenti.Ner.Core.Termin("MOBILE", Pullenti.Morph.MorphLang.EN, true)
     {
         Tag2 = Pullenti.Ner.Phone.PhoneKind.Mobile
     };
     t.AddAbridge("MOB.");
     t.AddVariant("MOBIL", true);
     t.AddAbridge("M.");
     m_PhoneTermins.Add(t);
     t = new Pullenti.Ner.Core.Termin("FAX", Pullenti.Morph.MorphLang.EN, true)
     {
         Tag2 = Pullenti.Ner.Phone.PhoneKind.Fax
     };
     t.AddAbridge("F.");
     m_PhoneTermins.Add(t);
     t = new Pullenti.Ner.Core.Termin("HOME", Pullenti.Morph.MorphLang.EN, true)
     {
         Tag2 = Pullenti.Ner.Phone.PhoneKind.Home
     };
     m_PhoneTermins.Add(t);
     t = new Pullenti.Ner.Core.Termin("CALL", Pullenti.Morph.MorphLang.EN, true);
     t.AddVariant("SEDIU", true);
     m_PhoneTermins.Add(t);
     t     = new Pullenti.Ner.Core.Termin("ДОПОЛНИТЕЛЬНЫЙ", Pullenti.Morph.MorphLang.RU, true);
     t.Tag = t;
     t.AddAbridge("ДОП.");
     t.AddAbridge("EXT.");
     m_PhoneTermins.Add(t);
     t     = new Pullenti.Ner.Core.Termin("ДОБАВОЧНЫЙ", Pullenti.Morph.MorphLang.RU, true);
     t.Tag = t;
     t.AddAbridge("ДОБ.");
     t.AddAbridge("Д.");
     m_PhoneTermins.Add(t);
     t     = new Pullenti.Ner.Core.Termin("ВНУТРЕННИЙ", Pullenti.Morph.MorphLang.RU, true);
     t.Tag = t;
     t.AddAbridge("ВНУТР.");
     t.AddAbridge("ВН.");
     t.AddAbridge("ВНТ.");
     t.AddAbridge("Т.ВН.");
     m_PhoneTermins.Add(t);
     t     = new Pullenti.Ner.Core.Termin("TONE MODE", Pullenti.Morph.MorphLang.EN, true);
     t.Tag = t;
     m_PhoneTermins.Add(t);
     t     = new Pullenti.Ner.Core.Termin("TONE", Pullenti.Morph.MorphLang.EN, true);
     t.Tag = t;
     m_PhoneTermins.Add(t);
     t = new Pullenti.Ner.Core.Termin("ADDITIONAL", Pullenti.Morph.MorphLang.EN, true);
     t.AddAbridge("ADD.");
     t.Tag = t;
     t.AddVariant("INTERNAL", true);
     t.AddAbridge("INT.");
     m_PhoneTermins.Add(t);
 }
コード例 #21
0
 public static void Initialize()
 {
     if (m_Ontology != null)
     {
         return;
     }
     m_Ontology = new Pullenti.Ner.Core.TerminCollection();
     Pullenti.Ner.Core.Termin t;
     t = new Pullenti.Ner.Core.Termin("BANK");
     m_Ontology.Add(t);
     t = new Pullenti.Ner.Core.Termin("Public Limited Company".ToUpper())
     {
         Acronym = "PLC"
     };
     t.AddAbridge("P.L.C.");
     m_Ontology.Add(t);
     t = new Pullenti.Ner.Core.Termin("Limited Liability Company".ToUpper())
     {
         Acronym = "LLC"
     };
     t.AddAbridge("L.L.C.");
     m_Ontology.Add(t);
     t = new Pullenti.Ner.Core.Termin("Limited Liability Partnership".ToUpper())
     {
         Acronym = "LLP"
     };
     t.AddAbridge("L.L.P.");
     m_Ontology.Add(t);
     t = new Pullenti.Ner.Core.Termin("Limited Liability Limited Partnership".ToUpper())
     {
         Acronym = "LLLP"
     };
     t.AddAbridge("L.L.L.P.");
     m_Ontology.Add(t);
     t = new Pullenti.Ner.Core.Termin("Limited Duration Company".ToUpper())
     {
         Acronym = "LDC"
     };
     t.AddAbridge("L.D.C.");
     m_Ontology.Add(t);
     t = new Pullenti.Ner.Core.Termin("International Business Company".ToUpper())
     {
         Acronym = "IBC"
     };
     t.AddAbridge("I.B.S.");
     m_Ontology.Add(t);
     t = new Pullenti.Ner.Core.Termin("Joint stock company".ToUpper())
     {
         Acronym = "JSC"
     };
     t.AddAbridge("J.S.C.");
     m_Ontology.Add(t);
     t = new Pullenti.Ner.Core.Termin("Open Joint stock company".ToUpper())
     {
         Acronym = "OJSC"
     };
     t.AddAbridge("O.J.S.C.");
     m_Ontology.Add(t);
     t = new Pullenti.Ner.Core.Termin("Sosiedad Anonima".ToUpper())
     {
         Acronym = "SA"
     };
     t.AddVariant("Sociedad Anonima".ToUpper(), false);
     t.AddAbridge("S.A.");
     t.AddVariant("SPA", false);
     m_Ontology.Add(t);
     t = new Pullenti.Ner.Core.Termin("Société en commandite".ToUpper())
     {
         Acronym = "SC"
     };
     t.AddAbridge("S.C.");
     t.AddVariant("SCS", false);
     m_Ontology.Add(t);
     t = new Pullenti.Ner.Core.Termin("Societas Europaea".ToUpper())
     {
         Acronym = "SE"
     };
     t.AddAbridge("S.E.");
     m_Ontology.Add(t);
     t = new Pullenti.Ner.Core.Termin("Società in accomandita".ToUpper())
     {
         Acronym = "SAS"
     };
     m_Ontology.Add(t);
     t = new Pullenti.Ner.Core.Termin("Société en commandite par actions".ToUpper())
     {
         Acronym = "SCA"
     };
     t.AddAbridge("S.C.A.");
     m_Ontology.Add(t);
     t = new Pullenti.Ner.Core.Termin("Société en nom collectif".ToUpper())
     {
         Acronym = "SNC"
     };
     t.AddVariant("Società in nome collettivo".ToUpper(), false);
     t.AddAbridge("S.N.C.");
     m_Ontology.Add(t);
     t = new Pullenti.Ner.Core.Termin("General Partnership".ToUpper())
     {
         Acronym = "GP"
     };
     t.AddVariant("General Partners", false);
     t.AddAbridge("G.P.");
     m_Ontology.Add(t);
     t = new Pullenti.Ner.Core.Termin("Limited Partnership".ToUpper())
     {
         Acronym = "LP"
     };
     t.AddAbridge("L.P.");
     m_Ontology.Add(t);
     t = new Pullenti.Ner.Core.Termin("Kommanditaktiengesellschaft".ToUpper())
     {
         Acronym = "KGAA"
     };
     t.AddVariant("KOMMAG", false);
     m_Ontology.Add(t);
     t = new Pullenti.Ner.Core.Termin("Societe a Responsidilite Limitee".ToUpper())
     {
         Acronym = "SRL"
     };
     t.AddAbridge("S.A.R.L.");
     t.AddAbridge("S.R.L.");
     t.AddVariant("SARL", false);
     m_Ontology.Add(t);
     t = new Pullenti.Ner.Core.Termin("Società a garanzia limitata".ToUpper())
     {
         Acronym = "SAGL"
     };
     t.AddAbridge("S.A.G.L.");
     m_Ontology.Add(t);
     t = new Pullenti.Ner.Core.Termin("Società limitata".ToUpper())
     {
         Acronym = "SL"
     };
     t.AddAbridge("S.L.");
     m_Ontology.Add(t);
     t = new Pullenti.Ner.Core.Termin("Vennootschap Met Beperkte Aansparkelij kheid".ToUpper())
     {
         Acronym = "BV"
     };
     m_Ontology.Add(t);
     t = new Pullenti.Ner.Core.Termin("Vennootschap Met Beperkte Aansparkelij".ToUpper())
     {
         Acronym = "AVV"
     };
     m_Ontology.Add(t);
     t = new Pullenti.Ner.Core.Termin("Naamlose Vennootschap".ToUpper())
     {
         Acronym = "NV"
     };
     t.AddAbridge("N.V.");
     m_Ontology.Add(t);
     t = new Pullenti.Ner.Core.Termin("Gesellschaft mit beschrakter Haftung".ToUpper())
     {
         Acronym = "GMBH"
     };
     t.AddVariant("ГМБХ", false);
     m_Ontology.Add(t);
     t = new Pullenti.Ner.Core.Termin("Aktiengesellschaft".ToUpper())
     {
         Acronym = "AG"
     };
     m_Ontology.Add(t);
     t = new Pullenti.Ner.Core.Termin("International Company".ToUpper())
     {
         Acronym = "IC"
     };
     t.AddAbridge("I.C.");
     m_Ontology.Add(t);
     t = new Pullenti.Ner.Core.Termin("And Company".ToUpper());
     t.AddVariant("& Company", false);
     t.AddVariant("& Co", false);
     t.AddVariant("& Company", false);
     m_Ontology.Add(t);
     t = new Pullenti.Ner.Core.Termin("Kollektivgesellschaft".ToUpper())
     {
         Acronym = "KG"
     };
     t.AddAbridge("K.G.");
     t.AddVariant("OHG", false);
     m_Ontology.Add(t);
     t = new Pullenti.Ner.Core.Termin("Kommanditgesellschaft".ToUpper())
     {
         Acronym = "KG"
     };
     t.AddVariant("KOMMG", false);
     m_Ontology.Add(t);
     t = new Pullenti.Ner.Core.Termin("LIMITED");
     t.AddAbridge("LTD");
     t.AddVariant("LTD", false);
     t.AddVariant("ЛИМИТЕД", false);
     t.AddVariant("ЛТД", false);
     m_Ontology.Add(t);
     t = new Pullenti.Ner.Core.Termin("PRIVATE LIMITED");
     t.AddVariant("PTE LTD", false);
     m_Ontology.Add(t);
     t = new Pullenti.Ner.Core.Termin("INCORPORATED");
     t.AddAbridge("INC");
     t.AddVariant("INC", false);
     t.AddVariant("ИНКОРПОРЕЙТЕД", false);
     t.AddVariant("ИНК", false);
     m_Ontology.Add(t);
     t = new Pullenti.Ner.Core.Termin("CORPORATION");
     t.AddVariant("CO", false);
     t.AddVariant("СО", false);
     t.AddVariant("КОРПОРЕЙШН", false);
     t.AddVariant("КОРПОРЕЙШЕН", false);
     m_Ontology.Add(t);
     t = new Pullenti.Ner.Core.Termin("COMPANY");
     m_Ontology.Add(t);
 }
コード例 #22
0
        public static void Initialize()
        {
            if (m_Inited)
            {
                return;
            }
            m_Inited        = true;
            Units           = new List <Unit>();
            Termins         = new Pullenti.Ner.Core.TerminCollection();
            m_KindsKeywords = new Dictionary <Pullenti.Ner.Measure.MeasureKind, List <string> >();
            m_KindsKeywords.Add(Pullenti.Ner.Measure.MeasureKind.Speed, new List <string>(new string[] { "СКОРОСТЬ", "SPEED", "ШВИДКІСТЬ" }));
            Pullenti.Ner.Core.Termin.AssignAllTextsAsNormal = true;
            Unit u;
            Unit uu;

            Pullenti.Ner.Core.Termin t;
            u = new Unit("м", "m", "метр", "meter")
            {
                Kind = Pullenti.Ner.Measure.MeasureKind.Length
            };
            u.Keywords.AddRange(new string[] { "ДЛИНА", "ДЛИННА", "ШИРИНА", "ГЛУБИНА", "ВЫСОТА", "РАЗМЕР", "ГАБАРИТ", "РАССТОЯНИЕ", "РАДИУС", "ПЕРИМЕТР", "ДИАМЕТР", "ТОЛЩИНА", "ПОДАЧА", "НАПОР", "ДАЛЬНОСТЬ", "ТИПОРАЗМЕР", "КАЛИБР", "LENGTH", "WIDTH", "DEPTH", "HEIGHT", "SIZE", "ENVELOPE", "DISTANCE", "RADIUS", "PERIMETER", "DIAMETER", "FLOW", "PRESSURE", "CALIBER", "ДОВЖИНА", "ШИРИНА", "ГЛИБИНА", "ВИСОТА", "РОЗМІР", "ГАБАРИТ", "ВІДСТАНЬ", "РАДІУС", "ДІАМЕТР", "НАТИСК", "КАЛІБР" });
            Units.Add(u);
            t = new Pullenti.Ner.Core.Termin("МЕТР")
            {
                Tag = u
            };
            t.AddVariant("МЕТРОВЫЙ", false);
            t.AddVariant("МЕТРОВИЙ", false);
            t.AddVariant("METER", false);
            t.AddAbridge("М.");
            t.AddAbridge("M.");
            Termins.Add(t);
            foreach (UnitsFactors f in new UnitsFactors[] { UnitsFactors.Kilo, UnitsFactors.Deci, UnitsFactors.Centi, UnitsFactors.Milli, UnitsFactors.Micro, UnitsFactors.Nano })
            {
                _addFactor(f, u, "М.", "M.", "МЕТР;МЕТРОВЫЙ", "МЕТР;МЕТРОВИЙ", "METER;METRE");
            }
            uu = new Unit("миль", "mile", "морская миля", "mile")
            {
                Kind = Pullenti.Ner.Measure.MeasureKind.Length
            };
            uu.BaseUnit       = u;
            uu.BaseMultiplier = 1852;
            Units.Add(uu);
            t = new Pullenti.Ner.Core.Termin("МИЛЯ")
            {
                Tag = uu
            };
            t.AddVariant("МОРСКАЯ МИЛЯ", false);
            t.AddAbridge("NMI");
            t.AddVariant("MILE", false);
            t.AddVariant("NAUTICAL MILE", false);
            Termins.Add(t);
            uu = new Unit("фут", "ft", "фут", "foot")
            {
                BaseUnit = u, BaseMultiplier = 0.304799472, Kind = Pullenti.Ner.Measure.MeasureKind.Length
            };
            Units.Add(uu);
            t = new Pullenti.Ner.Core.Termin("ФУТ")
            {
                Tag = uu
            };
            t.AddAbridge("FT.");
            t.AddVariant("FOOT", false);
            Termins.Add(t);
            uu = new Unit("дюйм", "in", "дюйм", "inch")
            {
                BaseUnit = u, BaseMultiplier = 0.0254, Kind = Pullenti.Ner.Measure.MeasureKind.Length
            };
            Units.Add(uu);
            t = new Pullenti.Ner.Core.Termin("ДЮЙМ")
            {
                Tag = uu
            };
            t.AddAbridge("IN");
            t.AddVariant("INCH", false);
            Termins.Add(t);
            u = new Unit("ар", "are", "ар", "are")
            {
                Kind = Pullenti.Ner.Measure.MeasureKind.Area
            };
            u.Keywords.AddRange(new string[] { "ПЛОЩАДЬ", "ПРОЩИНА", "AREA", "SQWARE", "SPACE" });
            Units.Add(u);
            t = new Pullenti.Ner.Core.Termin("АР")
            {
                Tag = u
            };
            t.AddVariant("ARE", false);
            t.AddVariant("СОТКА", false);
            Termins.Add(t);
            uu = new Unit("га", "ga", "гектар", "hectare")
            {
                Kind = Pullenti.Ner.Measure.MeasureKind.Area
            };
            uu.BaseUnit       = u;
            uu.BaseMultiplier = 100;
            Units.Add(uu);
            t = new Pullenti.Ner.Core.Termin("ГЕКТАР")
            {
                Tag = uu
            };
            t.AddVariant("HECTARE", false);
            t.AddAbridge("ГА");
            t.AddAbridge("GA");
            Termins.Add(t);
            u = new Unit("г", "g", "грамм", "gram")
            {
                Kind = Pullenti.Ner.Measure.MeasureKind.Weight
            };
            u.Keywords.AddRange(new string[] { "ВЕС", "ТЯЖЕСТЬ", "НЕТТО", "БРУТТО", "МАССА", "НАГРУЗКА", "ЗАГРУЗКА", "УПАКОВКА", "WEIGHT", "NET", "GROSS", "MASS", "ВАГА", "ТЯЖКІСТЬ", "МАСА" });
            Units.Add(u);
            t = new Pullenti.Ner.Core.Termin("ГРАММ")
            {
                Tag = u
            };
            t.AddAbridge("Г.");
            t.AddAbridge("ГР.");
            t.AddAbridge("G.");
            t.AddAbridge("GR.");
            t.AddVariant("ГРАММОВЫЙ", false);
            t.AddVariant("ГРАММНЫЙ", false);
            t.AddVariant("ГРАМОВИЙ", false);
            t.AddVariant("GRAM", false);
            t.AddVariant("GRAMME", false);
            Termins.Add(t);
            foreach (UnitsFactors f in new UnitsFactors[] { UnitsFactors.Kilo, UnitsFactors.Milli })
            {
                _addFactor(f, u, "Г.;ГР;", "G.;GR.", "ГРАМ;ГРАММ;ГРАММНЫЙ", "ГРАМ;ГРАМОВИЙ", "GRAM;GRAMME");
            }
            uu = new Unit("ц", "centner", "центнер", "centner")
            {
                BaseUnit = u, BaseMultiplier = 100000, Kind = Pullenti.Ner.Measure.MeasureKind.Weight
            };
            Units.Add(uu);
            t = new Pullenti.Ner.Core.Termin("ЦЕНТНЕР")
            {
                Tag = uu
            };
            t.AddVariant("CENTNER", false);
            t.AddVariant("QUINTAL", false);
            t.AddAbridge("Ц.");
            Termins.Add(t);
            uu = new Unit("т", "t", "тонна", "tonne")
            {
                BaseUnit = u, BaseMultiplier = 1000000, Kind = Pullenti.Ner.Measure.MeasureKind.Weight
            };
            Units.Add(uu);
            t = new Pullenti.Ner.Core.Termin("ТОННА")
            {
                Tag = uu
            };
            t.AddVariant("TONNE", false);
            t.AddVariant("TON", false);
            t.AddAbridge("Т.");
            t.AddAbridge("T.");
            Termins.Add(t);
            _addFactor(UnitsFactors.Mega, uu, "Т", "T", "ТОННА;ТОННЫЙ", "ТОННА;ТОННИЙ", "TONNE;TON");
            u = new Unit("л", "l", "литр", "liter")
            {
                Kind = Pullenti.Ner.Measure.MeasureKind.Volume
            };
            u.Keywords.AddRange(new string[] { "ОБЪЕМ", "ЕМКОСТЬ", "ВМЕСТИМОСЬ", "ОБСЯГ", "ЄМНІСТЬ", "МІСТКІСТЬ", "VOLUME", "CAPACITY" });
            Units.Add(u);
            t = new Pullenti.Ner.Core.Termin("ЛИТР")
            {
                Tag = u
            };
            t.AddAbridge("Л.");
            t.AddAbridge("L.");
            t.AddVariant("LITER", false);
            t.AddVariant("LITRE", false);
            t.AddVariant("ЛІТР", false);
            t.AddVariant("ЛІТРОВИЙ", false);
            Termins.Add(t);
            foreach (UnitsFactors f in new UnitsFactors[] { UnitsFactors.Milli, UnitsFactors.Centi })
            {
                _addFactor(f, u, "Л.", "L.", "ЛИТР;ЛИТРОВЫЙ", "ЛІТР;ЛІТРОВИЙ", "LITER;LITRE");
            }
            uu = new Unit("галлон", "gallon", "галлон", "gallon")
            {
                BaseUnit = u, BaseMultiplier = 4.5461, Kind = Pullenti.Ner.Measure.MeasureKind.Volume
            };
            Units.Add(uu);
            t = new Pullenti.Ner.Core.Termin("ГАЛЛОН")
            {
                Tag = u
            };
            t.AddVariant("ГАЛОН", false);
            t.AddVariant("GALLON", false);
            t.AddAbridge("ГАЛ");
            Termins.Add(t);
            uu = new Unit("баррель", "bbls", "баррель нефти", "barrel")
            {
                BaseUnit = u, BaseMultiplier = 158.987, Kind = Pullenti.Ner.Measure.MeasureKind.Volume
            };
            Units.Add(uu);
            t = new Pullenti.Ner.Core.Termin("БАРРЕЛЬ")
            {
                Tag = uu
            };
            t.AddAbridge("BBLS");
            t.AddVariant("БАРРЕЛЬ НЕФТИ", false);
            t.AddVariant("BARRREL", false);
            Termins.Add(t);
            uSec = (u = new Unit("сек", "sec", "секунда", "second")
            {
                Kind = Pullenti.Ner.Measure.MeasureKind.Time
            });
            u.Keywords.AddRange(new string[] { "ВРЕМЯ", "ПРОДОЛЖИТЕЛЬНОСТЬ", "ЗАДЕРЖКА", "ДЛИТЕЛЬНОСТЬ", "ДОЛГОТА", "TIME", "DURATION", "DELAY", "ЧАС", "ТРИВАЛІСТЬ", "ЗАТРИМКА" });
            Units.Add(u);
            t = new Pullenti.Ner.Core.Termin("СЕКУНДА")
            {
                Tag = u
            };
            t.AddAbridge("С.");
            t.AddAbridge("C.");
            t.AddAbridge("СЕК");
            t.AddAbridge("СЕК");
            t.AddAbridge("S.");
            t.AddAbridge("SEC");
            t.AddVariant("СЕКУНДНЫЙ", false);
            t.AddVariant("СЕКУНДНИЙ", false);
            t.AddVariant("SECOND", false);
            Termins.Add(t);
            foreach (UnitsFactors f in new UnitsFactors[] { UnitsFactors.Milli, UnitsFactors.Micro })
            {
                _addFactor(f, u, "С.;СЕК", "C;S.;SEC;", "СЕКУНДА;СЕКУНДНЫЙ", "СЕКУНДА;СЕКУНДНИЙ", "SECOND");
            }
            uMinute           = (uu = new Unit("мин", "min", "минута", "minute")
            {
                Kind = Pullenti.Ner.Measure.MeasureKind.Time
            });
            uu.BaseUnit       = u;
            uu.BaseMultiplier = 60;
            Units.Add(uu);
            t = new Pullenti.Ner.Core.Termin("МИНУТА")
            {
                Tag = uu
            };
            t.AddAbridge("МИН.");
            t.AddAbridge("MIN.");
            t.AddVariant("МИНУТНЫЙ", false);
            t.AddVariant("ХВИЛИННИЙ", false);
            t.AddVariant("ХВИЛИНА", false);
            t.AddVariant("МІНУТА", false);
            t.AddVariant("MINUTE", false);
            Termins.Add(t);
            u     = uu;
            uHour = (uu = new Unit("ч", "h", "час", "hour")
            {
                BaseUnit = u, BaseMultiplier = 60, Kind = Pullenti.Ner.Measure.MeasureKind.Time
            });
            Units.Add(uu);
            t = new Pullenti.Ner.Core.Termin("ЧАС")
            {
                Tag = uu
            };
            t.AddAbridge("Ч.");
            t.AddAbridge("H.");
            t.AddVariant("ЧАСОВОЙ", false);
            t.AddVariant("HOUR", false);
            t.AddVariant("ГОДИННИЙ", false);
            t.AddVariant("ГОДИНА", false);
            Termins.Add(t);
            u = new Unit("дн", "d", "день", "day")
            {
                Kind = Pullenti.Ner.Measure.MeasureKind.Time
            };
            u.Keywords.AddRange(uSec.Keywords);
            u.Keywords.AddRange(new string[] { "ПОСТАВКА", "СРОК", "РАБОТА", "ЗАВЕРШЕНИЕ" });
            Units.Add(u);
            t = new Pullenti.Ner.Core.Termin("ДЕНЬ")
            {
                Tag = u
            };
            t.AddAbridge("ДН.");
            t.AddAbridge("Д.");
            t.AddVariant("DAY", false);
            Termins.Add(t);
            uu = new Unit("сут", "d", "сутки", "day")
            {
                Kind = Pullenti.Ner.Measure.MeasureKind.Time
            };
            uu.Keywords.AddRange(uu.Keywords);
            Units.Add(uu);
            t = new Pullenti.Ner.Core.Termin("СУТКИ")
            {
                Tag = uu
            };
            t.AddAbridge("СУТ.");
            t.AddVariant("DAY", false);
            Termins.Add(t);
            uu = new Unit("нед", "week", "неделя", "week")
            {
                BaseUnit = u, BaseMultiplier = 7, Kind = Pullenti.Ner.Measure.MeasureKind.Time
            };
            Units.Add(uu);
            t = new Pullenti.Ner.Core.Termin("НЕДЕЛЯ")
            {
                Tag = uu
            };
            t.AddAbridge("НЕД");
            t.AddVariant("WEEK", false);
            t.AddVariant("ТИЖДЕНЬ", false);
            Termins.Add(t);
            uu = new Unit("мес", "mon", "месяц", "month")
            {
                BaseUnit = u, BaseMultiplier = 30, Kind = Pullenti.Ner.Measure.MeasureKind.Time
            };
            Units.Add(uu);
            t = new Pullenti.Ner.Core.Termin("МЕСЯЦ")
            {
                Tag = uu
            };
            t.AddAbridge("МЕС");
            t.AddAbridge("MON");
            t.AddVariant("MONTH", false);
            t.AddVariant("МІСЯЦЬ", false);
            Termins.Add(t);
            uu = new Unit("г", "year", "год", "year")
            {
                BaseUnit = u, BaseMultiplier = 365, Kind = Pullenti.Ner.Measure.MeasureKind.Time
            };
            Units.Add(uu);
            t = new Pullenti.Ner.Core.Termin("ГОД")
            {
                Tag = uu
            };
            t.AddAbridge("Г.");
            t.AddAbridge("ГД");
            t.AddVariant("YEAR", false);
            t.AddVariant("РІК", false);
            t.AddVariant("ЛЕТ", false);
            Termins.Add(t);
            uGradus = new Unit("°", "°", "градус", "degree");
            uGradus.Keywords.AddRange(new string[] { "ТЕМПЕРАТУРА", "ШИРОТА", "ДОЛГОТА", "АЗИМУТ", "ДОВГОТА", "TEMPERATURE", "LATITUDE", "LONGITUDE", "AZIMUTH" });
            Units.Add(uGradus);
            t = new Pullenti.Ner.Core.Termin("ГРАДУС")
            {
                Tag = uGradus
            };
            t.AddVariant("DEGREE", false);
            Termins.Add(t);
            uGradusC = new Unit("°C", "°C", "градус Цельсия", "celsius degree")
            {
                Kind = Pullenti.Ner.Measure.MeasureKind.Temperature
            };
            uGradusC.Keywords.Add("ТЕМПЕРАТУРА");
            uGradus.Keywords.Add("TEMPERATURE");
            uGradus.Psevdo.Add(uGradusC);
            Units.Add(uGradusC);
            t = new Pullenti.Ner.Core.Termin("ГРАДУС ЦЕЛЬСИЯ")
            {
                Tag = uGradusC
            };
            t.AddVariant("ГРАДУС ПО ЦЕЛЬСИЮ", false);
            t.AddVariant("CELSIUS DEGREE", false);
            Termins.Add(t);
            uGradusF = new Unit("°F", "°F", "градус Фаренгейта", "Fahrenheit degree")
            {
                Kind = Pullenti.Ner.Measure.MeasureKind.Temperature
            };
            uGradusF.Keywords = uGradusC.Keywords;
            uGradus.Psevdo.Add(uGradusF);
            Units.Add(uGradusF);
            t = new Pullenti.Ner.Core.Termin("ГРАДУС ФАРЕНГЕЙТА")
            {
                Tag = uGradusF
            };
            t.AddVariant("ГРАДУС ПО ФАРЕНГЕЙТУ", false);
            t.AddVariant("FAHRENHEIT DEGREE", false);
            Termins.Add(t);
            uPercent = new Unit("%", "%", "процент", "percent")
            {
                Kind = Pullenti.Ner.Measure.MeasureKind.Percent
            };
            Units.Add(uPercent);
            t = new Pullenti.Ner.Core.Termin("ПРОЦЕНТ")
            {
                Tag = uPercent
            };
            t.AddVariant("ПРОЦ", false);
            t.AddVariant("PERC", false);
            t.AddVariant("PERCENT", false);
            Termins.Add(t);
            uAlco = new Unit("%(об)", "%(vol)", "объёмный процент", "volume percent");
            uAlco.Keywords.AddRange(new string[] { "КРЕПОСТЬ", "АЛКОГОЛЬ", "ALCOHOL", "СПИРТ", "АЛКОГОЛЬНЫЙ", "SPIRIT" });
            uPercent.Psevdo.Add(uAlco);
            uGradus.Psevdo.Add(uAlco);
            Units.Add(uAlco);
            t = new Pullenti.Ner.Core.Termin("ОБЪЕМНЫЙ ПРОЦЕНТ")
            {
                Tag = uAlco
            };
            t.AddVariant("ГРАДУС", false);
            Termins.Add(t);
            u = new Unit("об", "rev", "оборот", "revolution");
            uGradus.Keywords.AddRange(new string[] { "ЧАСТОТА", "ВРАЩЕНИЕ", "ВРАЩАТЕЛЬНЫЙ", "СКОРОСТЬ", "ОБОРОТ", "FREQUENCY", "ROTATION", "ROTATIONAL", "SPEED", "ОБЕРТАННЯ", "ОБЕРТАЛЬНИЙ" });
            Units.Add(u);
            t = new Pullenti.Ner.Core.Termin("ОБОРОТ")
            {
                Tag = u
            };
            t.AddAbridge("ОБ.");
            t.AddAbridge("ROT.");
            t.AddAbridge("REV.");
            t.AddVariant("ROTATION", false);
            t.AddVariant("REVOLUTION", false);
            Termins.Add(t);
            u = new Unit("В", "V", "вольт", "volt");
            u.Keywords.AddRange(new string[] { "ЭЛЕКТРИЧЕСКИЙ", "ПОТЕНЦИАЛ", "НАПРЯЖЕНИЕ", "ЭЛЕКТРОДВИЖУЩИЙ", "ПИТАНИЕ", "ТОК", "ПОСТОЯННЫЙ", "ПЕРЕМЕННЫЙ", "ЕЛЕКТРИЧНИЙ", "ПОТЕНЦІАЛ", "НАПРУГА", "ЕЛЕКТРОРУШІЙНОЇ", "ХАРЧУВАННЯ", "СТРУМ", "ПОСТІЙНИЙ", "ЗМІННИЙ", "ELECTRIC", "POTENTIAL", "TENSION", "ELECTROMOTIVE", "FOOD", "CURRENT", "CONSTANT", "VARIABLE" });
            Units.Add(u);
            t = new Pullenti.Ner.Core.Termin("ВОЛЬТ")
            {
                Tag = u
            };
            t.AddVariant("VOLT", false);
            t.AddAbridge("V");
            t.AddAbridge("В.");
            t.AddAbridge("B.");
            t.AddVariant("VAC", false);
            Termins.Add(t);
            foreach (UnitsFactors f in new UnitsFactors[] { UnitsFactors.Kilo, UnitsFactors.Mega, UnitsFactors.Milli, UnitsFactors.Milli, UnitsFactors.Micro })
            {
                _addFactor(f, u, "В.", "V.", "ВОЛЬТ;ВОЛЬТНЫЙ", "ВОЛЬТ;ВОЛЬТНІ", "VOLT");
            }
            u = new Unit("Вт", "W", "ватт", "watt");
            u.Keywords.AddRange(new string[] { "МОЩНОСТЬ", "ЭНЕРГИЯ", "ПОТОК", "ИЗЛУЧЕНИЕ", "ЭНЕРГОПОТРЕБЛЕНИЕ", "ПОТУЖНІСТЬ", "ЕНЕРГІЯ", "ПОТІК", "ВИПРОМІНЮВАННЯ", "POWER", "ENERGY", "FLOW", "RADIATION" });
            Units.Add(u);
            t = new Pullenti.Ner.Core.Termin("ВАТТ")
            {
                Tag = u
            };
            t.AddAbridge("Вт");
            t.AddAbridge("W");
            t.AddVariant("WATT", false);
            Termins.Add(t);
            foreach (UnitsFactors f in new UnitsFactors[] { UnitsFactors.Kilo, UnitsFactors.Mega, UnitsFactors.Giga, UnitsFactors.Milli })
            {
                _addFactor(f, u, "ВТ.", "W.", "ВАТТ;ВАТТНЫЙ", "ВАТ;ВАТНИЙ", "WATT;WATTS");
            }
            uu = new Unit("л.с.", "hp", "лошадиная сила", "horsepower")
            {
                BaseUnit = u, BaseMultiplier = 735.49875
            };
            Units.Add(uu);
            t = new Pullenti.Ner.Core.Termin("ЛОШАДИНАЯ СИЛА")
            {
                Tag = uu
            };
            t.AddAbridge("Л.С.");
            t.AddAbridge("ЛОШ.С.");
            t.AddAbridge("ЛОШ.СИЛА");
            t.AddAbridge("HP");
            t.AddAbridge("PS");
            t.AddAbridge("SV");
            t.AddVariant("HORSEPOWER", false);
            Termins.Add(t);
            u = new Unit("Дж", "J", "джоуль", "joule");
            u.Keywords.AddRange(new string[] { "РАБОТА", "ЭНЕРГИЯ", "ТЕПЛОТА", "ТЕПЛОВОЙ", "ТЕПЛОВЫДЕЛЕНИЕ", "МОЩНОСТЬ", "ХОЛОДИЛЬНЫЙ" });
            Units.Add(u);
            t = new Pullenti.Ner.Core.Termin("ДЖОУЛЬ")
            {
                Tag = u
            };
            t.AddAbridge("ДЖ");
            t.AddAbridge("J");
            t.AddVariant("JOULE", false);
            Termins.Add(t);
            foreach (UnitsFactors f in new UnitsFactors[] { UnitsFactors.Kilo, UnitsFactors.Mega, UnitsFactors.Giga, UnitsFactors.Tera, UnitsFactors.Milli })
            {
                _addFactor(f, u, "ДЖ.", "J.", "ДЖОУЛЬ", "ДЖОУЛЬ", "JOULE");
            }
            uu          = new Unit("БТЕ", "BTU", "британская терминальная единица", "british terminal unit");
            uu.Keywords = u.Keywords;
            Units.Add(uu);
            t = new Pullenti.Ner.Core.Termin("БРИТАНСКАЯ ТЕРМИНАЛЬНАЯ ЕДИНИЦА")
            {
                Tag = uu
            };
            t.AddAbridge("БТЕ");
            t.AddAbridge("BTU");
            t.AddVariant("BRITISH TERMINAL UNIT", false);
            Termins.Add(t);
            u = new Unit("К", "K", "кельвин", "kelvin");
            u.Keywords.AddRange(uGradusC.Keywords);
            Units.Add(u);
            t = new Pullenti.Ner.Core.Termin("КЕЛЬВИН")
            {
                Tag = u
            };
            t.AddAbridge("К.");
            t.AddAbridge("K.");
            t.AddVariant("KELVIN", false);
            t.AddVariant("КЕЛЬВІН", false);
            Termins.Add(t);
            foreach (UnitsFactors f in new UnitsFactors[] { UnitsFactors.Kilo, UnitsFactors.Mega, UnitsFactors.Giga, UnitsFactors.Milli })
            {
                _addFactor(f, u, "К.", "K.", "КЕЛЬВИН", "КЕЛЬВІН", "KELVIN");
            }
            u = new Unit("Гц", "Hz", "герц", "herz");
            u.Keywords.AddRange(new string[] { "ЧАСТОТА", "ЧАСТОТНЫЙ", "ПЕРИОДИЧНОСТЬ", "ПИТАНИЕ", "ЧАСТОТНИЙ", "ПЕРІОДИЧНІСТЬ", "FREQUENCY" });
            Units.Add(u);
            t = new Pullenti.Ner.Core.Termin("ГЕРЦ")
            {
                Tag = u
            };
            t.AddAbridge("HZ");
            t.AddAbridge("ГЦ");
            t.AddVariant("ГЕРЦОВЫЙ", false);
            t.AddVariant("ГЕРЦОВИЙ", false);
            t.AddVariant("HERZ", false);
            Termins.Add(t);
            foreach (UnitsFactors f in new UnitsFactors[] { UnitsFactors.Kilo, UnitsFactors.Mega, UnitsFactors.Giga, UnitsFactors.Micro })
            {
                _addFactor(f, u, "ГЦ.", "W.", "ГЕРЦ;ГЕРЦОВЫЙ", "ГЕРЦ;ГЕРЦОВИЙ", "HERZ");
            }
            uOm = (u = new Unit("Ом", "Ω", "Ом", "Ohm"));
            u.Keywords.AddRange(new string[] { "СОПРОТИВЛЕНИЕ", "РЕЗИСТОР", "РЕЗИСТНЫЙ", "ИМПЕДАНС", "РЕЗИСТОРНЫЙ", "ОПІР", "РЕЗИСТИВНИЙ", "ІМПЕДАНС", "RESISTANCE", "RESISTOR", "RESISTIVE", "IMPEDANCE" });
            Units.Add(u);
            t = new Pullenti.Ner.Core.Termin("ОМ")
            {
                Tag = uOm
            };
            t.AddVariant("OHM", false);
            Termins.Add(t);
            foreach (UnitsFactors f in new UnitsFactors[] { UnitsFactors.Kilo, UnitsFactors.Mega, UnitsFactors.Giga, UnitsFactors.Micro, UnitsFactors.Milli })
            {
                _addFactor(f, u, "ОМ", "Ω", "ОМ", "ОМ", "OHM");
            }
            u = new Unit("А", "A", "ампер", "ampere");
            u.Keywords.AddRange(new string[] { "ТОК", "СИЛА", "ЭЛЕКТРИЧЕСКИЙ", "ЭЛЕКТРИЧЕСТВО", "МАГНИТ", "МАГНИТОДВИЖУЩИЙ", "ПОТРЕБЛЕНИЕ", "CURRENT", "POWER", "ELECTRICAL", "ELECTRICITY", "MAGNET", "MAGNETOMOTIVE", "CONSUMPTION", "СТРУМ", "ЕЛЕКТРИЧНИЙ", "ЕЛЕКТРИКА", "МАГНІТ", "МАГНИТОДВИЖУЩИЙ", "СПОЖИВАННЯ" });
            Units.Add(u);
            t = new Pullenti.Ner.Core.Termin("АМПЕР")
            {
                Tag = u
            };
            t.AddAbridge("A");
            t.AddAbridge("А");
            t.AddVariant("АМПЕРНЫЙ", false);
            t.AddVariant("AMP", false);
            t.AddVariant("AMPERE", false);
            Termins.Add(t);
            uu = new Unit("Ач", "Ah", "ампер-час", "ampere-hour")
            {
                BaseUnit = u, MultUnit = uHour
            };
            uu.Keywords.AddRange(new string[] { "ЗАРЯД", "АККУМУЛЯТОР", "АККУМУЛЯТОРНЫЙ", "ЗАРЯДКА", "БАТАРЕЯ", "CHARGE", "BATTERY", "CHARGING", "АКУМУЛЯТОР", "АКУМУЛЯТОРНИЙ" });
            Units.Add(uu);
            t = new Pullenti.Ner.Core.Termin("АМПЕР ЧАС")
            {
                Tag = uu
            };
            t.AddAbridge("АЧ");
            t.AddAbridge("AH");
            t.AddVariant("AMPERE HOUR", false);
            t.AddVariant("АМПЕРЧАС", false);
            Termins.Add(t);
            foreach (UnitsFactors f in new UnitsFactors[] { UnitsFactors.Kilo, UnitsFactors.Mega, UnitsFactors.Giga, UnitsFactors.Micro, UnitsFactors.Milli })
            {
                Unit u1  = _addFactor(f, u, "А", "A", "АМПЕР;АМПЕРНЫЙ", "АМПЕР;АМПЕРНИЙ", "AMPERE;AMP");
                Unit uu1 = _addFactor(f, uu, "АЧ", "AH", "АМПЕР ЧАС", "АМПЕР ЧАС", "AMPERE HOUR");
                uu1.BaseUnit = u1;
                uu1.MultUnit = uHour;
            }
            uu          = new Unit("ВА", "VA", "вольт-ампер", "volt-ampere");
            uu.MultUnit = u;
            uu.BaseUnit = FindUnit("V", UnitsFactors.No);
            uu.Keywords.AddRange(new string[] { "ТОК", "СИЛА", "МОЩНОСТЬ", "ЭЛЕКТРИЧЕСКИЙ", "ПЕРЕМЕННЫЙ" });
            Units.Add(uu);
            t = new Pullenti.Ner.Core.Termin("ВОЛЬТ-АМПЕР")
            {
                Tag = uu
            };
            t.AddAbridge("BA");
            t.AddAbridge("BA");
            t.AddVariant("VA", false);
            Termins.Add(t);
            foreach (UnitsFactors f in new UnitsFactors[] { UnitsFactors.Kilo, UnitsFactors.Mega, UnitsFactors.Giga, UnitsFactors.Micro, UnitsFactors.Milli })
            {
                Unit u1 = _addFactor(f, uu, "ВА;BA", "VA", "ВОЛЬТ-АМПЕР", "ВОЛЬТ-АМПЕР", "VOLT-AMPERE");
            }
            u = new Unit("лк", "lx", "люкс", "lux");
            u.Keywords.AddRange(new string[] { "СВЕТ", "ОСВЕЩЕННОСТЬ", "ILLUMINANCE", "СВІТЛО", " ОСВІТЛЕНІСТЬ" });
            Units.Add(u);
            t = new Pullenti.Ner.Core.Termin("ЛЮКС")
            {
                Tag = u
            };
            t.AddAbridge("ЛК");
            t.AddAbridge("LX");
            t.AddVariant("LUX", false);
            Termins.Add(t);
            foreach (UnitsFactors f in new UnitsFactors[] { UnitsFactors.Kilo, UnitsFactors.Mega, UnitsFactors.Giga, UnitsFactors.Deci, UnitsFactors.Centi, UnitsFactors.Micro, UnitsFactors.Milli, UnitsFactors.Nano })
            {
                Unit u1 = _addFactor(f, u, "ЛК", "LX", "ЛЮКС", "ЛЮКС", "LUX");
            }
            u = new Unit("Б", "B", "белл", "bell");
            u.Keywords.AddRange(new string[] { "ЗВУК", "ЗВУКОВОЙ", "ШУМ", "ШУМОВОЙ", "ГРОМКОСТЬ", "ГРОМКИЙ", "СИГНАЛ", "УСИЛЕНИЕ", "ЗАТУХАНИЕ", "ГАРМОНИЧЕСКИЙ", "ПОДАВЛЕНИЕ", "ЗВУКОВИЙ", "ШУМОВИЙ", "ГУЧНІСТЬ", "ГУЧНИЙ", "ПОСИЛЕННЯ", "ЗАГАСАННЯ", "ГАРМОНІЙНИЙ", "ПРИДУШЕННЯ", "SOUND", "NOISE", "VOLUME", "LOUD", "SIGNAL", "STRENGTHENING", "ATTENUATION", "HARMONIC", "SUPPRESSION" });
            Units.Add(u);
            t = new Pullenti.Ner.Core.Termin("БЕЛЛ")
            {
                Tag = u
            };
            t.AddAbridge("Б.");
            t.AddAbridge("B.");
            t.AddAbridge("В.");
            t.AddVariant("БЕЛ", false);
            t.AddVariant("BELL", false);
            Termins.Add(t);
            _addFactor(UnitsFactors.Deci, u, "Б", "B", "БЕЛЛ;БЕЛ", "БЕЛЛ;БЕЛ", "BELL");
            u = new Unit("дБи", "dBi", "коэффициент усиления антенны", "dBi");
            u.Keywords.AddRange(new string[] { "УСИЛЕНИЕ", "АНТЕННА", "АНТЕНА", "ПОСИЛЕННЯ", "GAIN", "ANTENNA" });
            Units.Add(u);
            t = new Pullenti.Ner.Core.Termin("DBI")
            {
                Tag = u
            };
            t.AddVariant("ДБИ", false);
            Termins.Add(t);
            u = new Unit("дБм", "dBm", "опорная мощность", "dBm");
            u.Keywords.AddRange(new string[] { "МОЩНОСТЬ" });
            Units.Add(u);
            t = new Pullenti.Ner.Core.Termin("DBM")
            {
                Tag = u
            };
            t.AddVariant("ДБМ", false);
            t.AddVariant("ДВМ", false);
            Termins.Add(t);
            u = new Unit("Ф", "F", "фарад", "farad");
            u.Keywords.AddRange(new string[] { "ЕМКОСТЬ", "ЭЛЕКТРИЧНСКИЙ", "КОНДЕНСАТОР" });
            Units.Add(u);
            t = new Pullenti.Ner.Core.Termin("ФАРАД")
            {
                Tag = u
            };
            t.AddAbridge("Ф.");
            t.AddAbridge("ФА");
            t.AddAbridge("F");
            t.AddVariant("FARAD", false);
            Termins.Add(t);
            foreach (UnitsFactors f in new UnitsFactors[] { UnitsFactors.Kilo, UnitsFactors.Micro, UnitsFactors.Milli, UnitsFactors.Nano, UnitsFactors.Pico })
            {
                _addFactor(f, u, "Ф.;ФА.", "F", "ФАРАД", "ФАРАД", "FARAD");
            }
            u = new Unit("Н", "N", "ньютон", "newton");
            u.Keywords.AddRange(new string[] { "СИЛА", "МОМЕНТ", "НАГРУЗКА" });
            Units.Add(u);
            t = new Pullenti.Ner.Core.Termin("НЬЮТОН")
            {
                Tag = u
            };
            t.AddAbridge("Н.");
            t.AddAbridge("H.");
            t.AddAbridge("N.");
            t.AddVariant("NEWTON", false);
            Termins.Add(t);
            foreach (UnitsFactors f in new UnitsFactors[] { UnitsFactors.Mega, UnitsFactors.Kilo, UnitsFactors.Micro, UnitsFactors.Milli })
            {
                _addFactor(f, u, "Н.", "N.", "НЬЮТОН", "НЬЮТОН", "NEWTON");
            }
            u = new Unit("моль", "mol", "моль", "mol");
            u.Keywords.AddRange(new string[] { "МОЛЕКУЛА", "МОЛЕКУЛЯРНЫЙ", "КОЛИЧЕСТВО", "ВЕЩЕСТВО" });
            Units.Add(u);
            t = new Pullenti.Ner.Core.Termin("МОЛЬ")
            {
                Tag = u
            };
            t.AddAbridge("МЛЬ");
            t.AddVariant("МОЛ", false);
            t.AddVariant("MOL", false);
            t.AddVariant("ГРАММ МОЛЕКУЛА", false);
            Termins.Add(t);
            foreach (UnitsFactors f in new UnitsFactors[] { UnitsFactors.Mega, UnitsFactors.Kilo, UnitsFactors.Micro, UnitsFactors.Milli, UnitsFactors.Nano })
            {
                _addFactor(f, u, "МЛЬ", "MOL", "МОЛЬ", "МОЛЬ", "MOL");
            }
            u = new Unit("Бк", "Bq", "беккерель", "becquerel");
            u.Keywords.AddRange(new string[] { "АКТИВНОСТЬ", "РАДИОАКТИВНЫЙ", "ИЗЛУЧЕНИЕ", "ИСТОЧНИК" });
            Units.Add(u);
            t = new Pullenti.Ner.Core.Termin("БЕККЕРЕЛЬ")
            {
                Tag = u
            };
            t.AddAbridge("БК.");
            t.AddVariant("BQ.", false);
            t.AddVariant("БЕК", false);
            t.AddVariant("БЕКЕРЕЛЬ", false);
            t.AddVariant("BECQUEREL", false);
            Termins.Add(t);
            foreach (UnitsFactors f in new UnitsFactors[] { UnitsFactors.Mega, UnitsFactors.Kilo, UnitsFactors.Micro, UnitsFactors.Milli, UnitsFactors.Nano })
            {
                _addFactor(f, u, "БК.", "BQ.", "БЕККЕРЕЛЬ;БЕК", "БЕКЕРЕЛЬ", "BECQUEREL");
            }
            u = new Unit("См", "S", "сименс", "siemens");
            u.Keywords.AddRange(new string[] { "ПРОВОДИМОСТЬ", "ЭЛЕКТРИЧЕСКИЙ", "ПРОВОДНИК" });
            Units.Add(u);
            t = new Pullenti.Ner.Core.Termin("СИМЕНС")
            {
                Tag = u
            };
            t.AddAbridge("СМ.");
            t.AddAbridge("CM.");
            t.AddVariant("S.", false);
            t.AddVariant("SIEMENS", false);
            t.AddVariant("СІМЕНС", false);
            Termins.Add(t);
            foreach (UnitsFactors f in new UnitsFactors[] { UnitsFactors.Mega, UnitsFactors.Kilo, UnitsFactors.Micro, UnitsFactors.Milli, UnitsFactors.Nano })
            {
                _addFactor(f, u, "СМ.", "S.", "СИМЕНС", "СІМЕНС", "SIEMENS");
            }
            u = new Unit("кд", "cd", "кандела", "candela");
            u.Keywords.AddRange(new string[] { "СВЕТ", "СВЕТОВОЙ", "ПОТОК", "ИСТОЧНИК" });
            Units.Add(u);
            t = new Pullenti.Ner.Core.Termin("КАНДЕЛА")
            {
                Tag = u
            };
            t.AddAbridge("КД.");
            t.AddVariant("CD.", false);
            t.AddVariant("КАНДЕЛА", false);
            t.AddVariant("CANDELA", false);
            Termins.Add(t);
            u = new Unit("Па", "Pa", "паскаль", "pascal");
            u.Keywords.AddRange(new string[] { "ДАВЛЕНИЕ", "НАПРЯЖЕНИЕ", "ТЯЖЕСТЬ", "PRESSURE", "STRESS", "ТИСК", "НАПРУГА" });
            Units.Add(u);
            t = new Pullenti.Ner.Core.Termin("ПАСКАЛЬ")
            {
                Tag = u
            };
            t.AddAbridge("ПА");
            t.AddAbridge("РА");
            t.AddVariant("PA", false);
            t.AddVariant("PASCAL", false);
            Termins.Add(t);
            foreach (UnitsFactors f in new UnitsFactors[] { UnitsFactors.Kilo, UnitsFactors.Mega, UnitsFactors.Giga, UnitsFactors.Micro, UnitsFactors.Milli })
            {
                _addFactor(f, u, "ПА", "PA", "ПАСКАЛЬ", "ПАСКАЛЬ", "PASCAL");
            }
            uu = new Unit("бар", "bar", "бар", "bar")
            {
                BaseUnit = u, BaseMultiplier = 100000
            };
            Units.Add(uu);
            t = new Pullenti.Ner.Core.Termin("БАР")
            {
                Tag = uu
            };
            t.AddVariant("BAR", false);
            Termins.Add(t);
            uu = new Unit("мм.рт.ст.", "mm Hg", "миллиметр ртутного столба", "millimeter of mercury")
            {
                BaseUnit = u, BaseMultiplier = 133.332
            };
            Units.Add(uu);
            t = new Pullenti.Ner.Core.Termin("МИЛЛИМЕТР РТУТНОГО СТОЛБА")
            {
                Tag = uu
            };
            t.AddAbridge("ММ.РТ.СТ.");
            t.AddAbridge("MM.PT.CT");
            t.AddAbridge("MM HG");
            t.AddVariant("MMGH", false);
            t.AddVariant("ТОРР", false);
            t.AddVariant("TORR", false);
            t.AddVariant("MILLIMETER OF MERCURY", false);
            Termins.Add(t);
            u = new Unit("бит", "bit", "бит", "bit");
            u.Keywords.AddRange(new string[] { "ОБЪЕМ", "РАЗМЕР", "ПАМЯТЬ", "ЕМКОСТЬ", "ПЕРЕДАЧА", "ПРИЕМ", "ОТПРАВКА", "ОП", "ДИСК", "НАКОПИТЕЛЬ", "КЭШ", "ОБСЯГ", "РОЗМІР", "ВІДПРАВЛЕННЯ", "VOLUME", "SIZE", "MEMORY", "TRANSFER", "SEND", "RECEPTION", "RAM", "DISK", "HDD", "RAM", "ROM", "CD-ROM", "CASHE" });
            Units.Add(u);
            t = new Pullenti.Ner.Core.Termin("БИТ")
            {
                Tag = u
            };
            t.AddVariant("BIT", false);
            Termins.Add(t);
            foreach (UnitsFactors f in new UnitsFactors[] { UnitsFactors.Kilo, UnitsFactors.Mega, UnitsFactors.Giga, UnitsFactors.Tera })
            {
                _addFactor(f, u, "БИТ", "BIT", "БИТ", "БИТ", "BIT");
            }
            uu          = new Unit("б", "b", "байт", "byte");
            uu.Keywords = u.Keywords;
            Units.Add(uu);
            t = new Pullenti.Ner.Core.Termin("БАЙТ")
            {
                Tag = uu
            };
            t.AddVariant("BYTE", false);
            t.AddAbridge("B.");
            t.AddAbridge("Б.");
            t.AddAbridge("В.");
            Termins.Add(t);
            foreach (UnitsFactors f in new UnitsFactors[] { UnitsFactors.Kilo, UnitsFactors.Mega, UnitsFactors.Giga, UnitsFactors.Tera })
            {
                _addFactor(f, uu, "Б.", "B.", "БАЙТ", "БАЙТ", "BYTE");
            }
            u = new Unit("бод", "Bd", "бод", "baud");
            u.Keywords.AddRange(new string[] { "СКОРОСТЬ", "ПЕРЕДАЧА", "ПРИЕМ", "ДАННЫЕ", "ОТПРАВКА" });
            Units.Add(u);
            t = new Pullenti.Ner.Core.Termin("БОД")
            {
                Tag = u
            };
            t.AddAbridge("BD");
            t.AddVariant("BAUD", false);
            Termins.Add(t);
            foreach (UnitsFactors f in new UnitsFactors[] { UnitsFactors.Kilo, UnitsFactors.Mega, UnitsFactors.Giga, UnitsFactors.Tera })
            {
                _addFactor(f, uu, "БОД", "BD.", "БОД", "БОД", "BAUD");
            }
            u = new Unit("гс", "gf", "грамм-сила", "gram-force");
            u.Keywords.AddRange(new string[] { "СИЛА", "ДАВЛЕНИЕ" });
            Units.Add(u);
            t = new Pullenti.Ner.Core.Termin("ГРАММ СИЛА")
            {
                Tag = u
            };
            t.AddAbridge("ГС");
            t.AddVariant("POND", false);
            t.AddVariant("ГРАМ СИЛА", false);
            t.AddAbridge("GP.");
            t.AddVariant("GRAM POND", false);
            t.AddVariant("GRAM FORCE", false);
            Termins.Add(t);
            uu = new Unit("кгс", "kgf", "килограмм-сила", "kilogram-force")
            {
                BaseUnit = u, BaseMultiplier = 1000
            };
            Units.Add(uu);
            t = new Pullenti.Ner.Core.Termin("КИЛОГРАММ СИЛА")
            {
                Tag = uu
            };
            t.AddAbridge("КГС");
            t.AddVariant("KILOPOND", false);
            t.AddVariant("КІЛОГРАМ СИЛА", false);
            t.AddAbridge("KP.");
            t.AddVariant("KILOGRAM POND", false);
            Termins.Add(t);
            u = new Unit("dpi", "точек на дюйм", "dpi", "dots per inch");
            u.Keywords.AddRange(new string[] { "РАЗРЕШЕНИЕ", "ЭКРАН", "МОНИТОР" });
            Units.Add(u);
            t = new Pullenti.Ner.Core.Termin("DOTS PER INCH")
            {
                Tag = u
            };
            t.AddVariant("DPI", false);
            Termins.Add(t);
            u = new Unit("IP", "IP", "IP", "IP")
            {
                Kind = Pullenti.Ner.Measure.MeasureKind.Ip
            };
            u.Keywords.AddRange(new string[] { "ЗАЩИТА", "КЛАСС ЗАЩИТЫ", "PROTECTION", "PROTACTION RATING" });
            Units.Add(u);
            t = new Pullenti.Ner.Core.Termin("IP")
            {
                Tag = u
            };
            Termins.Add(t);
            Pullenti.Ner.Core.Termin.AssignAllTextsAsNormal = false;
        }
コード例 #23
0
 internal static void Initialize()
 {
     if (m_Postfixes != null)
     {
         return;
     }
     Pullenti.Ner.Core.Termin t;
     m_Postfixes = new Pullenti.Ner.Core.TerminCollection();
     t           = new Pullenti.Ner.Core.Termin("КВАДРАТНЫЙ МЕТР", Pullenti.Morph.MorphLang.RU, true)
     {
         CanonicText = "кв.м.", Tag = Pullenti.Ner.Core.NumberExType.Meter2
     };
     t.AddAbridge("КВ.МЕТР");
     t.AddAbridge("КВ.МЕТРА");
     t.AddAbridge("КВ.М.");
     m_Postfixes.Add(t);
     t = new Pullenti.Ner.Core.Termin("КВАДРАТНИЙ МЕТР", Pullenti.Morph.MorphLang.UA, true)
     {
         CanonicText = "КВ.М.", Tag = Pullenti.Ner.Core.NumberExType.Meter2
     };
     t.AddAbridge("КВ.МЕТР");
     t.AddAbridge("КВ.МЕТРА");
     t.AddAbridge("КВ.М.");
     m_Postfixes.Add(t);
     t = new Pullenti.Ner.Core.Termin("КВАДРАТНЫЙ КИЛОМЕТР", Pullenti.Morph.MorphLang.RU, true)
     {
         CanonicText = "кв.км.", Tag = Pullenti.Ner.Core.NumberExType.Kilometer2
     };
     t.AddVariant("КВАДРАТНИЙ КІЛОМЕТР", true);
     t.AddAbridge("КВ.КМ.");
     m_Postfixes.Add(t);
     t = new Pullenti.Ner.Core.Termin("ГЕКТАР", Pullenti.Morph.MorphLang.RU, true)
     {
         CanonicText = "га", Tag = Pullenti.Ner.Core.NumberExType.Gektar
     };
     t.AddAbridge("ГА");
     m_Postfixes.Add(t);
     t = new Pullenti.Ner.Core.Termin("АР", Pullenti.Morph.MorphLang.RU, true)
     {
         CanonicText = "ар", Tag = Pullenti.Ner.Core.NumberExType.Ar
     };
     t.AddVariant("СОТКА", true);
     m_Postfixes.Add(t);
     t = new Pullenti.Ner.Core.Termin("КУБИЧЕСКИЙ МЕТР", Pullenti.Morph.MorphLang.RU, true)
     {
         CanonicText = "куб.м.", Tag = Pullenti.Ner.Core.NumberExType.Meter3
     };
     t.AddVariant("КУБІЧНИЙ МЕТР", true);
     t.AddAbridge("КУБ.МЕТР");
     t.AddAbridge("КУБ.М.");
     m_Postfixes.Add(t);
     t = new Pullenti.Ner.Core.Termin("МЕТР", Pullenti.Morph.MorphLang.RU, true)
     {
         CanonicText = "м.", Tag = Pullenti.Ner.Core.NumberExType.Meter
     };
     t.AddAbridge("М.");
     t.AddAbridge("M.");
     m_Postfixes.Add(t);
     t = new Pullenti.Ner.Core.Termin("МЕТРОВЫЙ", Pullenti.Morph.MorphLang.RU, true)
     {
         CanonicText = "м.", Tag = Pullenti.Ner.Core.NumberExType.Meter
     };
     t.AddVariant("МЕТРОВИЙ", true);
     m_Postfixes.Add(t);
     t = new Pullenti.Ner.Core.Termin("МИЛЛИМЕТР", Pullenti.Morph.MorphLang.RU, true)
     {
         CanonicText = "мм.", Tag = Pullenti.Ner.Core.NumberExType.Millimeter
     };
     t.AddAbridge("ММ");
     t.AddAbridge("MM");
     t.AddVariant("МІЛІМЕТР", true);
     m_Postfixes.Add(t);
     t = new Pullenti.Ner.Core.Termin("МИЛЛИМЕТРОВЫЙ", Pullenti.Morph.MorphLang.RU, true)
     {
         CanonicText = "мм.", Tag = Pullenti.Ner.Core.NumberExType.Millimeter
     };
     t.AddVariant("МІЛІМЕТРОВИЙ", true);
     m_Postfixes.Add(t);
     t = new Pullenti.Ner.Core.Termin("САНТИМЕТР", Pullenti.Morph.MorphLang.RU, true)
     {
         CanonicText = "см.", Tag = Pullenti.Ner.Core.NumberExType.Santimeter
     };
     t.AddAbridge("СМ");
     t.AddAbridge("CM");
     m_Postfixes.Add(t);
     t = new Pullenti.Ner.Core.Termin("САНТИМЕТРОВЫЙ", Pullenti.Morph.MorphLang.RU, true)
     {
         CanonicText = "см.", Tag = Pullenti.Ner.Core.NumberExType.Santimeter
     };
     t.AddVariant("САНТИМЕТРОВИЙ", true);
     m_Postfixes.Add(t);
     t = new Pullenti.Ner.Core.Termin("КВАДРАТНЫЙ САНТИМЕТР", Pullenti.Morph.MorphLang.RU, true)
     {
         CanonicText = "кв.см.", Tag = Pullenti.Ner.Core.NumberExType.Santimeter2
     };
     t.AddVariant("КВАДРАТНИЙ САНТИМЕТР", true);
     t.AddAbridge("КВ.СМ.");
     t.AddAbridge("СМ.КВ.");
     m_Postfixes.Add(t);
     t = new Pullenti.Ner.Core.Termin("КУБИЧЕСКИЙ САНТИМЕТР", Pullenti.Morph.MorphLang.RU, true)
     {
         CanonicText = "куб.см.", Tag = Pullenti.Ner.Core.NumberExType.Santimeter3
     };
     t.AddVariant("КУБІЧНИЙ САНТИМЕТР", true);
     t.AddAbridge("КУБ.САНТИМЕТР");
     t.AddAbridge("КУБ.СМ.");
     t.AddAbridge("СМ.КУБ.");
     m_Postfixes.Add(t);
     t = new Pullenti.Ner.Core.Termin("КИЛОМЕТР", Pullenti.Morph.MorphLang.RU, true)
     {
         CanonicText = "км.", Tag = Pullenti.Ner.Core.NumberExType.Kilometer
     };
     t.AddAbridge("КМ");
     t.AddAbridge("KM");
     t.AddVariant("КІЛОМЕТР", true);
     m_Postfixes.Add(t);
     t = new Pullenti.Ner.Core.Termin("КИЛОМЕТРОВЫЙ", Pullenti.Morph.MorphLang.RU, true)
     {
         CanonicText = "км.", Tag = Pullenti.Ner.Core.NumberExType.Kilometer
     };
     t.AddVariant("КІЛОМЕТРОВИЙ", true);
     m_Postfixes.Add(t);
     t = new Pullenti.Ner.Core.Termin("МИЛЯ", Pullenti.Morph.MorphLang.RU, true)
     {
         CanonicText = "миль", Tag = Pullenti.Ner.Core.NumberExType.Kilometer
     };
     m_Postfixes.Add(t);
     t = new Pullenti.Ner.Core.Termin("ГРАММ", Pullenti.Morph.MorphLang.RU, true)
     {
         CanonicText = "гр.", Tag = Pullenti.Ner.Core.NumberExType.Gramm
     };
     t.AddAbridge("ГР");
     t.AddAbridge("Г");
     t.AddVariant("ГРАМ", true);
     m_Postfixes.Add(t);
     t = new Pullenti.Ner.Core.Termin("ГРАММОВЫЙ", Pullenti.Morph.MorphLang.RU, true)
     {
         CanonicText = "гр.", Tag = Pullenti.Ner.Core.NumberExType.Gramm
     };
     m_Postfixes.Add(t);
     t = new Pullenti.Ner.Core.Termin("КИЛОГРАММ", Pullenti.Morph.MorphLang.RU, true)
     {
         CanonicText = "кг.", Tag = Pullenti.Ner.Core.NumberExType.Kilogram
     };
     t.AddAbridge("КГ");
     t.AddVariant("КІЛОГРАМ", true);
     m_Postfixes.Add(t);
     t = new Pullenti.Ner.Core.Termin("КИЛОГРАММОВЫЙ", Pullenti.Morph.MorphLang.RU, true)
     {
         CanonicText = "кг.", Tag = Pullenti.Ner.Core.NumberExType.Kilogram
     };
     t.AddVariant("КІЛОГРАМОВИЙ", true);
     m_Postfixes.Add(t);
     t = new Pullenti.Ner.Core.Termin("МИЛЛИГРАММ", Pullenti.Morph.MorphLang.RU, true)
     {
         CanonicText = "мг.", Tag = Pullenti.Ner.Core.NumberExType.Milligram
     };
     t.AddAbridge("МГ");
     t.AddVariant("МІЛІГРАМ", true);
     m_Postfixes.Add(t);
     t = new Pullenti.Ner.Core.Termin("МИЛЛИГРАММОВЫЙ", Pullenti.Morph.MorphLang.RU, true)
     {
         CanonicText = "мг.", Tag = Pullenti.Ner.Core.NumberExType.Milligram
     };
     t.AddVariant("МИЛЛИГРАМОВЫЙ", true);
     t.AddVariant("МІЛІГРАМОВИЙ", true);
     m_Postfixes.Add(t);
     t = new Pullenti.Ner.Core.Termin("ТОННА", Pullenti.Morph.MorphLang.RU, true)
     {
         CanonicText = "т.", Tag = Pullenti.Ner.Core.NumberExType.Tonna
     };
     t.AddAbridge("Т");
     t.AddAbridge("T");
     m_Postfixes.Add(t);
     t = new Pullenti.Ner.Core.Termin("ТОННЫЙ", Pullenti.Morph.MorphLang.RU, true)
     {
         CanonicText = "т.", Tag = Pullenti.Ner.Core.NumberExType.Tonna
     };
     t.AddVariant("ТОННИЙ", true);
     m_Postfixes.Add(t);
     t = new Pullenti.Ner.Core.Termin("ЛИТР", Pullenti.Morph.MorphLang.RU, true)
     {
         CanonicText = "л.", Tag = Pullenti.Ner.Core.NumberExType.Litr
     };
     t.AddAbridge("Л");
     t.AddVariant("ЛІТР", true);
     m_Postfixes.Add(t);
     t = new Pullenti.Ner.Core.Termin("ЛИТРОВЫЙ", Pullenti.Morph.MorphLang.RU, true)
     {
         CanonicText = "л.", Tag = Pullenti.Ner.Core.NumberExType.Litr
     };
     t.AddVariant("ЛІТРОВИЙ", true);
     m_Postfixes.Add(t);
     t = new Pullenti.Ner.Core.Termin("МИЛЛИЛИТР", Pullenti.Morph.MorphLang.RU, true)
     {
         CanonicText = "мл.", Tag = Pullenti.Ner.Core.NumberExType.Millilitr
     };
     t.AddAbridge("МЛ");
     t.AddVariant("МІЛІЛІТР", true);
     m_Postfixes.Add(t);
     t = new Pullenti.Ner.Core.Termin("МИЛЛИЛИТРОВЫЙ", Pullenti.Morph.MorphLang.RU, true)
     {
         CanonicText = "мл.", Tag = Pullenti.Ner.Core.NumberExType.Millilitr
     };
     t.AddVariant("МІЛІЛІТРОВИЙ", true);
     m_Postfixes.Add(t);
     t = new Pullenti.Ner.Core.Termin("ЧАС", Pullenti.Morph.MorphLang.RU, true)
     {
         CanonicText = "ч.", Tag = Pullenti.Ner.Core.NumberExType.Hour
     };
     t.AddAbridge("Ч.");
     t.AddVariant("ГОДИНА", true);
     m_Postfixes.Add(t);
     t = new Pullenti.Ner.Core.Termin("МИНУТА", Pullenti.Morph.MorphLang.RU, true)
     {
         CanonicText = "мин.", Tag = Pullenti.Ner.Core.NumberExType.Minute
     };
     t.AddAbridge("МИН.");
     t.AddVariant("ХВИЛИНА", true);
     m_Postfixes.Add(t);
     t = new Pullenti.Ner.Core.Termin("СЕКУНДА", Pullenti.Morph.MorphLang.RU, true)
     {
         CanonicText = "сек.", Tag = Pullenti.Ner.Core.NumberExType.Second
     };
     t.AddAbridge("СЕК.");
     m_Postfixes.Add(t);
     t = new Pullenti.Ner.Core.Termin("ГОД", Pullenti.Morph.MorphLang.RU, true)
     {
         CanonicText = "г.", Tag = Pullenti.Ner.Core.NumberExType.Year
     };
     t.AddAbridge("Г.");
     t.AddAbridge("ЛЕТ");
     t.AddVariant("ЛЕТНИЙ", true);
     m_Postfixes.Add(t);
     t = new Pullenti.Ner.Core.Termin("МЕСЯЦ", Pullenti.Morph.MorphLang.RU, true)
     {
         CanonicText = "мес.", Tag = Pullenti.Ner.Core.NumberExType.Month
     };
     t.AddAbridge("МЕС.");
     t.AddVariant("МЕСЯЧНЫЙ", true);
     t.AddVariant("КАЛЕНДАРНЫЙ МЕСЯЦ", true);
     m_Postfixes.Add(t);
     t = new Pullenti.Ner.Core.Termin("ДЕНЬ", Pullenti.Morph.MorphLang.RU, true)
     {
         CanonicText = "дн.", Tag = Pullenti.Ner.Core.NumberExType.Day
     };
     t.AddAbridge("ДН.");
     t.AddVariant("ДНЕВНЫЙ", true);
     t.AddVariant("СУТКИ", true);
     t.AddVariant("СУТОЧНЫЙ", true);
     t.AddVariant("КАЛЕНДАРНЫЙ ДЕНЬ", true);
     t.AddVariant("РАБОЧИЙ ДЕНЬ", true);
     m_Postfixes.Add(t);
     t = new Pullenti.Ner.Core.Termin("НЕДЕЛЯ", Pullenti.Morph.MorphLang.RU, true)
     {
         CanonicText = "нед.", Tag = Pullenti.Ner.Core.NumberExType.Week
     };
     t.AddVariant("НЕДЕЛЬНЫЙ", true);
     t.AddVariant("КАЛЕНДАРНАЯ НЕДЕЛЯ", false);
     m_Postfixes.Add(t);
     t = new Pullenti.Ner.Core.Termin("ПРОЦЕНТ", Pullenti.Morph.MorphLang.RU, true)
     {
         CanonicText = "%", Tag = Pullenti.Ner.Core.NumberExType.Percent
     };
     t.AddVariant("%", false);
     t.AddVariant("ПРОЦ", true);
     t.AddAbridge("ПРОЦ.");
     m_Postfixes.Add(t);
     t = new Pullenti.Ner.Core.Termin("ШТУКА", Pullenti.Morph.MorphLang.RU, true)
     {
         CanonicText = "шт.", Tag = Pullenti.Ner.Core.NumberExType.Shuk
     };
     t.AddVariant("ШТ", false);
     t.AddAbridge("ШТ.");
     t.AddAbridge("ШТ-К");
     m_Postfixes.Add(t);
     t = new Pullenti.Ner.Core.Termin("УПАКОВКА", Pullenti.Morph.MorphLang.RU, true)
     {
         CanonicText = "уп.", Tag = Pullenti.Ner.Core.NumberExType.Upak
     };
     t.AddVariant("УПАК", true);
     t.AddVariant("УП", true);
     t.AddAbridge("УПАК.");
     t.AddAbridge("УП.");
     t.AddAbridge("УП-КА");
     m_Postfixes.Add(t);
     t = new Pullenti.Ner.Core.Termin("РУЛОН", Pullenti.Morph.MorphLang.RU, true)
     {
         CanonicText = "рулон", Tag = Pullenti.Ner.Core.NumberExType.Rulon
     };
     t.AddVariant("РУЛ", true);
     t.AddAbridge("РУЛ.");
     m_Postfixes.Add(t);
     t = new Pullenti.Ner.Core.Termin("НАБОР", Pullenti.Morph.MorphLang.RU, true)
     {
         CanonicText = "набор", Tag = Pullenti.Ner.Core.NumberExType.Nabor
     };
     t.AddVariant("НАБ", true);
     t.AddAbridge("НАБ.");
     m_Postfixes.Add(t);
     t = new Pullenti.Ner.Core.Termin("КОМПЛЕКТ", Pullenti.Morph.MorphLang.RU, true)
     {
         CanonicText = "компл.", Tag = Pullenti.Ner.Core.NumberExType.Komplekt
     };
     t.AddVariant("КОМПЛ", true);
     t.AddAbridge("КОМПЛ.");
     m_Postfixes.Add(t);
     t = new Pullenti.Ner.Core.Termin("ПАРА", Pullenti.Morph.MorphLang.RU, true)
     {
         CanonicText = "пар", Tag = Pullenti.Ner.Core.NumberExType.Para
     };
     m_Postfixes.Add(t);
     t = new Pullenti.Ner.Core.Termin("ФЛАКОН", Pullenti.Morph.MorphLang.RU, true)
     {
         CanonicText = "флак.", Tag = Pullenti.Ner.Core.NumberExType.Flakon
     };
     t.AddVariant("ФЛ", true);
     t.AddAbridge("ФЛ.");
     t.AddVariant("ФЛАК", true);
     t.AddAbridge("ФЛАК.");
     m_Postfixes.Add(t);
     foreach (Pullenti.Ner.Core.Termin te in m_Postfixes.Termins)
     {
         Pullenti.Ner.Core.NumberExType ty = (Pullenti.Ner.Core.NumberExType)te.Tag;
         if (!m_NormalsTyps.ContainsKey(ty))
         {
             m_NormalsTyps.Add(ty, te.CanonicText);
         }
     }
     m_SmallMoney = new Pullenti.Ner.Core.TerminCollection();
     t            = new Pullenti.Ner.Core.Termin("УСЛОВНАЯ ЕДИНИЦА")
     {
         CanonicText = "УЕ", Tag = Pullenti.Ner.Core.NumberExType.Money
     };
     t.AddAbridge("У.Е.");
     t.AddAbridge("У.E.");
     t.AddAbridge("Y.Е.");
     t.AddAbridge("Y.E.");
     m_Postfixes.Add(t);
     for (int k = 0; k < 3; k++)
     {
         string str = ResourceHelper.GetString((k == 0 ? "Money.csv" : (k == 1 ? "MoneyUA.csv" : "MoneyEN.csv")));
         if (str == null)
         {
             continue;
         }
         Pullenti.Morph.MorphLang lang = (k == 0 ? Pullenti.Morph.MorphLang.RU : (k == 1 ? Pullenti.Morph.MorphLang.UA : Pullenti.Morph.MorphLang.EN));
         if (str == null)
         {
             continue;
         }
         foreach (string line0 in str.Split('\n'))
         {
             string line = line0.Trim();
             if (string.IsNullOrEmpty(line))
             {
                 continue;
             }
             string[] parts = line.ToUpper().Split(';');
             if (parts == null || parts.Length != 5)
             {
                 continue;
             }
             if (string.IsNullOrEmpty(parts[1]) || string.IsNullOrEmpty(parts[2]))
             {
                 continue;
             }
             t = new Pullenti.Ner.Core.Termin();
             t.InitByNormalText(parts[1], lang);
             t.CanonicText = parts[2];
             t.Acronym     = parts[2];
             t.Tag         = Pullenti.Ner.Core.NumberExType.Money;
             foreach (string p in parts[0].Split(','))
             {
                 if (p != parts[1])
                 {
                     Pullenti.Ner.Core.Termin t0 = new Pullenti.Ner.Core.Termin();
                     t0.InitByNormalText(p, null);
                     t.AddVariantTerm(t0);
                 }
             }
             if (parts[1] == "РУБЛЬ")
             {
                 t.AddAbridge("РУБ.");
             }
             else if (parts[1] == "ГРИВНЯ" || parts[1] == "ГРИВНА")
             {
                 t.AddAbridge("ГРН.");
             }
             else if (parts[1] == "ДОЛЛАР")
             {
                 t.AddAbridge("ДОЛ.");
                 t.AddAbridge("ДОЛЛ.");
             }
             else if (parts[1] == "ДОЛАР")
             {
                 t.AddAbridge("ДОЛ.");
             }
             else if (parts[1] == "ИЕНА")
             {
                 t.AddVariant("ЙЕНА", false);
             }
             m_Postfixes.Add(t);
             if (string.IsNullOrEmpty(parts[3]))
             {
                 continue;
             }
             int num = 0;
             int i   = parts[3].IndexOf(' ');
             if (i < 2)
             {
                 continue;
             }
             if (!int.TryParse(parts[3].Substring(0, i), out num))
             {
                 continue;
             }
             string vv = parts[3].Substring(i).Trim();
             t = new Pullenti.Ner.Core.Termin();
             t.InitByNormalText(parts[4], lang);
             t.Tag = num;
             if (vv != parts[4])
             {
                 Pullenti.Ner.Core.Termin t0 = new Pullenti.Ner.Core.Termin();
                 t0.InitByNormalText(vv, null);
                 t.AddVariantTerm(t0);
             }
             if (parts[4] == "КОПЕЙКА" || parts[4] == "КОПІЙКА")
             {
                 t.AddAbridge("КОП.");
             }
             m_SmallMoney.Add(t);
         }
     }
 }
コード例 #24
0
 public static void Initialize()
 {
     if (m_Ontology != null)
     {
         return;
     }
     m_Ontology = new Pullenti.Ner.Core.TerminCollection();
     Pullenti.Ner.Core.Termin t;
     t = new Pullenti.Ner.Core.Termin("ПАСПОРТ")
     {
         Tag = Typs.Keyword
     };
     t.AddVariant("ПАССПОРТ", false);
     t.AddVariant("ПАСПОРТНЫЕ ДАННЫЕ", false);
     t.AddVariant("ВНУТРЕННИЙ ПАСПОРТ", false);
     m_Ontology.Add(t);
     t = new Pullenti.Ner.Core.Termin("ЗАГРАНИЧНЫЙ ПАСПОРТ")
     {
         Tag = Typs.Keyword
     };
     t.AddVariant("ЗАГРАНПАСПОРТ", false);
     t.AddAbridge("ЗАГРАН. ПАСПОРТ");
     m_Ontology.Add(t);
     t = new Pullenti.Ner.Core.Termin("УДОСТОВЕРЕНИЕ ЛИЧНОСТИ")
     {
         Tag = Typs.Keyword
     };
     t.AddVariant("УДОСТОВЕРЕНИЕ ЛИЧНОСТИ ОФИЦЕРА", false);
     m_Ontology.Add(t);
     t = new Pullenti.Ner.Core.Termin("СВИДЕТЕЛЬСТВО О ГОСУДАРСТВЕННОЙ РЕГИСТРАЦИИ ФИЗИЧЕСКОГО ЛИЦА В КАЧЕСТВЕ ИНДИВИДУАЛЬНОГО ПРЕДПРИНИМАТЕЛЯ")
     {
         Tag = Typs.Keyword
     };
     t.AddVariant("СВИДЕТЕЛЬСТВО О ГОСУДАРСТВЕННОЙ РЕГИСТРАЦИИ ФИЗИЧЕСКОГО ЛИЦА В КАЧЕСТВЕ ИП", false);
     t.AddVariant("СВИДЕТЕЛЬСТВО О ГОСРЕГИСТРАЦИИ ФИЗЛИЦА В КАЧЕСТВЕ ИП", false);
     t.AddVariant("СВИДЕТЕЛЬСТВО ГОСУДАРСТВЕННОЙ РЕГИСТРАЦИИ", false);
     m_Ontology.Add(t);
     t = new Pullenti.Ner.Core.Termin("ВОДИТЕЛЬСКОЕ УДОСТОВЕРЕНИЕ")
     {
         Tag = Typs.Keyword
     };
     m_Ontology.Add(t);
     t = new Pullenti.Ner.Core.Termin("ЛИЦЕНЗИЯ")
     {
         Tag = Typs.Keyword
     };
     m_Ontology.Add(t);
     t = new Pullenti.Ner.Core.Termin("СЕРИЯ")
     {
         Tag = Typs.Seria
     };
     t.AddAbridge("СЕР.");
     t.AddVariant("СЕРИ", false);
     m_Ontology.Add(t);
     t = new Pullenti.Ner.Core.Termin("НОМЕР")
     {
         Tag = Typs.Number
     };
     t.AddAbridge("НОМ.");
     t.AddAbridge("Н-Р");
     t.AddVariant("№", false);
     t.AddVariant("N", false);
     m_Ontology.Add(t);
     t = new Pullenti.Ner.Core.Termin("ВЫДАТЬ")
     {
         Tag = Typs.Vidan
     };
     t.AddVariant("ВЫДАВАТЬ", false);
     t.AddVariant("ДАТА ВЫДАЧИ", false);
     t.AddVariant("ДАТА РЕГИСТРАЦИИ", false);
     m_Ontology.Add(t);
     t = new Pullenti.Ner.Core.Termin("КОД ПОДРАЗДЕЛЕНИЯ")
     {
         Tag = Typs.Code
     };
     t.AddAbridge("К/П");
     t.AddAbridge("К.П.");
     m_Ontology.Add(t);
     t = new Pullenti.Ner.Core.Termin("РЕГИСТРАЦИЯ")
     {
         Tag = Typs.Address
     };
     t.AddVariant("ЗАРЕГИСТРИРОВАН", false);
     t.AddVariant("АДРЕС РЕГИСТРАЦИИ", false);
     t.AddVariant("ЗАРЕГИСТРИРОВАННЫЙ", false);
     t.AddAbridge("ПРОПИСАН");
     t.AddVariant("АДРЕС ПРОПИСКИ", false);
     t.AddVariant("АДРЕС ПО ПРОПИСКЕ", false);
     m_Ontology.Add(t);
 }
コード例 #25
0
 internal static void Initialize()
 {
     if (m_Types != null)
     {
         return;
     }
     m_Types = new Pullenti.Ner.Core.TerminCollection();
     m_Names = new Pullenti.Ner.Core.TerminCollection();
     Pullenti.Ner.Core.Termin t;
     foreach (string s in new string[] { "ПЛАНЕТА", "ЗВЕЗДА", "КОМЕТА", "МЕТЕОРИТ", "СОЗВЕЗДИЕ", "ГАЛАКТИКА" })
     {
         t = new Pullenti.Ner.Core.Termin();
         t.InitByNormalText(s, null);
         t.Tag = Pullenti.Ner.Named.NamedEntityKind.Planet;
         m_Types.Add(t);
     }
     foreach (string s in new string[] { "СОЛНЦЕ", "МЕРКУРИЙ", "ВЕНЕРА", "ЗЕМЛЯ", "МАРС", "ЮПИТЕР", "САТУРН", "УРАН", "НЕПТУН", "ПЛУТОН", "ЛУНА", "ДЕЙМОС", "ФОБОС", "Ио", "Ганимед", "Каллисто" })
     {
         t = new Pullenti.Ner.Core.Termin();
         t.InitByNormalText(s.ToUpper(), null);
         t.Tag = Pullenti.Ner.Named.NamedEntityKind.Planet;
         m_Names.Add(t);
     }
     foreach (string s in new string[] { "РЕКА", "ОЗЕРО", "МОРЕ", "ОКЕАН", "ЗАЛИВ", "ПРОЛИВ", "ПОБЕРЕЖЬЕ", "КОНТИНЕНТ", "ОСТРОВ", "ПОЛУОСТРОВ", "МЫС", "ГОРА", "ГОРНЫЙ ХРЕБЕТ", "ПЕРЕВАЛ", "ЛЕС", "САД", "ЗАПОВЕДНИК", "ЗАКАЗНИК", "ДОЛИНА", "УЩЕЛЬЕ", "РАВНИНА", "БЕРЕГ" })
     {
         t = new Pullenti.Ner.Core.Termin();
         t.InitByNormalText(s, null);
         t.Tag = Pullenti.Ner.Named.NamedEntityKind.Location;
         m_Types.Add(t);
     }
     foreach (string s in new string[] { "ТИХИЙ", "АТЛАНТИЧЕСКИЙ", "ИНДИЙСКИЙ", "СЕВЕРО-ЛЕДОВИТЫЙ" })
     {
         t = new Pullenti.Ner.Core.Termin();
         t.InitByNormalText(s, null);
         t.Tag  = Pullenti.Ner.Named.NamedEntityKind.Location;
         t.Tag2 = "океан";
         m_Names.Add(t);
     }
     foreach (string s in new string[] { "ЕВРАЗИЯ", "АФРИКА", "АМЕРИКА", "АВСТРАЛИЯ", "АНТАРКТИДА" })
     {
         t = new Pullenti.Ner.Core.Termin();
         t.InitByNormalText(s, null);
         t.Tag  = Pullenti.Ner.Named.NamedEntityKind.Location;
         t.Tag2 = "континент";
         m_Names.Add(t);
     }
     foreach (string s in new string[] { "ВОЛГА", "НЕВА", "АМУР", "ОБЪ", "АНГАРА", "ЛЕНА", "ИРТЫШ", "ДНЕПР", "ДОН", "ДНЕСТР", "РЕЙН", "АМУДАРЬЯ", "СЫРДАРЬЯ", "ТИГР", "ЕВФРАТ", "ИОРДАН", "МИССИСИПИ", "АМАЗОНКА", "ТЕМЗА", "СЕНА", "НИЛ", "ЯНЦЗЫ", "ХУАНХЭ", "ПАРАНА", "МЕКОНГ", "МАККЕНЗИ", "НИГЕР", "ЕНИСЕЙ", "МУРРЕЙ", "САЛУИН", "ИНД", "РИО-ГРАНДЕ", "БРАХМАПУТРА", "ДАРЛИНГ", "ДУНАЙ", "ЮКОН", "ГАНГ", "МАРРАМБИДЖИ", "ЗАМБЕЗИ", "ТОКАНТИС", "ОРИНОКО", "СИЦЗЯН", "КОЛЫМА", "КАМА", "ОКА", "ЭЛЬЮА", "ВИСЛА", "ДАУГАВА", "ЗАПАДНАЯ ДВИНА", "НЕМАН", "МЕЗЕНЬ", "КУБАНЬ", "ЮЖНЫЙ БУГ" })
     {
         t = new Pullenti.Ner.Core.Termin();
         t.InitByNormalText(s, null);
         t.Tag  = Pullenti.Ner.Named.NamedEntityKind.Location;
         t.Tag2 = "река";
         m_Names.Add(t);
     }
     foreach (string s in new string[] { "ЕВРОПА", "АЗИЯ", "АРКТИКА", "КАВКАЗ", "ПРИБАЛТИКА", "СИБИРЬ", "ЗАПОЛЯРЬЕ", "ЧУКОТКА", "ПРИБАЛТИКА", "БАЛКАНЫ", "СКАНДИНАВИЯ", "ОКЕАНИЯ", "АЛЯСКА", "УРАЛ", "ПОВОЛЖЬЕ", "ПРИМОРЬЕ", "КУРИЛЫ", "ТИБЕТ", "ГИМАЛАИ", "АЛЬПЫ", "САХАРА", "ГОБИ", "СИНАЙ", "БАЙКОНУР", "ЧЕРНОБЫЛЬ", "САДОВОЕ КОЛЬЦО", "СТАРЫЙ ГОРОД" })
     {
         t = new Pullenti.Ner.Core.Termin();
         t.InitByNormalText(s, null);
         t.Tag = Pullenti.Ner.Named.NamedEntityKind.Location;
         m_Names.Add(t);
     }
     foreach (string s in new string[] { "ПАМЯТНИК", "МОНУМЕНТ", "МЕМОРИАЛ", "БЮСТ", "ОБЕЛИСК" })
     {
         t = new Pullenti.Ner.Core.Termin();
         t.InitByNormalText(s, null);
         t.Tag = Pullenti.Ner.Named.NamedEntityKind.Monument;
         m_Types.Add(t);
     }
     foreach (string s in new string[] { "ДВОРЕЦ", "КРЕМЛЬ", "ЗАМОК", "УСАДЬБА", "ДОМ", "ЗДАНИЕ", "ШТАБ-КВАРТИРА", "ЖЕЛЕЗНОДОРОЖНЫЙ ВОКЗАЛ", "ВОКЗАЛ", "АВТОВОКЗАЛ", "АЭРОПОРТ", "АЭРОДРОМ" })
     {
         t = new Pullenti.Ner.Core.Termin();
         t.InitByNormalText(s, null);
         t.Tag = Pullenti.Ner.Named.NamedEntityKind.Building;
         m_Types.Add(t);
     }
     foreach (string s in new string[] { "КРЕМЛЬ", "КАПИТОЛИЙ", "БЕЛЫЙ ДОМ" })
     {
         t = new Pullenti.Ner.Core.Termin();
         t.InitByNormalText(s, null);
         t.Tag = Pullenti.Ner.Named.NamedEntityKind.Building;
         m_Names.Add(t);
     }
     t = new Pullenti.Ner.Core.Termin("МЕЖДУНАРОДНАЯ КОСМИЧЕСКАЯ СТАНЦИЯ")
     {
         Tag = Pullenti.Ner.Named.NamedEntityKind.Building
     };
     t.Acronym = "МКС";
     m_Names.Add(t);
 }
コード例 #26
0
 public override void Process(Pullenti.Ner.Core.AnalysisKit kit)
 {
     Pullenti.Ner.Core.AnalyzerData     ad       = kit.GetAnalyzerData(this);
     Pullenti.Ner.Core.TerminCollection addunits = null;
     if (kit.Ontology != null)
     {
         addunits = new Pullenti.Ner.Core.TerminCollection();
         foreach (Pullenti.Ner.ExtOntologyItem r in kit.Ontology.Items)
         {
             UnitReferent uu = r.Referent as UnitReferent;
             if (uu == null)
             {
                 continue;
             }
             if (uu.m_Unit != null)
             {
                 continue;
             }
             foreach (Pullenti.Ner.Slot s in uu.Slots)
             {
                 if (s.TypeName == UnitReferent.ATTR_NAME || s.TypeName == UnitReferent.ATTR_FULLNAME)
                 {
                     addunits.Add(new Pullenti.Ner.Core.Termin(s.Value as string)
                     {
                         Tag = uu
                     });
                 }
             }
         }
     }
     for (Pullenti.Ner.Token t = kit.FirstToken; t != null; t = t.Next)
     {
         Pullenti.Ner.Measure.Internal.MeasureToken mt = Pullenti.Ner.Measure.Internal.MeasureToken.TryParseMinimal(t, addunits, false);
         if (mt == null)
         {
             mt = Pullenti.Ner.Measure.Internal.MeasureToken.TryParse(t, addunits, true, false, false, false);
         }
         if (mt == null)
         {
             continue;
         }
         List <Pullenti.Ner.ReferentToken> rts = mt.CreateRefenetsTokensWithRegister(ad, true);
         if (rts == null)
         {
             continue;
         }
         for (int i = 0; i < rts.Count; i++)
         {
             Pullenti.Ner.ReferentToken rt = rts[i];
             t.Kit.EmbedToken(rt);
             t = rt;
             for (int j = i + 1; j < rts.Count; j++)
             {
                 if (rts[j].BeginToken == rt.BeginToken)
                 {
                     rts[j].BeginToken = t;
                 }
                 if (rts[j].EndToken == rt.EndToken)
                 {
                     rts[j].EndToken = t;
                 }
             }
         }
     }
     if (kit.Ontology != null)
     {
         foreach (Pullenti.Ner.Referent e in ad.Referents)
         {
             UnitReferent u = e as UnitReferent;
             if (u == null)
             {
                 continue;
             }
             foreach (Pullenti.Ner.ExtOntologyItem r in kit.Ontology.Items)
             {
                 UnitReferent uu = r.Referent as UnitReferent;
                 if (uu == null)
                 {
                     continue;
                 }
                 bool ok = false;
                 foreach (Pullenti.Ner.Slot s in uu.Slots)
                 {
                     if (s.TypeName == UnitReferent.ATTR_NAME || s.TypeName == UnitReferent.ATTR_FULLNAME)
                     {
                         if (u.FindSlot(null, s.Value, true) != null)
                         {
                             ok = true;
                             break;
                         }
                     }
                 }
                 if (ok)
                 {
                     u.OntologyItems = new List <Pullenti.Ner.ExtOntologyItem>();
                     u.OntologyItems.Add(r);
                     break;
                 }
             }
         }
     }
 }
コード例 #27
0
 public static void Initialize()
 {
     if (m_Termins != null)
     {
         return;
     }
     m_Termins = new Pullenti.Ner.Core.TerminCollection();
     Pullenti.Ner.Core.Termin t;
     t = new Pullenti.Ner.Core.Termin("ЕЩЕ")
     {
         Tag = Pullenti.Semantic.SemAttributeType.Still
     };
     m_Termins.Add(t);
     t = new Pullenti.Ner.Core.Termin("УЖЕ")
     {
         Tag = Pullenti.Semantic.SemAttributeType.Already
     };
     m_Termins.Add(t);
     t = new Pullenti.Ner.Core.Termin("ВСЕ")
     {
         Tag = Pullenti.Semantic.SemAttributeType.All
     };
     m_Termins.Add(t);
     t = new Pullenti.Ner.Core.Termin("ЛЮБОЙ")
     {
         Tag = Pullenti.Semantic.SemAttributeType.Any
     };
     t.AddVariant("ЛЮБОЙ", false);
     t.AddVariant("КАЖДЫЙ", false);
     t.AddVariant("ЧТО УГОДНО", false);
     t.AddVariant("ВСЯКИЙ", false);
     m_Termins.Add(t);
     t = new Pullenti.Ner.Core.Termin("НЕКОТОРЫЙ")
     {
         Tag = Pullenti.Semantic.SemAttributeType.Some
     };
     t.AddVariant("НЕКИЙ", false);
     m_Termins.Add(t);
     t = new Pullenti.Ner.Core.Termin("ДРУГОЙ")
     {
         Tag = Pullenti.Semantic.SemAttributeType.Other
     };
     t.AddVariant("ИНОЙ", false);
     m_Termins.Add(t);
     t = new Pullenti.Ner.Core.Termin("ВЕСЬ")
     {
         Tag = Pullenti.Semantic.SemAttributeType.Whole
     };
     t.AddVariant("ЦЕЛИКОМ", false);
     t.AddVariant("ПОЛНОСТЬЮ", false);
     m_Termins.Add(t);
     t = new Pullenti.Ner.Core.Termin("ОЧЕНЬ")
     {
         Tag = Pullenti.Semantic.SemAttributeType.Very
     };
     m_Termins.Add(t);
     t = new Pullenti.Ner.Core.Termin("МЕНЬШЕ")
     {
         Tag = Pullenti.Semantic.SemAttributeType.Less
     };
     t.AddVariant("МЕНЕЕ", false);
     t.AddVariant("МЕНЕЕ", false);
     t.AddVariant("МЕНЬШЕ", false);
     m_Termins.Add(t);
     t = new Pullenti.Ner.Core.Termin("БОЛЬШЕ")
     {
         Tag = Pullenti.Semantic.SemAttributeType.Great
     };
     t.AddVariant("БОЛЕЕ", false);
     t.AddVariant("СВЫШЕ", false);
     m_Termins.Add(t);
 }
コード例 #28
0
        public static MeasureToken TryParse(Pullenti.Ner.Token t, Pullenti.Ner.Core.TerminCollection addUnits, bool canBeSet = true, bool canUnitsAbsent = false, bool isResctriction = false, bool isSubval = false)
        {
            if (!(t is Pullenti.Ner.TextToken))
            {
                return(null);
            }
            if (t.IsTableControlChar)
            {
                return(null);
            }
            Pullenti.Ner.Token     t0  = t;
            Pullenti.Ner.MetaToken whd = null;
            int minmax = 0;

            Pullenti.Ner.Token tt = NumbersWithUnitToken._isMinOrMax(t0, ref minmax);
            if (tt != null)
            {
                t = tt.Next;
            }
            Pullenti.Ner.Core.NounPhraseToken npt = Pullenti.Ner.Core.NounPhraseHelper.TryParse(t, Pullenti.Ner.Core.NounPhraseParseAttr.ParsePreposition | Pullenti.Ner.Core.NounPhraseParseAttr.IgnoreBrackets, 0, null);
            if (npt == null)
            {
                whd = NumbersWithUnitToken._tryParseWHL(t);
                if (whd != null)
                {
                    npt = new Pullenti.Ner.Core.NounPhraseToken(t0, whd.EndToken);
                }
                else if (t0.IsValue("КПД", null))
                {
                    npt = new Pullenti.Ner.Core.NounPhraseToken(t0, t0);
                }
                else if ((t0 is Pullenti.Ner.TextToken) && t0.LengthChar > 3 && t0.GetMorphClassInDictionary().IsUndefined)
                {
                    npt = new Pullenti.Ner.Core.NounPhraseToken(t0, t0);
                }
                else if (t0.IsValue("T", null) && t0.Chars.IsAllLower)
                {
                    npt = new Pullenti.Ner.Core.NounPhraseToken(t0, t0);
                    t   = t0;
                    if (t.Next != null && t.Next.IsChar('='))
                    {
                        npt.EndToken = t.Next;
                    }
                }
                else if ((t0 is Pullenti.Ner.TextToken) && t0.Chars.IsLetter && isSubval)
                {
                    if (NumbersWithUnitToken.TryParse(t, addUnits, false, false, false, false) != null)
                    {
                        return(null);
                    }
                    npt = new Pullenti.Ner.Core.NounPhraseToken(t0, t0);
                    for (t = t0.Next; t != null; t = t.Next)
                    {
                        if (t.WhitespacesBeforeCount > 2)
                        {
                            break;
                        }
                        else if (!(t is Pullenti.Ner.TextToken))
                        {
                            break;
                        }
                        else if (!t.Chars.IsLetter)
                        {
                            Pullenti.Ner.Core.BracketSequenceToken br = Pullenti.Ner.Core.BracketHelper.TryParse(t, Pullenti.Ner.Core.BracketParseAttr.No, 100);
                            if (br != null)
                            {
                                npt.EndToken = (t = br.EndToken);
                            }
                            else
                            {
                                break;
                            }
                        }
                        else if (NumbersWithUnitToken.TryParse(t, addUnits, false, false, false, false) != null)
                        {
                            break;
                        }
                        else
                        {
                            npt.EndToken = t;
                        }
                    }
                }
                else
                {
                    return(null);
                }
            }
            else if (Pullenti.Ner.Core.NumberHelper.TryParseRealNumber(t, true, false) != null)
            {
                return(null);
            }
            else
            {
                Pullenti.Ner.Date.Internal.DateItemToken dtok = Pullenti.Ner.Date.Internal.DateItemToken.TryAttach(t, null, false);
                if (dtok != null)
                {
                    return(null);
                }
            }
            Pullenti.Ner.Token t1 = npt.EndToken;
            t = npt.EndToken;
            Pullenti.Ner.MetaToken name = new Pullenti.Ner.MetaToken(npt.BeginToken, npt.EndToken)
            {
                Morph = npt.Morph
            };
            List <UnitToken>    units     = null;
            List <UnitToken>    units2    = null;
            List <MeasureToken> internals = new List <MeasureToken>();
            bool not = false;

            for (tt = t1.Next; tt != null; tt = tt.Next)
            {
                if (tt.IsNewlineBefore)
                {
                    break;
                }
                if (tt.IsTableControlChar)
                {
                    break;
                }
                Pullenti.Ner.Token tt2 = NumbersWithUnitToken._isMinOrMax(tt, ref minmax);
                if (tt2 != null)
                {
                    t1 = (t = (tt = tt2));
                    continue;
                }
                if ((tt.IsValue("БЫТЬ", null) || tt.IsValue("ДОЛЖЕН", null) || tt.IsValue("ДОЛЖНЫЙ", null)) || tt.IsValue("МОЖЕТ", null) || ((tt.IsValue("СОСТАВЛЯТЬ", null) && !tt.GetMorphClassInDictionary().IsAdjective)))
                {
                    t1 = (t = tt);
                    if (tt.Previous.IsValue("НЕ", null))
                    {
                        not = true;
                    }
                    continue;
                }
                Pullenti.Ner.MetaToken www = NumbersWithUnitToken._tryParseWHL(tt);
                if (www != null)
                {
                    whd = www;
                    t1  = (t = (tt = www.EndToken));
                    continue;
                }
                if (tt.IsValue("ПРИ", null))
                {
                    MeasureToken mt1 = TryParse(tt.Next, addUnits, false, false, true, false);
                    if (mt1 != null)
                    {
                        internals.Add(mt1);
                        t1 = (t = (tt = mt1.EndToken));
                        continue;
                    }
                    NumbersWithUnitToken n1 = NumbersWithUnitToken.TryParse(tt.Next, addUnits, false, false, false, false);
                    if (n1 != null && n1.Units.Count > 0)
                    {
                        mt1 = new MeasureToken(n1.BeginToken, n1.EndToken)
                        {
                            Nums = n1
                        };
                        internals.Add(mt1);
                        t1 = (t = (tt = mt1.EndToken));
                        continue;
                    }
                }
                if (tt.IsValue("ПО", null) && tt.Next != null && tt.Next.IsValue("U", null))
                {
                    t1 = (t = (tt = tt.Next));
                    continue;
                }
                if (internals.Count > 0)
                {
                    if (tt.IsChar(':'))
                    {
                        break;
                    }
                    MeasureToken mt1 = TryParse(tt.Next, addUnits, false, false, true, false);
                    if (mt1 != null && mt1.Reliable)
                    {
                        internals.Add(mt1);
                        t1 = (t = (tt = mt1.EndToken));
                        continue;
                    }
                }
                if ((tt is Pullenti.Ner.NumberToken) && (tt as Pullenti.Ner.NumberToken).Typ == Pullenti.Ner.NumberSpellingType.Words)
                {
                    Pullenti.Ner.Core.NounPhraseToken npt3 = Pullenti.Ner.Core.NounPhraseHelper.TryParse(tt, Pullenti.Ner.Core.NounPhraseParseAttr.ParseNumericAsAdjective, 0, null);
                    if (npt3 != null)
                    {
                        t1 = (tt = npt3.EndToken);
                        if (internals.Count == 0)
                        {
                            name.EndToken = t1;
                        }
                        continue;
                    }
                }
                if (((tt.IsHiphen && !tt.IsWhitespaceBefore && !tt.IsWhitespaceAfter) && (tt.Next is Pullenti.Ner.NumberToken) && (tt.Previous is Pullenti.Ner.TextToken)) && tt.Previous.Chars.IsAllUpper)
                {
                    t1 = (tt = (t = tt.Next));
                    if (internals.Count == 0)
                    {
                        name.EndToken = t1;
                    }
                    continue;
                }
                if (((tt is Pullenti.Ner.NumberToken) && !tt.IsWhitespaceBefore && (tt.Previous is Pullenti.Ner.TextToken)) && tt.Previous.Chars.IsAllUpper)
                {
                    t1 = (t = tt);
                    if (internals.Count == 0)
                    {
                        name.EndToken = t1;
                    }
                    continue;
                }
                if ((((tt is Pullenti.Ner.NumberToken) && !tt.IsWhitespaceAfter && tt.Next.IsHiphen) && !tt.Next.IsWhitespaceAfter && (tt.Next.Next is Pullenti.Ner.TextToken)) && tt.Next.Next.LengthChar > 2)
                {
                    t1 = (t = (tt = tt.Next.Next));
                    Pullenti.Ner.Core.NounPhraseToken npt1 = Pullenti.Ner.Core.NounPhraseHelper.TryParse(tt, Pullenti.Ner.Core.NounPhraseParseAttr.No, 0, null);
                    if (npt1 != null && npt1.EndChar > tt.EndChar)
                    {
                        t1 = (t = (tt = npt1.EndToken));
                    }
                    if (internals.Count == 0)
                    {
                        name.EndToken = t1;
                    }
                    continue;
                }
                if ((tt is Pullenti.Ner.NumberToken) && tt.Previous != null)
                {
                    if (tt.Previous.IsValue("USB", null))
                    {
                        t1 = (t = tt);
                        if (internals.Count == 0)
                        {
                            name.EndToken = t1;
                        }
                        for (Pullenti.Ner.Token ttt = tt.Next; ttt != null; ttt = ttt.Next)
                        {
                            if (ttt.IsWhitespaceBefore)
                            {
                                break;
                            }
                            if (ttt.IsCharOf(",:"))
                            {
                                break;
                            }
                            t1 = (t = (tt = ttt));
                            if (internals.Count == 0)
                            {
                                name.EndToken = t1;
                            }
                        }
                        continue;
                    }
                }
                NumbersWithUnitToken mt0 = NumbersWithUnitToken.TryParse(tt, addUnits, false, false, false, false);
                if (mt0 != null)
                {
                    Pullenti.Ner.Core.NounPhraseToken npt1 = Pullenti.Ner.Core.NounPhraseHelper.TryParse(tt, Pullenti.Ner.Core.NounPhraseParseAttr.ParseNumericAsAdjective | Pullenti.Ner.Core.NounPhraseParseAttr.ParsePreposition, 0, null);
                    if (npt1 != null && npt1.EndChar > mt0.EndChar)
                    {
                        t1 = (t = (tt = npt1.EndToken));
                        if (internals.Count == 0)
                        {
                            name.EndToken = t1;
                        }
                        continue;
                    }
                    break;
                }
                if (((tt.IsComma || tt.IsChar('('))) && tt.Next != null)
                {
                    www = NumbersWithUnitToken._tryParseWHL(tt.Next);
                    if (www != null)
                    {
                        whd = www;
                        t1  = (t = (tt = www.EndToken));
                        if (tt.Next != null && tt.Next.IsComma)
                        {
                            t1 = (tt = tt.Next);
                        }
                        if (tt.Next != null && tt.Next.IsChar(')'))
                        {
                            t1 = (tt = tt.Next);
                            continue;
                        }
                    }
                    List <UnitToken> uu = UnitToken.TryParseList(tt.Next, addUnits, false);
                    if (uu != null)
                    {
                        t1    = (t = uu[uu.Count - 1].EndToken);
                        units = uu;
                        if (tt.IsChar('(') && t1.Next != null && t1.Next.IsChar(')'))
                        {
                            t1 = (t = (tt = t1.Next));
                            continue;
                        }
                        else if (t1.Next != null && t1.Next.IsChar('('))
                        {
                            uu = UnitToken.TryParseList(t1.Next.Next, addUnits, false);
                            if (uu != null && uu[uu.Count - 1].EndToken.Next != null && uu[uu.Count - 1].EndToken.Next.IsChar(')'))
                            {
                                units2 = uu;
                                t1     = (t = (tt = uu[uu.Count - 1].EndToken.Next));
                                continue;
                            }
                            www = NumbersWithUnitToken._tryParseWHL(t1.Next);
                            if (www != null)
                            {
                                whd = www;
                                t1  = (t = (tt = www.EndToken));
                                continue;
                            }
                        }
                        if (uu != null && uu.Count > 0 && !uu[0].IsDoubt)
                        {
                            break;
                        }
                        if (t1.Next != null)
                        {
                            if (t1.Next.IsTableControlChar || t1.IsNewlineAfter)
                            {
                                break;
                            }
                        }
                        units = null;
                    }
                }
                if (Pullenti.Ner.Core.BracketHelper.CanBeStartOfSequence(tt, false, false) && !(tt.Next is Pullenti.Ner.NumberToken))
                {
                    Pullenti.Ner.Core.BracketSequenceToken br = Pullenti.Ner.Core.BracketHelper.TryParse(tt, Pullenti.Ner.Core.BracketParseAttr.No, 100);
                    if (br != null)
                    {
                        t1 = (t = (tt = br.EndToken));
                        continue;
                    }
                }
                if (tt.IsValue("НЕ", null) && tt.Next != null)
                {
                    Pullenti.Morph.MorphClass mc = tt.Next.GetMorphClassInDictionary();
                    if (mc.IsAdverb || mc.IsMisc)
                    {
                        break;
                    }
                    continue;
                }
                if (tt.IsValue("ЯМЗ", null))
                {
                }
                Pullenti.Ner.Core.NounPhraseToken npt2 = Pullenti.Ner.Core.NounPhraseHelper.TryParse(tt, Pullenti.Ner.Core.NounPhraseParseAttr.ParsePreposition | Pullenti.Ner.Core.NounPhraseParseAttr.IgnoreBrackets | Pullenti.Ner.Core.NounPhraseParseAttr.ParsePronouns, 0, null);
                if (npt2 == null)
                {
                    if (tt.Morph.Class.IsPreposition || tt.Morph.Class.IsConjunction)
                    {
                        Pullenti.Ner.Core.TerminToken to = NumbersWithUnitToken.m_Termins.TryParse(tt, Pullenti.Ner.Core.TerminParseAttr.No);
                        if (to != null)
                        {
                            if ((to.EndToken.Next is Pullenti.Ner.TextToken) && to.EndToken.Next.IsLetters)
                            {
                            }
                            else
                            {
                                break;
                            }
                        }
                        t1 = tt;
                        continue;
                    }
                    Pullenti.Morph.MorphClass mc = tt.GetMorphClassInDictionary();
                    if (((tt is Pullenti.Ner.TextToken) && tt.Chars.IsLetter && tt.LengthChar > 1) && (((tt.Chars.IsAllUpper || mc.IsAdverb || mc.IsUndefined) || mc.IsAdjective)))
                    {
                        List <UnitToken> uu = UnitToken.TryParseList(tt, addUnits, false);
                        if (uu != null)
                        {
                            if (uu[0].LengthChar > 1 || uu.Count > 1)
                            {
                                units = uu;
                                t1    = (t = uu[uu.Count - 1].EndToken);
                                break;
                            }
                        }
                        t1 = (t = tt);
                        if (internals.Count == 0)
                        {
                            name.EndToken = tt;
                        }
                        continue;
                    }
                    if (tt.IsComma)
                    {
                        continue;
                    }
                    if (tt.IsChar('.'))
                    {
                        if (!Pullenti.Ner.Core.MiscHelper.CanBeStartOfSentence(tt.Next))
                        {
                            continue;
                        }
                        List <UnitToken> uu = UnitToken.TryParseList(tt.Next, addUnits, false);
                        if (uu != null)
                        {
                            if (uu[0].LengthChar > 2 || uu.Count > 1)
                            {
                                units = uu;
                                t1    = (t = uu[uu.Count - 1].EndToken);
                                break;
                            }
                        }
                    }
                    break;
                }
                t1 = (t = (tt = npt2.EndToken));
                if (internals.Count > 0)
                {
                }
                else if (t.IsValue("ПРЕДЕЛ", null) || t.IsValue("ГРАНИЦА", null) || t.IsValue("ДИАПАЗОН", null))
                {
                }
                else if (t.Chars.IsLetter)
                {
                    name.EndToken = t1;
                }
            }
            Pullenti.Ner.Token t11 = t1;
            for (t1 = t1.Next; t1 != null; t1 = t1.Next)
            {
                if (t1.IsTableControlChar)
                {
                }
                else if (t1.IsCharOf(":,_"))
                {
                    if (isResctriction)
                    {
                        return(null);
                    }
                    Pullenti.Ner.MetaToken www = NumbersWithUnitToken._tryParseWHL(t1.Next);
                    if (www != null)
                    {
                        whd = www;
                        t1  = (t = www.EndToken);
                        continue;
                    }
                    List <UnitToken> uu = UnitToken.TryParseList(t1.Next, addUnits, false);
                    if (uu != null)
                    {
                        if (uu[0].LengthChar > 1 || uu.Count > 1)
                        {
                            units = uu;
                            t1    = (t = uu[uu.Count - 1].EndToken);
                            continue;
                        }
                    }
                    if (t1.IsChar(':'))
                    {
                        List <MeasureToken> li = new List <MeasureToken>();
                        for (Pullenti.Ner.Token ttt = t1.Next; ttt != null; ttt = ttt.Next)
                        {
                            if (ttt.IsHiphen || ttt.IsTableControlChar)
                            {
                                continue;
                            }
                            if ((ttt is Pullenti.Ner.TextToken) && !ttt.Chars.IsLetter)
                            {
                                continue;
                            }
                            MeasureToken mt1 = TryParse(ttt, addUnits, true, true, false, true);
                            if (mt1 == null)
                            {
                                break;
                            }
                            li.Add(mt1);
                            ttt = mt1.EndToken;
                            if (ttt.Next != null && ttt.Next.IsChar(';'))
                            {
                                ttt = ttt.Next;
                            }
                            if (ttt.IsChar(';'))
                            {
                            }
                            else if (ttt.IsNewlineAfter && mt1.IsNewlineBefore)
                            {
                            }
                            else
                            {
                                break;
                            }
                        }
                        if (li.Count > 1)
                        {
                            MeasureToken res0 = new MeasureToken(t0, li[li.Count - 1].EndToken)
                            {
                                Internals = li, IsEmpty = true
                            };
                            if (internals != null && internals.Count > 0)
                            {
                                res0.InternalEx = internals[0];
                            }
                            string nam = Pullenti.Ner.Core.MiscHelper.GetTextValueOfMetaToken(name, Pullenti.Ner.Core.GetTextAttr.FirstNounGroupToNominative);
                            li[0].BeginToken = t0;
                            foreach (MeasureToken v in li)
                            {
                                v.Name = string.Format("{0} ({1})", nam, v.Name ?? "").Trim();
                                if (v.Nums != null && v.Nums.Units.Count == 0 && units != null)
                                {
                                    v.Nums.Units = units;
                                }
                            }
                            return(res0);
                        }
                    }
                }
                else if (t1.IsHiphen && t1.IsWhitespaceAfter && t1.IsWhitespaceBefore)
                {
                }
                else if (t1.IsHiphen && t1.Next != null && t1.Next.IsChar('('))
                {
                }
                else
                {
                    break;
                }
            }
            if (t1 == null)
            {
                return(null);
            }
            List <NumbersWithUnitToken> mts = NumbersWithUnitToken.TryParseMulti(t1, addUnits, false, not, true, isResctriction);

            if (mts == null)
            {
                if (units != null && units.Count > 0)
                {
                    if (t1 == null || t1.Previous.IsChar(':'))
                    {
                        mts = new List <NumbersWithUnitToken>();
                        if (t1 == null)
                        {
                            for (t1 = t11; t1 != null && t1.Next != null; t1 = t1.Next)
                            {
                            }
                        }
                        else
                        {
                            t1 = t1.Previous;
                        }
                        mts.Add(new NumbersWithUnitToken(t0, t1)
                        {
                            SingleVal = double.NaN
                        });
                    }
                }
                if (mts == null)
                {
                    return(null);
                }
            }
            NumbersWithUnitToken mt = mts[0];

            if (mt.BeginToken == mt.EndToken && !(mt.BeginToken is Pullenti.Ner.NumberToken))
            {
                return(null);
            }
            if (!isSubval && name.BeginToken.Morph.Class.IsPreposition)
            {
                name.BeginToken = name.BeginToken.Next;
            }
            if (mt.WHL != null)
            {
                whd = mt.WHL;
            }
            for (int kk = 0; kk < 10; kk++)
            {
                if (whd != null && whd.EndToken == name.EndToken)
                {
                    name.EndToken = whd.BeginToken.Previous;
                    continue;
                }
                if (units != null)
                {
                    if (units[units.Count - 1].EndToken == name.EndToken)
                    {
                        name.EndToken = units[0].BeginToken.Previous;
                        continue;
                    }
                }
                break;
            }
            if (mts.Count > 1 && internals.Count == 0)
            {
                if (mt.Units.Count == 0)
                {
                    if (units != null)
                    {
                        foreach (NumbersWithUnitToken m in mts)
                        {
                            m.Units = units;
                        }
                    }
                }
                MeasureToken res1 = new MeasureToken(t0, mts[mts.Count - 1].EndToken)
                {
                    Morph = name.Morph, Reliable = true
                };
                res1.Name = Pullenti.Ner.Core.MiscHelper.GetTextValueOfMetaToken(name, Pullenti.Ner.Core.GetTextAttr.FirstNounGroupToNominative);
                for (int k = 0; k < mts.Count; k++)
                {
                    MeasureToken ttt = new MeasureToken(mts[k].BeginToken, mts[k].EndToken)
                    {
                        Nums = mts[k]
                    };
                    if (whd != null)
                    {
                        List <string> nams = whd.Tag as List <string>;
                        if (k < nams.Count)
                        {
                            ttt.Name = nams[k];
                        }
                    }
                    res1.Internals.Add(ttt);
                }
                Pullenti.Ner.Token tt1 = res1.EndToken.Next;
                if (tt1 != null && tt1.IsChar('±'))
                {
                    NumbersWithUnitToken nn = NumbersWithUnitToken._tryParse(tt1, addUnits, true, false, false);
                    if (nn != null && nn.PlusMinusPercent)
                    {
                        res1.EndToken = nn.EndToken;
                        res1.Nums     = nn;
                        if (nn.Units.Count > 0 && units == null && mt.Units.Count == 0)
                        {
                            foreach (NumbersWithUnitToken m in mts)
                            {
                                m.Units = nn.Units;
                            }
                        }
                    }
                }
                return(res1);
            }
            if (!mt.IsWhitespaceBefore)
            {
                if (mt.BeginToken.Previous == null)
                {
                    return(null);
                }
                if (mt.BeginToken.Previous.IsCharOf(":),") || mt.BeginToken.Previous.IsTableControlChar || mt.BeginToken.Previous.IsValue("IP", null))
                {
                }
                else if (mt.BeginToken.IsHiphen && mt.Units.Count > 0 && !mt.Units[0].IsDoubt)
                {
                }
                else
                {
                    return(null);
                }
            }
            if (mt.Units.Count == 0 && units != null)
            {
                mt.Units = units;
                if (mt.DivNum != null && units.Count > 1 && mt.DivNum.Units.Count == 0)
                {
                    for (int i = 1; i < units.Count; i++)
                    {
                        if (units[i].Pow == -1)
                        {
                            for (int j = i; j < units.Count; j++)
                            {
                                mt.DivNum.Units.Add(units[j]);
                                units[j].Pow = -units[j].Pow;
                            }
                            mt.Units.RemoveRange(i, units.Count - i);
                            break;
                        }
                    }
                }
            }
            if ((minmax < 0) && mt.SingleVal != null)
            {
                mt.FromVal     = mt.SingleVal;
                mt.FromInclude = true;
                mt.SingleVal   = null;
            }
            if (minmax > 0 && mt.SingleVal != null)
            {
                mt.ToVal     = mt.SingleVal;
                mt.ToInclude = true;
                mt.SingleVal = null;
            }
            if (mt.Units.Count == 0)
            {
                units = UnitToken.TryParseList(mt.EndToken.Next, addUnits, true);
                if (units == null)
                {
                    if (canUnitsAbsent)
                    {
                    }
                    else
                    {
                        return(null);
                    }
                }
                else
                {
                    mt.Units = units;
                }
            }
            MeasureToken res = new MeasureToken(t0, mt.EndToken)
            {
                Morph = name.Morph, Internals = internals
            };

            if (((!t0.IsWhitespaceBefore && t0.Previous != null && t0 == name.BeginToken) && t0.Previous.IsHiphen && !t0.Previous.IsWhitespaceBefore) && (t0.Previous.Previous is Pullenti.Ner.TextToken))
            {
                name.BeginToken = (res.BeginToken = name.BeginToken.Previous.Previous);
            }
            res.Name = Pullenti.Ner.Core.MiscHelper.GetTextValueOfMetaToken(name, (!isSubval ? Pullenti.Ner.Core.GetTextAttr.FirstNounGroupToNominative : Pullenti.Ner.Core.GetTextAttr.No));
            res.Nums = mt;
            foreach (UnitToken u in res.Nums.Units)
            {
                if (u.Keyword != null)
                {
                    if (u.Keyword.BeginChar >= res.BeginChar)
                    {
                        res.Reliable = true;
                    }
                }
            }
            res._parseInternals(addUnits);
            if (res.Internals.Count > 0 || !canBeSet)
            {
                return(res);
            }
            t1 = res.EndToken.Next;
            if (t1 != null && t1.IsCommaAnd)
            {
                t1 = t1.Next;
            }
            List <NumbersWithUnitToken> mts1 = NumbersWithUnitToken.TryParseMulti(t1, addUnits, false, false, false, false);

            if ((mts1 != null && mts1.Count == 1 && (t1.WhitespacesBeforeCount < 3)) && mts1[0].Units.Count > 0 && !UnitToken.CanBeEquals(mts[0].Units, mts1[0].Units))
            {
                res.IsSet = true;
                res.Nums  = null;
                res.Internals.Add(new MeasureToken(mt.BeginToken, mt.EndToken)
                {
                    Nums = mt
                });
                res.Internals.Add(new MeasureToken(mts1[0].BeginToken, mts1[0].EndToken)
                {
                    Nums = mts1[0]
                });
                res.EndToken = mts1[0].EndToken;
            }
            return(res);
        }
コード例 #29
0
        public static void Initialize()
        {
            if (m_Ontology != null)
            {
                return;
            }
            m_Ontology = new Pullenti.Ner.Core.TerminCollection();
            Pullenti.Ner.Core.Termin        t;
            Pullenti.Ner.Core.Termin        tt;
            List <Pullenti.Ner.Core.Termin> li;

            t = new Pullenti.Ner.Core.Termin("ПИСТОЛЕТ")
            {
                Tag = Typs.Noun
            };
            m_Ontology.Add(t);
            t = new Pullenti.Ner.Core.Termin("РЕВОЛЬВЕР")
            {
                Tag = Typs.Noun
            };
            m_Ontology.Add(t);
            t = new Pullenti.Ner.Core.Termin("ВИНТОВКА")
            {
                Tag = Typs.Noun
            };
            m_Ontology.Add(t);
            t = new Pullenti.Ner.Core.Termin("РУЖЬЕ")
            {
                Tag = Typs.Noun
            };
            m_Ontology.Add(t);
            t = new Pullenti.Ner.Core.Termin("АВТОМАТ")
            {
                Tag = Typs.Noun, Tag2 = 1
            };
            m_Ontology.Add(t);
            t = new Pullenti.Ner.Core.Termin("КАРАБИН")
            {
                Tag = Typs.Noun, Tag2 = 1
            };
            m_Ontology.Add(t);
            t = new Pullenti.Ner.Core.Termin("ПИСТОЛЕТ-ПУЛЕМЕТ")
            {
                CanonicText = "ПИСТОЛЕТ-ПУЛЕМЕТ", Tag = Typs.Noun
            };
            m_Ontology.Add(t);
            t = new Pullenti.Ner.Core.Termin("ПУЛЕМЕТ")
            {
                Tag = Typs.Noun
            };
            m_Ontology.Add(t);
            t = new Pullenti.Ner.Core.Termin("ГРАНАТОМЕТ")
            {
                Tag = Typs.Noun
            };
            t.AddVariant("СТРЕЛКОВО ГРАНАТОМЕТНЫЙ КОМПЛЕКС", false);
            m_Ontology.Add(t);
            t = new Pullenti.Ner.Core.Termin("ОГНЕМЕТ")
            {
                Tag = Typs.Noun
            };
            m_Ontology.Add(t);
            t = new Pullenti.Ner.Core.Termin("МИНОМЕТ")
            {
                Tag = Typs.Noun
            };
            m_Ontology.Add(t);
            t = new Pullenti.Ner.Core.Termin("ПЕРЕНОСНОЙ ЗЕНИТНО РАКЕТНЫЙ КОМПЛЕКС")
            {
                Acronym = "ПЗРК", Tag = Typs.Noun
            };
            m_Ontology.Add(t);
            t = new Pullenti.Ner.Core.Termin("ПРОТИВОТАНКОВЫЙ РАКЕТНЫЙ КОМПЛЕКС")
            {
                Acronym = "ПТРК", Tag = Typs.Noun
            };
            t.AddVariant("ПЕРЕНОСНОЙ ПРОТИВОТАНКОВЫЙ РАКЕТНЫЙ КОМПЛЕКС", false);
            m_Ontology.Add(t);
            t = new Pullenti.Ner.Core.Termin("АВИАЦИОННАЯ ПУШКА")
            {
                Tag = Typs.Noun
            };
            t.AddVariant("АВИАПУШКА", false);
            m_Ontology.Add(t);
            t = new Pullenti.Ner.Core.Termin("НАРУЧНИКИ")
            {
                Tag = Typs.Noun
            };
            m_Ontology.Add(t);
            t = new Pullenti.Ner.Core.Termin("БРОНЕЖИЛЕТ")
            {
                Tag = Typs.Noun
            };
            m_Ontology.Add(t);
            t = new Pullenti.Ner.Core.Termin("ГРАНАТА")
            {
                Tag = Typs.Noun
            };
            m_Ontology.Add(t);
            t = new Pullenti.Ner.Core.Termin("ЛИМОНКА")
            {
                Tag = Typs.Noun
            };
            m_Ontology.Add(t);
            t = new Pullenti.Ner.Core.Termin("НОЖ")
            {
                Tag = Typs.Noun
            };
            m_Ontology.Add(t);
            t = new Pullenti.Ner.Core.Termin("ВЗРЫВАТЕЛЬ")
            {
                Tag = Typs.Noun
            };
            m_Ontology.Add(t);
            foreach (string s in new string[] { "МАКАРОВ", "КАЛАШНИКОВ", "СИМОНОВ", "СТЕЧКИН", "ШМАЙСЕР", "МОСИН", "СЛОСТИН", "НАГАН", "МАКСИМ", "ДРАГУНОВ", "СЕРДЮКОВ", "ЯРЫГИН", "НИКОНОВ", "МАУЗЕР", "БРАУНИНГ", "КОЛЬТ", "ВИНЧЕСТЕР" })
            {
                m_Ontology.Add(new Pullenti.Ner.Core.Termin(s)
                {
                    Tag = Typs.Brand
                });
            }
            foreach (string s in new string[] { "УЗИ" })
            {
                m_Ontology.Add(new Pullenti.Ner.Core.Termin(s)
                {
                    Tag = Typs.Name
                });
            }
            t = new Pullenti.Ner.Core.Termin("ТУЛЬСКИЙ ТОКАРЕВА")
            {
                CanonicText = "ТТ", Acronym = "ТТ", Tag = Typs.Model
            };
            li = new List <Pullenti.Ner.Core.Termin>();
            li.Add(new Pullenti.Ner.Core.Termin("ПИСТОЛЕТ")
            {
                Tag = Typs.Noun
            });
            li.Add(new Pullenti.Ner.Core.Termin("ТОКАРЕВ")
            {
                Tag = Typs.Brand
            });
            t.Tag2 = li;
            m_Ontology.Add(t);
            t = new Pullenti.Ner.Core.Termin("ПИСТОЛЕТ МАКАРОВА")
            {
                CanonicText = "ПМ", Acronym = "ПМ", Tag = Typs.Model
            };
            li = new List <Pullenti.Ner.Core.Termin>();
            li.Add(new Pullenti.Ner.Core.Termin("ПИСТОЛЕТ")
            {
                Tag = Typs.Noun
            });
            li.Add(new Pullenti.Ner.Core.Termin("МАКАРОВ")
            {
                Tag = Typs.Brand
            });
            t.Tag2 = li;
            m_Ontology.Add(t);
            t = new Pullenti.Ner.Core.Termin("ПИСТОЛЕТ МАКАРОВА МОДЕРНИЗИРОВАННЫЙ")
            {
                CanonicText = "ПММ", Acronym = "ПММ", Tag = Typs.Model
            };
            li = new List <Pullenti.Ner.Core.Termin>();
            li.Add((tt = new Pullenti.Ner.Core.Termin("ПИСТОЛЕТ")
            {
                Tag = Typs.Noun
            }));
            tt.AddVariant("МОДЕРНИЗИРОВАННЫЙ ПИСТОЛЕТ", false);
            li.Add(new Pullenti.Ner.Core.Termin("МАКАРОВ")
            {
                Tag = Typs.Brand
            });
            t.Tag2 = li;
            m_Ontology.Add(t);
            t = new Pullenti.Ner.Core.Termin("АВТОМАТ КАЛАШНИКОВА")
            {
                CanonicText = "АК", Acronym = "АК", Tag = Typs.Model
            };
            li = new List <Pullenti.Ner.Core.Termin>();
            li.Add(new Pullenti.Ner.Core.Termin("АВТОМАТ")
            {
                Tag = Typs.Noun
            });
            li.Add(new Pullenti.Ner.Core.Termin("КАЛАШНИКОВ")
            {
                Tag = Typs.Brand
            });
            t.Tag2 = li;
            m_Ontology.Add(t);
        }
コード例 #30
0
        public override void Process(Pullenti.Ner.Core.AnalysisKit kit)
        {
            Pullenti.Ner.Core.AnalyzerData     ad     = kit.GetAnalyzerData(this);
            Pullenti.Ner.Core.TerminCollection models = new Pullenti.Ner.Core.TerminCollection();
            Dictionary <string, List <Pullenti.Ner.Referent> > objsByModel = new Dictionary <string, List <Pullenti.Ner.Referent> >();

            Pullenti.Ner.Core.TerminCollection objByNames = new Pullenti.Ner.Core.TerminCollection();
            for (Pullenti.Ner.Token t = kit.FirstToken; t != null; t = t.Next)
            {
                List <Pullenti.Ner.Weapon.Internal.WeaponItemToken> its = Pullenti.Ner.Weapon.Internal.WeaponItemToken.TryParseList(t, 10);
                if (its == null)
                {
                    continue;
                }
                List <Pullenti.Ner.ReferentToken> rts = this.TryAttach(its, false);
                if (rts != null)
                {
                    foreach (Pullenti.Ner.ReferentToken rt in rts)
                    {
                        rt.Referent = ad.RegisterReferent(rt.Referent);
                        kit.EmbedToken(rt);
                        t = rt;
                        foreach (Pullenti.Ner.Slot s in rt.Referent.Slots)
                        {
                            if (s.TypeName == WeaponReferent.ATTR_MODEL)
                            {
                                string mod = s.Value.ToString();
                                for (int k = 0; k < 2; k++)
                                {
                                    if (!char.IsDigit(mod[0]))
                                    {
                                        List <Pullenti.Ner.Referent> li;
                                        if (!objsByModel.TryGetValue(mod, out li))
                                        {
                                            objsByModel.Add(mod, (li = new List <Pullenti.Ner.Referent>()));
                                        }
                                        if (!li.Contains(rt.Referent))
                                        {
                                            li.Add(rt.Referent);
                                        }
                                        models.AddString(mod, li, null, false);
                                    }
                                    if (k > 0)
                                    {
                                        break;
                                    }
                                    string brand = rt.Referent.GetStringValue(WeaponReferent.ATTR_BRAND);
                                    if (brand == null)
                                    {
                                        break;
                                    }
                                    mod = string.Format("{0} {1}", brand, mod);
                                }
                            }
                            else if (s.TypeName == WeaponReferent.ATTR_NAME)
                            {
                                objByNames.Add(new Pullenti.Ner.Core.Termin(s.Value.ToString())
                                {
                                    Tag = rt.Referent
                                });
                            }
                        }
                    }
                }
            }
            if (objsByModel.Count == 0 && objByNames.Termins.Count == 0)
            {
                return;
            }
            for (Pullenti.Ner.Token t = kit.FirstToken; t != null; t = t.Next)
            {
                Pullenti.Ner.Core.BracketSequenceToken br = Pullenti.Ner.Core.BracketHelper.TryParse(t, Pullenti.Ner.Core.BracketParseAttr.No, 10);
                if (br != null)
                {
                    Pullenti.Ner.Core.TerminToken toks = objByNames.TryParse(t.Next, Pullenti.Ner.Core.TerminParseAttr.No);
                    if (toks != null && toks.EndToken.Next == br.EndToken)
                    {
                        Pullenti.Ner.ReferentToken rt0 = new Pullenti.Ner.ReferentToken(toks.Termin.Tag as Pullenti.Ner.Referent, br.BeginToken, br.EndToken);
                        kit.EmbedToken(rt0);
                        t = rt0;
                        continue;
                    }
                }
                if (!(t is Pullenti.Ner.TextToken))
                {
                    continue;
                }
                if (!t.Chars.IsLetter)
                {
                    continue;
                }
                Pullenti.Ner.Core.TerminToken tok = models.TryParse(t, Pullenti.Ner.Core.TerminParseAttr.No);
                if (tok == null)
                {
                    if (!t.Chars.IsAllLower)
                    {
                        tok = objByNames.TryParse(t, Pullenti.Ner.Core.TerminParseAttr.No);
                    }
                    if (tok == null)
                    {
                        continue;
                    }
                }
                if (!tok.IsWhitespaceAfter)
                {
                    if (tok.EndToken.Next == null || !tok.EndToken.Next.IsCharOf(",.)"))
                    {
                        if (!Pullenti.Ner.Core.BracketHelper.IsBracket(tok.EndToken.Next, false))
                        {
                            continue;
                        }
                    }
                }
                Pullenti.Ner.Referent        tr = null;
                List <Pullenti.Ner.Referent> li = tok.Termin.Tag as List <Pullenti.Ner.Referent>;
                if (li != null && li.Count == 1)
                {
                    tr = li[0];
                }
                else
                {
                    tr = tok.Termin.Tag as Pullenti.Ner.Referent;
                }
                if (tr != null)
                {
                    Pullenti.Ner.Weapon.Internal.WeaponItemToken tit = Pullenti.Ner.Weapon.Internal.WeaponItemToken.TryParse(tok.BeginToken.Previous, null, false, true);
                    if (tit != null && tit.Typ == Pullenti.Ner.Weapon.Internal.WeaponItemToken.Typs.Brand)
                    {
                        tr.AddSlot(WeaponReferent.ATTR_BRAND, tit.Value, false, 0);
                        tok.BeginToken = tit.BeginToken;
                    }
                    Pullenti.Ner.ReferentToken rt0 = new Pullenti.Ner.ReferentToken(tr, tok.BeginToken, tok.EndToken);
                    kit.EmbedToken(rt0);
                    t = rt0;
                    continue;
                }
            }
        }