1 // MeCab -- Yet Another Part-of-Speech and Morphological Analyzer
\r
3 // Copyright(C) 2001-2006 Taku Kudo <taku@chasen.org>
\r
4 // Copyright(C) 2004-2006 Nippon Telegraph and Telephone Corporation
\r
6 using System.Collections.Generic;
\r
9 using System.Globalization;
\r
13 public class MeCabNode
\r
18 public MeCabNode Prev { get; set; }
\r
23 public MeCabNode Next { get; set; }
\r
28 public MeCabNode ENext { get; set; }
\r
33 public MeCabNode BNext { get; set; }
\r
35 internal MeCabPath RPath { get; set; }
\r
37 internal MeCabPath LPath { get; set; }
\r
39 //internal MeCabNode[] BeginNodeList { get; set; }
\r
41 //internal MeCabNode[] EndNodeList { get; set; }
\r
46 public string Surface { get; set; }
\r
48 private string feature;
\r
53 public string Feature
\r
57 if (this.feature == null)
\r
58 this.feature = this.Dictionary.GetFeature(this.featurePos);
\r
59 return this.feature;
\r
63 this.feature = value;
\r
67 private uint featurePos;
\r
68 private MeCabDictionary Dictionary { get; set; }
\r
71 /// 素性情報を遅延読込するための値設定
\r
73 /// <param name="featurePos">辞書内の素性情報の位置</param>
\r
74 /// <param name="dic">検索元の辞書</param>
\r
75 internal void SetFeature(uint featurePos, MeCabDictionary dic)
\r
77 this.feature = null;
\r
78 this.featurePos = featurePos;
\r
79 this.Dictionary = dic;
\r
84 /// 形態素に付与される ユニークID
\r
86 public uint Id { get; set; }
\r
92 public int Length { get; set; }
\r
95 /// 形態素の長さ(先頭のスペースを含む)
\r
97 public int RLength { get; set; }
\r
102 public ushort RCAttr { get; set; }
\r
107 public ushort LCAttr { get; set; }
\r
112 public ushort PosId { get; set; }
\r
117 public uint CharType { get; set; }
\r
122 public MeCabNodeStat Stat { get; set; }
\r
127 public bool IsBest { get; set; }
\r
130 ///// it is avaialbe only when BOS node
\r
132 //public int SentenceLength { get; set; }
\r
135 /// forward backward の foward log 確率
\r
137 public float Alpha { get; set; }
\r
140 /// forward backward の backward log 確率
\r
142 public float Beta { get; set; }
\r
147 public float Prob { get; set; }
\r
152 public short WCost { get; set; }
\r
157 public long Cost { get; set; }
\r
159 //public Token Token { get; set; }
\r
161 public int BPos { get; set; }
\r
163 public int EPos { get; set; }
\r
165 public override string ToString()
\r
167 StringBuilder os = new StringBuilder();
\r
169 os.Append(this.Id).Append(" ");
\r
171 os.Append("[Surface:");
\r
172 if (this.Stat == MeCabNodeStat.Bos)
\r
174 else if (this.Stat == MeCabNodeStat.Eos)
\r
177 os.Append(this.Surface);
\r
180 os.Append("[Feature:").Append(this.Feature).Append("]");
\r
181 os.Append("[BPos:").Append(this.BPos).Append("]");
\r
182 os.Append("[EPos:").Append(this.EPos).Append("]");
\r
183 os.Append("[RCAttr:").Append(this.RCAttr).Append("]");
\r
184 os.Append("[LCAttr:").Append(this.LCAttr).Append("]");
\r
185 os.Append("[PosId:").Append(this.PosId).Append("]");
\r
186 os.Append("[CharType:").Append(this.CharType).Append("]");
\r
187 os.Append("[Stat:").Append((int)this.Stat).Append("]");
\r
188 os.Append("[IsBest:").Append(this.IsBest).Append("]");
\r
189 os.Append("[Alpha:").Append(this.Alpha).Append("]");
\r
190 os.Append("[Beta:").Append(this.Beta).Append("]");
\r
191 os.Append("[Prob:").Append(this.Prob).Append("]");
\r
192 os.Append("[Cost:").Append(this.Cost).Append("]");
\r
194 for (MeCabPath path = this.LPath; path != null; path = path.LNext)
\r
196 os.Append("[Path:");
\r
198 os.Append(path.LNode.Id).Append(" ");
\r
200 os.Append("(Cost:").Append(path.Cost).Append(")");
\r
201 os.Append("(Prob:").Append(path.Prob).Append(")");
\r
205 return os.ToString();
\r