Skip to content

Commit 6a235c5

Browse files
committed
文档
1 parent c33c0b4 commit 6a235c5

File tree

3 files changed

+74
-0
lines changed

3 files changed

+74
-0
lines changed

src/main/java/com/hankcs/hanlp/dictionary/common/CommonDictionary.java

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,20 @@ public abstract class CommonDictionary<V>
3434
{
3535
DoubleArrayTrie<V> trie;
3636

37+
/**
38+
* 从字节中加载值数组
39+
*
40+
* @param byteArray
41+
* @return
42+
*/
3743
protected abstract V[] loadValueArray(ByteArray byteArray);
3844

45+
/**
46+
* 从txt路径加载
47+
*
48+
* @param path
49+
* @return
50+
*/
3951
public boolean load(String path)
4052
{
4153
trie = new DoubleArrayTrie<V>();
@@ -60,6 +72,7 @@ public boolean load(String path)
6072
{
6173
logger.warning("读取" + path + "失败" + e);
6274
}
75+
onLoaded(map);
6376
Set<Map.Entry<String, V>> entrySet = map.entrySet();
6477
List<String> keyList = new ArrayList<String>(entrySet.size());
6578
List<V> valueList = new ArrayList<V>(entrySet.size());
@@ -79,6 +92,12 @@ public boolean load(String path)
7992
return true;
8093
}
8194

95+
/**
96+
* 从dat路径加载
97+
*
98+
* @param byteArray
99+
* @return
100+
*/
82101
protected boolean loadDat(ByteArray byteArray)
83102
{
84103
V[] valueArray = loadValueArray(byteArray);
@@ -89,6 +108,13 @@ protected boolean loadDat(ByteArray byteArray)
89108
return trie.load(byteArray, valueArray);
90109
}
91110

111+
/**
112+
* 保存dat到路径
113+
*
114+
* @param path
115+
* @param valueArray
116+
* @return
117+
*/
92118
protected boolean saveDat(String path, List<V> valueArray)
93119
{
94120
try
@@ -110,6 +136,13 @@ protected boolean saveDat(String path, List<V> valueArray)
110136
return true;
111137
}
112138

139+
/**
140+
* 保存单个值到流中
141+
*
142+
* @param value
143+
* @param out
144+
* @throws IOException
145+
*/
113146
protected abstract void saveValue(V value, DataOutputStream out) throws IOException;
114147

115148
/**
@@ -144,5 +177,20 @@ public int size()
144177
return trie.size();
145178
}
146179

180+
/**
181+
* 从一行词典条目创建值
182+
*
183+
* @param params 第一个元素为键,请注意跳过
184+
* @return
185+
*/
147186
protected abstract V createValue(String[] params);
187+
188+
/**
189+
* 文本词典加载完毕的回调函数
190+
*
191+
* @param map
192+
*/
193+
protected void onLoaded(TreeMap<String, V> map)
194+
{
195+
}
148196
}

src/main/java/com/hankcs/hanlp/dictionary/common/EnumItemDictionary.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
import java.util.Map;
1919

2020
/**
21+
* 枚举条目的通用词典(类似C++的模板,然而Java并没有模板机制,所以有几个方法需要子类啰嗦一下)
22+
*
2123
* @author hankcs
2224
*/
2325
public abstract class EnumItemDictionary<E extends Enum<E>> extends CommonDictionary<EnumItem<E>>
@@ -34,10 +36,26 @@ protected EnumItem<E> createValue(String[] params)
3436
return nrEnumItem;
3537
}
3638

39+
/**
40+
* 代理E.valueOf
41+
*
42+
* @param name
43+
* @return
44+
*/
3745
protected abstract E valueOf(String name);
3846

47+
/**
48+
* 代理E.values
49+
*
50+
* @return
51+
*/
3952
protected abstract E[] values();
4053

54+
/**
55+
* 代理new EnumItem<E>
56+
*
57+
* @return
58+
*/
4159
protected abstract EnumItem<E> newItem();
4260

4361
@Override

src/main/java/com/hankcs/hanlp/dictionary/nr/NRDictionary.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
import com.hankcs.hanlp.corpus.tag.NR;
1717
import com.hankcs.hanlp.dictionary.common.EnumItemDictionary;
1818

19+
import java.util.TreeMap;
20+
1921
/**
2022
* 一个好用的人名词典
2123
*
@@ -41,4 +43,10 @@ protected EnumItem<NR> newItem()
4143
{
4244
return new EnumItem<NR>();
4345
}
46+
47+
@Override
48+
protected void onLoaded(TreeMap<String, EnumItem<NR>> map)
49+
{
50+
map.put(" ", new EnumItem<NR>(NR.K, NR.A)); // txt中不允许出现空格词条,这里补上
51+
}
4452
}

0 commit comments

Comments
 (0)