关于中文分词的一些设想
引言
大学到尾声了,准备写个分词算法,记录一些设想
- 分词前期准备
// list集合以存储文本信息
List<String> strings = new ArrayList<>();
// map集合以去重
Map<String, Integer> objectObjectMap = new HashMap<>();
// chance集合以中转数据
ArrayList<String> chance = new ArrayList<>();
// list集合以存储实体信息
ArrayList<KwEntity> list=new ArrayList<>();
- 去除标点和数字
正则表达式
replaceAll("[\\pP‘’“”]", "").replaceAll("[\\dD‘’“”]", ""));
- 结巴分词
这里需要改成自己的分词算法
for (String date:strings){
List<String> strings1 = new JiebaSegmenter().sentenceProcess(date);
for (String s:strings1){
chance.add(s);
}
}
- 去重
采用map词典去重是不经意间想出来的
不过后期再回望当时,觉得这绝对是点睛之笔-----------因为之前都没有听说过Java分词
//去重
for (String date:chance){
// 去除单个字符
if(date.length()!=1){
// 如果字符串不存在,加入map词典
if (!objectObjectMap.containsKey(date))
objectObjectMap.put(date,1);
// 如果字符串存在,加入map词典value加一
else
objectObjectMap.put(date, (objectObjectMap.get(date)+1));
}
}
- 收集分词数据
// 封装成实体对象
Set<String> strings1 = objectObjectMap.keySet();
for (String key:strings1){
// 添加到list集合
list.add(new KwEntity(1,key,objectObjectMap.get(key)));
}
- 发送收集到的数据
return list;