Skip to content

Commit ef44aad

Browse files
committed
HiddenMarkovModel构造时备份参数 fix hankcs#1530
1 parent cb2d20f commit ef44aad

File tree

1 file changed

+29
-3
lines changed

1 file changed

+29
-3
lines changed

src/main/java/com/hankcs/hanlp/model/hmm/HiddenMarkovModel.java

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
import com.hankcs.hanlp.utility.MathUtility;
1414

15+
import java.io.*;
1516
import java.util.ArrayList;
1617
import java.util.Arrays;
1718
import java.util.Collection;
@@ -44,9 +45,9 @@ public abstract class HiddenMarkovModel
4445
*/
4546
public HiddenMarkovModel(float[] start_probability, float[][] transition_probability, float[][] emission_probability)
4647
{
47-
this.start_probability = start_probability;
48-
this.transition_probability = transition_probability;
49-
this.emission_probability = emission_probability;
48+
this.start_probability = (float[]) deepCopy(start_probability);
49+
this.transition_probability = (float[][]) deepCopy(transition_probability);
50+
this.emission_probability = (float[][]) deepCopy(emission_probability);
5051
}
5152

5253
/**
@@ -298,4 +299,29 @@ protected static boolean similar(float[] A, float[] B)
298299
if (Math.abs(A[i] - B[i]) > eta) return false;
299300
return true;
300301
}
302+
303+
protected static Object deepCopy(Object object)
304+
{
305+
if (object == null)
306+
{
307+
return null;
308+
}
309+
try
310+
{
311+
ByteArrayOutputStream bos = new ByteArrayOutputStream();
312+
ObjectOutputStream oos = new ObjectOutputStream(bos);
313+
oos.writeObject(object);
314+
oos.flush();
315+
oos.close();
316+
bos.close();
317+
318+
byte[] byteData = bos.toByteArray();
319+
ByteArrayInputStream bais = new ByteArrayInputStream(byteData);
320+
return new ObjectInputStream(bais).readObject();
321+
}
322+
catch (Exception e)
323+
{
324+
throw new RuntimeException(e);
325+
}
326+
}
301327
}

0 commit comments

Comments
 (0)