Java实现中文分词和词频统计按比例采样实践
文章原稿:
中国是世界四大文明古国之一,有着悠久的历史,距今约5000年前,以中原地区为中心开始出现聚落组织进而成国家和朝代,后历经多次演变和朝代更迭,持续时间较长的朝代有夏、商、周、汉、晋、唐、宋、元、明、清等。中原王朝历史上不断与北方游牧民族交往、征战,众多民族融合成为中华民族。20世纪初辛亥革命后,中国的君主政体退出历史舞台,取而代之的是共和政体。1949年中华人民共和国成立后,在中国大陆建立了人民代表大会制度的政体。中国有着多彩的民俗文化,传统艺术形式有诗词、戏曲、书法和国画等,春节、元宵、清明、端午、中秋、重阳等是中国重要的传统节日。
中文分词完成……
分词结果:
[中国] [是] [世界] [四] [大] [文明] [古] [国] [之一] [,] [有着] [悠久] [的] [历史] [,] [距] [今] [约] [5000] [年前] [,] [以] [中原] [地区] [为] [中心] [开始] [出现] [聚落] [组织] [进而] [成] [国家] [和] [朝代] [,] [后] [历经] [多次] [演变] [和] [朝代] [更迭] [,] [持续] [时间] [较] [长] [的] [朝代] [有] [夏] [、] [商] [、] [周] [、] [汉] [、] [晋] [、] [唐] [、] [宋] [、] [元] [、] [明] [、] [清] [等] [。] [中原] [王朝] [历史] [上] [不断] [与] [北方] [游牧] [民族] [交往] [、] [征战] [,] [众多] [民族] [融合] [成为] [中华民族] [。] [20] [世纪] [初] [辛亥革命] [后] [,] [中国] [的] [君主] [政体] [退出] [历史] [舞台] [,] [取而代之] [的] [是] [共和] [政体] [。] [1949年] [中华人民共和国] [成立] [后] [,] [在] [中国] [大陆] [建立] [了] [人民] [代表大会] [制度] [的] [政体] [。] [中国] [有着] [多] [彩] [的] [民俗] [文化] [,] [传统] [艺术] [形式] [有] [诗词] [、] [戏曲] [、] [书法] [和] [国画] [等] [,] [春节] [、] [元宵] [、] [清明] [、] [端午] [、] [中秋] [、] [重阳] [等] [是] [中国] [重要] [的] [传统] [节日] [。]
过滤单字完成……
统计词频完成……
词频排序完成……
采样完成……采样类型:高频 采样比率:30%.
采样结果如下:
词汇:[中国] 词性:[ns] 长度:[2] 词频:[4]
词汇:[历史] 词性:[n] 长度:[2] 词频:[3]
词汇:[政体] 词性:[n] 长度:[2] 词频:[3]
词汇:[朝代] 词性:[n] 长度:[2] 词频:[3]
词汇:[民族] 词性:[n] 长度:[2] 词频:[2]
词汇:[传统] 词性:[n] 长度:[2] 词频:[2]
词汇:[中心] 词性:[n] 长度:[2] 词频:[1]
词汇:[舞台] 词性:[n] 长度:[2] 词频:[1]
词汇:[文化] 词性:[n] 长度:[2] 词频:[1]
词汇:[国家] 词性:[n] 长度:[2] 词频:[1]
词汇:[演变] 词性:[v] 长度:[2] 词频:[1]
词汇:[节日] 词性:[n] 长度:[2] 词频:[1]
词汇:[成立] 词性:[v] 长度:[2] 词频:[1]
词汇:[戏曲] 词性:[n] 长度:[2] 词频:[1]
部分代码:
/**
* 按百分比取部分词汇(倒序为高频词汇、正序为低频词汇)
* @param article 一篇文章
* @param per 获取总数的百分比
* @param desc 是否倒序取元素
* @return
*/
public static Map<String, WordFilter> getMapByPer(String article, int per, boolean desc){
// 先进行中文分词
System.out.println(“文章原稿:\n”+article);
List<Term> list = ToAnalysis.parse(article);
System.out.println(“中文分词完成……\n分词结果:”);
for (Term t : list){
System.out.print(“[” + t.getName() + “] “);
}
// 取长度2以上的词组,不考虑单字
List<Term> list2w = SplitWord.getTermgtlen(list, 2);
list = null;
System.out.println(“过滤单字完成……”);
// 按词性、字符长度、字面值为层次(索引)形成词汇组织结构
Map<String, Map<String, Map<String, WordFilter>>> wordMapAll = SplitWord.resetWordPlus(list2w);
list2w = null;
// 根据分层级索引结构得到一个带词频的词汇表 (包含词性、字符长度)(未按词频排序)
Map<String, WordFilter> wordMap = SplitWord.collectWordFilter(wordMapAll);
wordMapAll = null;
System.out.println(“统计词频完成……”);
// 得到一个按词频排序(按词频由低到高排序)的集合(同时可以获取词性、长度等信息)
Map<String, WordFilter> map = SplitWord.sortMapByFrequency(wordMap);
wordMap = null;
System.out.println(“词频排序完成……”);
// 按一定百分比取部分词汇(倒序为高频词汇、正序为低频词汇)
Map<String, WordFilter> newMap = SplitWord.getMapByPer(map, per, desc);
map = null;
System.out.println(“采样完成……采样类型:” + (desc ? “高频” : “低频”) + ” 采样比率:” + per + “%.”);
return newMap;
}
声明: 除非转自他站(如有侵权,请联系处理)外,本文采用 BY-NC-SA 协议进行授权 | 嗅谱网
转载请注明:转自《Java实现中文分词和词频统计按比例采样实践》
本文地址:http://www.xiupu.net/archives-4213.html
关注公众号:
微信赞赏
支付宝赞赏