/// <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(); }
/// <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(); }
/// <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>)); }