• R/O
  • SSH
  • HTTPS

igo: コミット


コミットメタ情報

リビジョン107 (tree)
日時2011-12-02 22:25:05
作者phjgt

ログメッセージ

ViterbiNode用のArrayListの生成を実際に必要になるまで遅延

変更サマリ

差分

--- trunk/igo/src/net/reduls/igo/Tagger.java (revision 106)
+++ trunk/igo/src/net/reduls/igo/Tagger.java (revision 107)
@@ -13,7 +13,9 @@
1313 * 形態素解析を行うクラス
1414 */
1515 public final class Tagger {
16- private static final ArrayList<ViterbiNode> BOS_NODES = new ArrayList<ViterbiNode>(1);
16+ static class ViterbiNodeList extends ArrayList<ViterbiNode> {}
17+
18+ private static final ViterbiNodeList BOS_NODES = new ViterbiNodeList();
1719 static {
1820 BOS_NODES.add(ViterbiNode.makeBOSEOS());
1921 }
@@ -86,15 +88,12 @@
8688
8789 private ViterbiNode parseImpl(CharSequence text) {
8890 final int len = text.length();
89- final ArrayList<ArrayList<ViterbiNode>> nodesAry = new ArrayList<ArrayList<ViterbiNode>>(len+1);
91+ final ViterbiNodeList[] nodesAry = new ViterbiNodeList[len+1];
92+ nodesAry[0] = BOS_NODES;
9093
91- nodesAry.add(BOS_NODES);
92- for(int i=1; i <= len; i++)
93- nodesAry.add(new ArrayList<ViterbiNode>());
94-
9594 MakeLattice fn = new MakeLattice(nodesAry);
9695 for(int i=0; i < len; i++) {
97- if(nodesAry.get(i).isEmpty()==false) {
96+ if(nodesAry[i] != null) {
9897 fn.set(i);
9998 wdc.search(text, i, fn); // 単語辞書から形態素を検索
10099 unk.search(text, i, wdc, fn); // 未知語辞書から形態素を検索
@@ -101,7 +100,7 @@
101100 }
102101 }
103102
104- ViterbiNode cur = setMincostNode(ViterbiNode.makeBOSEOS(), nodesAry.get(len)).prev;
103+ ViterbiNode cur = setMincostNode(ViterbiNode.makeBOSEOS(), nodesAry[len]).prev;
105104
106105 // reverse
107106 ViterbiNode head = null;
@@ -114,7 +113,7 @@
114113 return head;
115114 }
116115
117- private ViterbiNode setMincostNode(ViterbiNode vn, ArrayList<ViterbiNode> prevs) {
116+ private ViterbiNode setMincostNode(ViterbiNode vn, ViterbiNodeList prevs) {
118117 final ViterbiNode f = vn.prev = prevs.get(0);
119118 int minCost = f.cost + mtx.linkCost(f.rightId, vn.leftId);
120119
@@ -131,27 +130,34 @@
131130 }
132131
133132 private final class MakeLattice implements WordDic.Callback {
134- private final ArrayList<ArrayList<ViterbiNode>> nodesAry;
133+ private final ViterbiNodeList[] nodesAry;
135134 private int i;
136- private ArrayList<ViterbiNode> prevs;
135+ private ViterbiNodeList prevs;
137136 private boolean empty=true;
138137
139- public MakeLattice(ArrayList<ArrayList<ViterbiNode>> nodesAry) {
138+ public MakeLattice(ViterbiNodeList[] nodesAry) {
140139 this.nodesAry = nodesAry;
141140 }
142141
143142 public void set(int i) {
144143 this.i = i;
145- prevs = nodesAry.get(i);
144+ prevs = nodesAry[i];
145+ nodesAry[i] = null;
146146 empty = true;
147147 }
148148
149149 public void call(ViterbiNode vn) {
150150 empty=false;
151+
152+ final int end = i+vn.length;
153+ if(nodesAry[end]==null)
154+ nodesAry[end] = new ViterbiNodeList();
155+ ViterbiNodeList ends = nodesAry[end];
156+
151157 if(vn.isSpace)
152- nodesAry.get(i+vn.length).addAll(prevs);
158+ nodesAry[end].addAll(prevs);
153159 else
154- nodesAry.get(i+vn.length).add(setMincostNode(vn, prevs));
160+ nodesAry[end].add(setMincostNode(vn, prevs));
155161 }
156162
157163 public boolean isEmpty() { return empty; }
--- trunk/igo/build.xml (revision 106)
+++ trunk/igo/build.xml (revision 107)
@@ -1,7 +1,7 @@
11 <?xml version="1.0" encoding="UTF-8"?>
22
33 <project name="igo" default="jar" basedir=".">
4- <property name="version" value="0.4.3" />
4+ <property name="version" value="0.4.4" />
55 <property name="src.dir" value="src"/>
66 <property name="classes.dir" value="classes"/>
77 <property name="javadoc.dir" value="docs"/>
旧リポジトリブラウザで表示