扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
在本页阅读全文(共4页)
回归项目:) 训练语料一共有5万多个不同的词。建立2-gram统计模型时不断要把每个词在训练语料中出现频率统计出来,还要把每个词及其后面的那个词组成的2- gram在训练语料中出现频率统计出来。因为在切分时会频繁的在建立的2-gram模型中查找相关的数据,所有,存储这个2-gram模型数据的数据结构一定要能提供高效的查找。故选择hash表,它能提供常数时间的查找。Java类库里提供了HashMap类,基于数据两还不是非常大,故可直接拿来用。在存储时,每一个key值对应一个在训练语料中出现过的词语,而每一个key值对应的value值又是一个HashMap。暂且称为子hashmap.这个结构有点类似文件结构里的二级索引。 其相关代码如下:
怎么在预处理文件里把词分别读出来就不罗嗦了,方法:每读入一行,按空格分成String数组,用个正则表达式匹配下即能得到。
//此方法传入的两个词组成一个2-gram,prewd为前一个词,currwd为紧随其后的词
public static void add(String prewd , String currwd){
String key = prewd;
String curr = currwd;
boolean bb = HMap.containsKey(key); //Hmap是一个已存在的HashMap,用来存储2-gram统计模型。在这里判断 preword 是否在 主map 中
if (bb == false) { //若 主map 中无,则添加
HashMap hm = new HashMap(); //首先,新构造一个 子MAP
hm.put(key , new Integer(1)); //存储 主KEY 的频率 hm.put(curr , new Integer(1)); //存储 主KEY 后面紧接着的那个词频率
HMap.put(key,hm); //将 主KEY 和对应的 子MAP 放入 主MAP 中
}
else //若 主map 中含有该词
{
HashMap temp = (HashMap)HMap.get(key); //返回 主KEY 所对应的 子MAP ,进行值的修改
int count = ((Integer)temp.get(key)).intValue() + 1; //在 子map 中将 主key 次数加 1
temp.put(key , new Integer(count));
if (temp.containsKey(curr)) //判断 子map 中是否含有该词
{
int value = ((Integer)temp.get(curr)).intValue() + 1; temp.put(curr , new Integer(value));
}
else
temp.put(curr, new Integer(1)); //若无,则将其存入子map
HMap.put(key , temp); //子map 修改完毕 ,将其重新放入 主map
}
}
}
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者