OSDN Git Service

SVNから移行
[nmecab/NMeCabRepo2.git] / trunk / src / LibNMeCab / MeCabNode.cs
1 //  MeCab -- Yet Another Part-of-Speech and Morphological Analyzer\r
2 //\r
3 //  Copyright(C) 2001-2006 Taku Kudo <taku@chasen.org>\r
4 //  Copyright(C) 2004-2006 Nippon Telegraph and Telephone Corporation\r
5 using System;\r
6 using System.Collections.Generic;\r
7 using System.Text;\r
8 using NMeCab.Core;\r
9 using System.Globalization;\r
10 \r
11 namespace NMeCab\r
12 {\r
13     public class MeCabNode\r
14     {\r
15         /// <summary>\r
16         /// 一つ前の形態素\r
17         /// </summary>\r
18         public MeCabNode Prev { get; set; }\r
19 \r
20         /// <summary>\r
21         /// 一つ先の形態素\r
22         /// </summary>\r
23         public MeCabNode Next { get; set; }\r
24 \r
25         /// <summary>\r
26         /// 同じ位置で終わる形態素\r
27         /// </summary>\r
28         public MeCabNode ENext { get; set; }\r
29 \r
30         /// <summary>\r
31         /// 同じ開始位置で始まる形態素\r
32         /// </summary>\r
33         public MeCabNode BNext { get; set; }\r
34 \r
35         internal MeCabPath RPath { get; set; }\r
36 \r
37         internal MeCabPath LPath { get; set; }\r
38 \r
39         //internal MeCabNode[] BeginNodeList { get; set; }\r
40 \r
41         //internal MeCabNode[] EndNodeList { get; set; }\r
42 \r
43         /// <summary>\r
44         /// 形態素の文字列情報\r
45         /// </summary>\r
46         public string Surface { get; set; }\r
47 \r
48         private string feature;\r
49 \r
50         /// <summary>\r
51         /// CSV で表記された素性情報\r
52         /// </summary>\r
53         public string Feature\r
54         {\r
55             get\r
56             {\r
57                 if (this.feature == null)\r
58                     this.feature = this.Dictionary.GetFeature(this.featurePos);\r
59                 return this.feature;\r
60             }\r
61             set\r
62             {\r
63                 this.feature = value;\r
64             }\r
65         }\r
66 \r
67         private uint featurePos;\r
68         private MeCabDictionary Dictionary { get; set; }\r
69 \r
70         /// <summary>\r
71         /// 素性情報を遅延読込するための値設定\r
72         /// </summary>\r
73         /// <param name="featurePos">辞書内の素性情報の位置</param>\r
74         /// <param name="dic">検索元の辞書</param>\r
75         internal void SetFeature(uint featurePos, MeCabDictionary dic)\r
76         {\r
77             this.feature = null;\r
78             this.featurePos = featurePos;\r
79             this.Dictionary = dic;\r
80         }\r
81 \r
82 #if NeedId\r
83         /// <summary>\r
84         /// 形態素に付与される ユニークID\r
85         /// </summary>\r
86         public uint Id { get; set; }\r
87 #endif\r
88 \r
89         /// <summary>\r
90         /// 形態素の長さ\r
91         /// </summary>\r
92         public int Length { get; set; }\r
93 \r
94         /// <summary>\r
95         /// 形態素の長さ(先頭のスペースを含む)\r
96         /// </summary>\r
97         public int RLength { get; set; }\r
98 \r
99         /// <summary>\r
100         /// 右文脈 id\r
101         /// </summary>\r
102         public ushort RCAttr { get; set; }\r
103 \r
104         /// <summary>\r
105         /// 左文脈 id\r
106         /// </summary>\r
107         public ushort LCAttr { get; set; }\r
108 \r
109         /// <summary>\r
110         /// 形態素 ID\r
111         /// </summary>\r
112         public ushort PosId { get; set; }\r
113 \r
114         /// <summary>\r
115         /// 文字種情報\r
116         /// </summary>\r
117         public uint CharType { get; set; }\r
118 \r
119         /// <summary>\r
120         /// 形態素の種類\r
121         /// </summary>\r
122         public MeCabNodeStat Stat { get; set; }\r
123 \r
124         /// <summary>\r
125         /// ベスト解\r
126         /// </summary>\r
127         public bool IsBest { get; set; }\r
128 \r
129         ///// <summary>\r
130         ///// it is avaialbe only when BOS node\r
131         ///// </summary>\r
132         //public int SentenceLength { get; set; }\r
133 \r
134         /// <summary>\r
135         /// forward backward の foward log 確率\r
136         /// </summary>\r
137         public float Alpha { get; set; }\r
138 \r
139         /// <summary>\r
140         /// forward backward の backward log 確率\r
141         /// </summary>\r
142         public float Beta { get; set; }\r
143 \r
144         /// <summary>\r
145         /// 周辺確率\r
146         /// </summary>\r
147         public float Prob { get; set; }\r
148 \r
149         /// <summary>\r
150         /// 単語生起コスト\r
151         /// </summary>\r
152         public short WCost { get; set; }\r
153 \r
154         /// <summary>\r
155         /// 累積コスト\r
156         /// </summary>\r
157         public long Cost { get; set; }\r
158 \r
159         //public Token Token { get; set; }\r
160 \r
161         public int BPos { get; set; }\r
162 \r
163         public int EPos { get; set; }\r
164 \r
165         public override string ToString()\r
166         {\r
167             StringBuilder os = new StringBuilder();\r
168 #if NeedId\r
169             os.Append(this.Id).Append(" ");\r
170 #endif\r
171             os.Append("[Surface:");\r
172             if (this.Stat == MeCabNodeStat.Bos)\r
173                 os.Append("BOS");\r
174             else if (this.Stat == MeCabNodeStat.Eos)\r
175                 os.Append("EOS");\r
176             else\r
177                 os.Append(this.Surface);\r
178             os.Append("]");\r
179 \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
193 \r
194             for (MeCabPath path = this.LPath; path != null; path = path.LNext)\r
195             {\r
196                 os.Append("[Path:");\r
197 #if NeedId\r
198                 os.Append(path.LNode.Id).Append(" ");\r
199 #endif\r
200                 os.Append("(Cost:").Append(path.Cost).Append(")");\r
201                 os.Append("(Prob:").Append(path.Prob).Append(")");\r
202                 os.Append("]");\r
203             }\r
204 \r
205             return os.ToString();\r
206         }\r
207     }\r
208 }\r