@@ -130,13 +130,11 @@ private void setAUnitAttribute() {
130
130
posIncAtt .setPositionIncrement (1 );
131
131
}
132
132
133
- int startOffset = subunits .offset ();
134
- Morpheme morpheme = subunits .next ();
135
- int endOffset = subunits .offset ();
136
- termAtt .setEmpty ().append (morpheme .surface ());
137
- morphemeAtt .setMorpheme (morpheme );
138
- morphemeAtt .setOffsets (offsetMap .subList (startOffset , endOffset + 1 ));
139
- offsetAtt .setOffset (correctOffset (startOffset ), correctOffset (endOffset ));
133
+ MorphemeSubunits .Subunit su = subunits .next ();
134
+ termAtt .setEmpty ().append (su .morpheme .surface ());
135
+ morphemeAtt .setMorpheme (su .morpheme );
136
+ morphemeAtt .setOffsets (offsetMap .subList (su .begin , su .end + 1 ));
137
+ offsetAtt .setOffset (correctOffset (su .begin ), correctOffset (su .end ));
140
138
}
141
139
142
140
private void setOOVAttribute () {
@@ -194,29 +192,40 @@ public int offset() {
194
192
}
195
193
196
194
static class MorphemeSubunits {
195
+ static class Subunit {
196
+ final Morpheme morpheme ;
197
+ final int begin ;
198
+ final int end ;
199
+
200
+ public Subunit (Morpheme morpheme , int begin , int end ) {
201
+ this .morpheme = morpheme ;
202
+ this .begin = begin ;
203
+ this .end = end ;
204
+ }
205
+ }
206
+
197
207
private List <Morpheme > morphemes ;
198
208
private int size ;
199
209
private int index ;
200
- private int offset ;
210
+ private int baseOffset ;
201
211
202
212
public void setUnits (List <Morpheme > morphemes ) {
203
213
this .morphemes = morphemes ;
204
214
size = morphemes .size ();
205
215
index = 0 ;
206
- offset = 0 ;
216
+ baseOffset = morphemes . get ( 0 ). begin () ;
207
217
}
208
218
209
219
public boolean hasNext () {
210
220
return index < size ;
211
221
}
212
222
213
- public Morpheme next () {
223
+ public Subunit next () {
214
224
if (!hasNext ()) {
215
225
throw new IllegalStateException ();
216
226
}
217
227
Morpheme m = morphemes .get (index ++);
218
- offset += m .end () - m .begin ();
219
- return m ;
228
+ return new Subunit (m , m .begin () - baseOffset , m .end () - baseOffset );
220
229
}
221
230
222
231
public int size () {
@@ -226,9 +235,5 @@ public int size() {
226
235
public int index () {
227
236
return index ;
228
237
}
229
-
230
- public int offset () {
231
- return offset ;
232
- }
233
238
}
234
239
}
0 commit comments