public void Open(MeCabParam param) { var dictFactory = param.UseMemoryMappedFile ? new Func <IMeCabDictionary>(() => new MeCabDictionaryMMF()) : new Func <IMeCabDictionary>(() => new MeCabDictionary()); this.unkDic = dictFactory(); this.dic = new IMeCabDictionary[param.UserDic.Length + 1]; string prefix = param.DicDir; this.property.Open(prefix); this.unkDic.Open(Path.Combine(prefix, UnkDicFile)); if (this.unkDic.Type != DictionaryType.Unk) { throw new MeCabInvalidFileException("not a unk dictionary", this.unkDic.FileName); } IMeCabDictionary sysDic = dictFactory(); sysDic.Open(Path.Combine(prefix, SysDicFile)); if (sysDic.Type != DictionaryType.Sys) { throw new MeCabInvalidFileException("not a system dictionary", sysDic.FileName); } this.dic[0] = sysDic; for (int i = 0; i < param.UserDic.Length; i++) { IMeCabDictionary d = dictFactory(); d.Open(Path.Combine(prefix, param.UserDic[i])); if (d.Type != DictionaryType.Usr) { throw new MeCabInvalidFileException("not a user dictionary", d.FileName); } if (!sysDic.IsCompatible(d)) { throw new MeCabInvalidFileException("incompatible dictionary", d.FileName); } this.dic[i + 1] = d; } this.unkTokens = new Token[this.property.Size][]; for (int i = 0; i < this.unkTokens.Length; i++) { string key = this.property.Name(i); DoubleArrayResultPair n = this.unkDic.ExactMatchSearch(key); if (n.Value == -1) { throw new MeCabInvalidFileException("cannot find UNK category: " + key, this.unkDic.FileName); } this.unkTokens[i] = this.unkDic.GetToken(n); } this.space = this.property.GetCharInfo(' '); this.bosFeature = param.BosFeature; this.unkFeature = param.UnkFeature; this.maxGroupingSize = param.MaxGroupingSize; if (this.maxGroupingSize <= 0) { this.maxGroupingSize = DefaltMaxGroupingSize; } }
public bool IsKindOf(CharInfo c) { return(BitUtils.CompareAnd(this.bits, c.bits, 0, 18)); }