Esempio n. 1
0
        /// <summary>
        /// Строит n-грамную модель.
        /// </summary>
        /// <param name="inputFile">Входной файл корпуса.</param>
        /// <param name="reader">Объект для чтения корпуса.</param>
        private void BuildNGrammModel(string inputFile, ICorporaReader reader)
        {
            reader.Open(inputFile);
            nGramm = new TagNGramm();
            int nGrammSize = 3;

            foreach (var sentense in reader.ReadSentences(int.MaxValue))
            {
                //предлоги в корпусе не имеют падежа, а союзы не имеют типа
                //чтобы добавить эту информацию, воспользуемся модифицированным словарём
                foreach (var lexem in sentense)
                {
                    if (serviceTags.ContainsKey(lexem.Word.ToLower()))
                    {
                        lexem.Tag = serviceTags[lexem.Word];
                    }
                }
                if (sentense.Count > 0 && sentense.Count(a => a.Tag == Tag.NoWord ||
                                                         a.Tag == Tag.Unfixed) == 0)
                {
                    foreach (var ngamm in sentense.BuildNGramms(nGrammSize))
                    {
                        nGramm.AddNGramm(ngamm);
                    }
                }
            }
            reader.Close();
        }
Esempio n. 2
0
        /// <summary>
        /// Инциализирует новый экземпляр класса <see cref="MorphologyModel"/>.
        /// </summary>
        /// <param name="nGramm">N-граммная модель.</param>
        /// <param name="entModel">Модель классов неоднозначности.</param>
        /// <param name="folder">Папка для хранения файлов модели.</param>
        /// <param name="lemmaFile">Файл лемматизатора.</param>
        public MorphologyModel(TagNGramm nGramm, IEntropyClassModel entModel,
                               string folder, string lemmaFile)
        {
            this.nGramm   = nGramm;
            this.entClass = entModel;
            this.folder   = folder;
            if (Directory.Exists(folder))
            {
                Directory.Delete(folder, true);
            }
            Directory.CreateDirectory(folder);
            this.lemmaFile = folder + "\\" + lemmaFile;
            File.Copy(lemmaFile, this.lemmaFile);
            FileStream fs = File.OpenRead(this.lemmaFile);

            lemmatizer = new Lemmatizer(fs);
            Initialize();
        }
Esempio n. 3
0
        /// <summary>
        /// Инциализирует новый экземпляр класса <see cref="MorphologyModel"/>.
        /// </summary>
        /// <param name="si">Информация о сериализации.</param>
        /// <param name="context">Контекст.</param>
        protected MorphologyModel(SerializationInfo si, StreamingContext context)
        {
            this.folder      = si.GetString("folder");
            this.groups      = (List <TagGroup>)si.GetValue("groups", typeof(List <TagGroup>));
            this.punctuation = (List <string>)si.GetValue("punctuation", typeof(List <string>));
            using (FileStream fs1 = File.Open(string.Format("{0}/{1}", folder, "nGramm.mdl"), FileMode.Open))
                using (FileStream fs2 = File.Open(string.Format("{0}/{1}", folder, "entClass.mdl"), FileMode.Open))
                {
                    this.nGramm   = Serializer.Deserialize <TagNGramm>(fs1);
                    this.entClass = new DawgEntropyClassModel();
                    entClass.Load(fs2);
                }
            this.sentenceDelimiters = (List <string>)si.GetValue("delimiters", typeof(List <string>));
            this.lemmaFile          = si.GetString("lemmaFile");
            FileStream fs = File.Open(this.lemmaFile, FileMode.Open);

            this.lemmatizer      = new Lemmatizer(fs);
            this.sentencePattern = (Regex)si.GetValue("sentencePattern", typeof(Regex));
            this.lexemPattern    = (Regex)si.GetValue("lexemPattern", typeof(Regex));
            this.minLengh        = si.GetInt32("minLenght");
            serviceTags          = (Dictionary <string, Tag>)si.GetValue("serviceTags",
                                                                         typeof(Dictionary <string, Tag>));
        }