Hadoop-统计红楼梦里出现名字的次数

package org.bigdata508.util;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.bigdata.util.HadoopCfg;
import org.wltea.analyzer.lucene.IKAnalyzer;

public class DreamOfRedMansion {
    public static Set<String> dic = new HashSet<>();
    static {
        String ProjectPath = DreamOfRedMansion.class.getResource("/").getFile().toString();
        try {
            BufferedReader br = new BufferedReader(new FileReader(new File(
                    ProjectPath + File.separator + "\\DreamOfRed.txt")));
            String line=null;
            while((line=br.readLine())!=null){
                line=line.replaceAll("\\s+", "");
                dic.add(line);
            }
            br.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    private static List<String> parse(String text){
        List<String> words = new ArrayList<String>();
        //创建IKAnalyzer中文分词对象
        IKAnalyzer analyzer = new IKAnalyzer();
        // 使用智能分词
        analyzer.setUseSmart(true);
        // 分词
        StringReader reader = new StringReader(text);
        try {
            TokenStream ts = analyzer.tokenStream("content",reader);
            CharTermAttribute strs = ts.getAttribute(CharTermAttribute.class);
            ts.addAttribute(CharTermAttribute.class);
            // 遍历分词数据
            while (ts.incrementToken()) {
                if(dic.contains(strs.toString())){
                    words.add(strs.toString());
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        reader.close();
        return words;
    }

    private static class DreamOfRedMansionMapper extends Mapper<LongWritable, Text, Text, LongWritable> {

        @Override
        protected void map(LongWritable key, Text value, Context context)
                throws IOException, InterruptedException {
            List<String> names = parse(value.toString());
            for (String name : names) {
                context.write(new Text(name), new LongWritable(1));
            }
        }
    }

    private static class DreamOfRedMansionReducer extends Reducer<Text, LongWritable, Text, LongWritable> {

        @Override
        protected void reduce(Text key, Iterable<LongWritable> values,
                Context context) throws IOException, InterruptedException {
            Long sum = 0L;
            for (LongWritable value : values) {
                sum = sum + value.get();
            }
            context.write(new Text(key+","), new LongWritable(sum));
        }
    }

    public static class DreamOfRedMansionSortMapper extends Mapper<LongWritable, Text, LongWritable, Text>{

        @Override
        protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, LongWritable, Text>.Context context)
                throws IOException, InterruptedException {
            LongWritable data = new LongWritable(Integer.parseInt(value.toString().split(",")[1].trim()));
            context.write(data, new Text(value.toString().split(",")[0]));
        }

    }

    public static class DreamOfRedMansionSortReduce extends Reducer<LongWritable, Text, Text, LongWritable>{

        @Override
        protected void reduce(LongWritable key, Iterable<Text> values,
                Reducer<LongWritable, Text, Text, LongWritable>.Context context) throws IOException, InterruptedException {
            for(Text str : values){
                context.write(str, key);
            }
        }

    }
    public static void main(String[] args) throws Exception{
            Configuration cfg = HadoopCfg.getInstance();
            Job job = Job.getInstance(cfg);
            job.setJobName("DreamOfRedMansion");
            job.setJarByClass(DreamOfRedMansion.class);

            // mapper
            job.setMapperClass(DreamOfRedMansionMapper.class);
            job.setMapOutputKeyClass(Text.class);
            job.setMapOutputValueClass(LongWritable.class);

            // reducer
            job.setReducerClass(DreamOfRedMansionReducer.class);
            job.setOutputKeyClass(Text.class);
            job.setOutputValueClass(LongWritable.class);

            FileInputFormat.addInputPath(job, new Path("/DreamOfRedMansionInput"));
            FileOutputFormat.setOutputPath(job, new Path("/red_Out/"));
            job.waitForCompletion(true);

            Configuration conf = HadoopCfg.getInstance();
            Job job2 = Job.getInstance(conf);
            job2.setJobName("DreamOfRedMansionSort");
            job2.setJarByClass(DreamOfRedMansion.class);

            // sortmapper
            job2.setMapperClass(DreamOfRedMansionSortMapper.class);
            job2.setMapOutputKeyClass(LongWritable.class);
            job2.setMapOutputValueClass(Text.class);

            // sortreducer
            job2.setReducerClass(DreamOfRedMansionSortReduce.class);
            job2.setOutputKeyClass(Text.class);
            job2.setOutputValueClass(LongWritable.class);

            FileInputFormat.addInputPath(job2, new Path("/red_Out"));
            FileOutputFormat.setOutputPath(job2, new Path("/red_Out_sort/"));

            job2.waitForCompletion(true);
    }

}
dic词典获取匹配名字:
DreamOfRed.txt
林黛玉
薛宝钗
贾元春
贾迎春
贾探春
贾惜春
李纨
妙玉
湘云
王熙凤
贾巧姐
秦可卿
晴雯
麝月
袭人
鸳鸯
雪雁
紫鹃
碧痕
平儿
香菱
金钏
司棋
抱琴
赖大
焦大
王善保
周瑞
林之孝
乌进孝
包勇
吴贵
吴新登
邓好时
王柱儿
余信
庆儿
昭儿
兴儿
隆儿
坠儿
喜儿
寿儿
丰儿
住儿
小舍儿
李十儿
玉柱儿
贾敬
贾赦
贾政
贾宝玉
贾琏
贾珍
贾环
贾蓉
贾兰
贾芸
贾蔷
贾芹
琪官
芳官
藕官
蕊官
药官
玉官
宝官
龄官
茄官
艾官
豆官
葵官
妙玉
智能
智通
智善
圆信
大色空
净虚
彩屏
彩儿
彩凤
彩霞
彩鸾
彩明
彩云
甄宝玉
薛宝琴
薛蟠
薛蝌
王夫人
王子腾
王仁
尤老娘
尤氏
尤二姐
尤三姐
贾敏
贾瑞
贾代儒
贾代化
贾代修
贾代善
詹光
单聘仁
程日兴
王作梅
石呆子
张华
冯渊
张金哥
茗烟
扫红
锄药
伴鹤小鹊
小红
小蝉
刘姥姥
马道婆
宋嬷嬷
张妈妈
秦锺
蒋玉菡
柳湘莲
东平王
乌进孝
冷子兴
山子野
方椿
载权
夏秉忠
周太监
裘世安
抱琴
司棋
侍画
入画
珍珠
琥珀
玻璃
翡翠
二木头
二丫头
卜氏
卜世仁
卜固修
入画
入画之叔
入画之婶
于老爷
大了
大姐
大姐儿
万儿
万虚
山子野
小红
小霞
小螺
小蝉
小鹊
小厮
小丫头
小幺儿
小内监
小舍儿
小蝉儿
小鸠儿
小道士
小吉祥儿
川宁侯
门子
义忠亲王
卫若兰
女尼
女先儿
马尚
马魁
马道婆
丰儿
王仁
王氏
王公
王成
王兴
王忠
王荣
王信
王一贴
王大人
王大夫
王大妈
王大爷
王子胜
王子腾
王太医
王尔调
王奶奶
王奶妈
王老爷
王作梅
王住儿
王君效
王希献
王和荣
王济仁
王青儿
王板儿
王狗儿
王家的
王短腿
王善保
王道士
王嬷嬷
王成之父
王兴媳妇
王信家的
王子腾夫人
王住儿媳妇
王善保家的
云儿
云光
云老爷五儿
五嫂子
元春
木居士
太妃
太上皇
太祖皇帝
尤氏
尤二姐
尤三姐
尤老娘
尤婆子
尤氏母亲
尤老安人
少妃
牛清
牛继宗
毛半仙
乌进孝
乌庄
长府官
长安守备
长安府知府
长安守备之子
仇都尉
凤姐
凤哥
凤丫头
凤哥儿
凤辣子
文化
文官
文清
文妙真人
方杏
方椿
引泉
引愁
金女
双寿
双瑞
孔继宗
书吏
水溶
水仙庵姑子
玉官
玉桂
玉爱
玉桂儿
玉钏儿
玉钏儿娘
玉桂儿家
玉桂儿媳妇
玉柱儿媳妇
巧姐
艾官
可人
可儿
石头
石光珠
石呆子
石头
呆子
平儿
平安节度
东平郡王
世荣
田妈
叶生
叶妈
史公
史鼎
史鼐
史太君
史湘云
史鼎夫人
史鼐夫人
史湘云夫
史湘云父
史湘云母
四儿
四姐
四姐儿
北静王
北静郡王
北静王妃
包勇
白玉钏
白老媳妇
白老媳妇儿
乐善郡王
外藩王爷
宁国公
冯仆
冯唐
冯渊
冯胖子
冯紫英
司棋
司棋妈
邢氏
邢忠
邢大舅
夫人
邢岫烟
邢嫂子
邢德全
老三
老赵
老僧
老太妃
老苍头
老田妈
老宋妈
老祝妈
老张妈
老叶妈
老王家的
老王道士
西平王爷
西宁郡王
灰待者
毕大人
毕知庵
扫红
扫花
豆官
同贵
同喜朱大娘
朱嫂子
多官儿
多姑娘
多浑虫
多姑娘儿
色空
邬将军
庆儿
庆国公
刘四
刘氏
刘妈
刘大夫
刘铁嘴
兴儿
安国公
许氏
守备之子
阴阳生
孙大人
孙绍祖
寿儿
寿山伯
芸香
芳官
花母
花自芳
花姐姐
花袭人
花大姐姐
严老爷
杏奴
李二
李氏
李妈
李纨
李孝
李纹
李贵
李祥
李绮
李德
李十儿
李少爷
李奶子
李奶奶
李守忠
李先儿
李店主
李宫裁
李员外
李御史
李婶子
李婶娘
李衙内
李嬷嬷
杨氏
杨待郎
杨提督
来升
来兴
来旺
来喜
来旺儿
来升媳妇
来旺之子
来旺家的
来旺媳妇
来喜家的
来喜媳妇
吴良
吴贵
吴兴
吴大人
吴大娘
吴天佑
吴巡抚
吴贵儿
吴贵妃
吴贵妻
吴新登
吴兴登
吴兴家的
吴贵媳妇
吴新登媳妇
吴巡抚大人
时觉
时福
呆霸王
何三
何妈
何婆
住儿
伴鹤
余信
余信家的
迎春
迎春妈
冷子兴
冷子兴家的
沁香
沈世兄
沈嬷嬷
宋妈
宋妈妈
宋嬷嬷
忘仁
良儿
妙玉
张二
张大
张三
张公
张华
张材
张暂
张大夫
张王氏
张太医
张友士
张先生
张老爷
张奶妈
张如圭
张法官
张若锦
张金哥
张财主
张家的
张真人
张道士
张德辉
张爷爷
张大老爷
张材家的
陈翼
陈也俊
陈瑞文
坠儿
坠儿娘
青儿
英莲
茄官
林三
林海
林妈
林大娘
林之孝
林如海
林红玉
林之孝妇
林之孝家的
玫瑰花儿
板儿
枕霞旧友
拐子
抱琴
旺儿
旺儿家的
旺儿嫂子
旺儿媳妇
忠靖侯
忠义亲王
忠顺王爷
忠顺亲王贤德妃佳蕙
侍书
佩凤
金氏
金荣
金星
金钏
金哥
金彩
金文翔
金钏儿
金寡妇
金鸳鸯
金文翔妇
金文翔家的
金文翔的媳妇
金彩妻
狗儿周氏
周琼
周瑞
周二爷
周大娘
周大妈
周太监
周公子
周奶妈
周妈妈周贵妃
周姐姐
周家的
周姨娘
周嫂子
周财主
周瑞家的
周瑞媳妇
郑华郑好时
郑华家的
郑好时媳妇
郑好时家的
怡红公子
单大良
单大娘
单聘仁炒豆儿
净虚
宝玉
宝官
宝珠
宝钗
宝蟾
定儿
定城侯
空空道人
春纤
春燕
珍珠
珍大奶奶
珍大嫂子
玻璃
封氏
封肃
赵全
赵天栋
赵天梁
赵太监
赵亦华
赵老爷
赵奶妈
赵堂官
赵国基
赵侍郎
赵姨娘赵嬷嬷
赵姨奶奶
茜雪
药官
茫茫大士
荣国公
胡氏
胡太医
胡老爷胡君荣
胡斯来
胡道长
胡庸医
胡山子野
胡老名公
南安王
南安郡王南安王太妃
栓儿
柳氏
柳芳
柳彪
柳妈
柳五儿
柳家的
柳湘莲
柳嫂子柳婶子
柳二媳妇
柳家媳妇
柱儿
挑雪
临安伯
临昌伯
临安伯诰命临昌伯诰命
临安伯老太太
昭儿
昭容
钟情大士
秋纹
秋桐
秋菱
秋爽居士香怜
香菱
皇上
皇帝
皇太后
侯孝康
侯晓明
保宁侯
俞禄
度恨菩提
娄氏祝妈
神瑛侍者
送玉人
费大娘
娇红
娇杏
绛珠草
绛珠仙草
绛珠仙子绛花洞主
秦氏
秦显
秦钟
秦鲸卿
秦显之妻
秦显家的
素云莲花儿
莺儿
莺儿娘
栓儿
桂儿家的
贾化
贾氏
贾兰
贾母
贾芝
贾芸
贾芷
贾芬
贾芳
贾环
贾法
贾范
贾珍
贾荇
贾复
贾珖
贾珠
贾珩
贾效
贾菱
贾菌
贾萍
贾婆
贾琮
贾琛
贾蓝
贾菖
贾蓁
贾蓉
贾源
贾蔷
贾演
贾璜
贾璎
贾璘
贾敷
贾蘅
贾藻
贾天祥
贾代化
贾代修
贾代善
贾代儒
贾存周
贾雨村
贾时飞
贾恩侯
贾巧姐
贾喜鸾
贾四姐儿
贾蓉媳妇
贾琼之母
贾(王扁)之母
夏三
夏忠
夏妈
夏太太
夏太监
夏奶奶
夏金桂
夏守忠
夏秉忠
夏婆子
圆信
钱升
钱华
钱槐
倪二
兼美
通事官
绣凤
绣桔
绣鸾
琏二奶奶
黄莺
黄莺儿
曹雪芹
梅翰林
梅翰林之子
戚建辉
菱洲袭人
聋子老妈妈
雪雁
探春
惜春
紫云
紫绡
银姐
银蝶儿
偕鸾
偕鸳
彩儿
彩云
彩凤
彩屏
彩明
彩哥
彩鸾
彩嫔
彩霞
彩儿娘
彩霞妈
隆儿
绮霞
琪官
琪官儿
琥珀
靓儿
喜儿
喜鸾
葫芦僧
蒋子宁
蒋玉函
韩奇葵官
黑儿
景田侯
锄药
智通
智能
智善
智能儿
嵇好古
程日兴
傅试
傅秋芳
焦大
粤海将军
焙茗
善姐
善姐儿
谢鲲
跛足道人
渺渺真人
娲皇媚人
缕儿
瑞珠
瑞大奶奶
甄母
甄费
甄士隐
甄夫人
甄友忠
甄英莲
甄宝玉
甄应嘉
甄家娘子
甄应嘉夫人
蓉哥儿
蓉哥儿媳妇
赖二
赖大
赖升
赖尚荣
赖嫂子
赖嬷嬷
赖二家的
赖大家的
赖大奶奶
赖升家的
赖大的媳妇
裘良
裘世安
裘太监
龄官
畸人
傻大姐
傻大舅
傻大姐妈
锦乡侯锦
乡侯诰命
詹光
詹会
詹子亮
鲍二
鲍音
鲍太医
鲍二家的
鲍二媳妇
痴梦仙姑
碧月
碧痕
翡翠
静虚
槛外人
算命先生
潇湘妃子
嫣红
翠云
翠缕翠墨
璜嫂子
璜大奶奶
蕙香
蕉下客
蕊官
蕊珠
醉金刚
墨雨
篆儿
稻香老农
潘又安
潘三保
鹤仙
缮国公
靛儿
薛父
薛公
薛文起
薛姨妈
霍启臻儿
鹦哥
鹦鹉
穆莳
戴权
戴良
檀云
襄阳侯
藕官
藕榭
癞头僧
蘅芜君
警幻仙子
警幻仙姑
颦儿
颦卿

小说文本:DreamOfRedMansion.txt

时间: 2024-08-28 01:43:17

Hadoop-统计红楼梦里出现名字的次数的相关文章

红楼梦里宝玉与六个女孩有特殊关系,从名字就看得出来

在红楼梦中,因为宝玉含玉出生,玉在贾府变得传奇而神圣.也许是曹公有意,给红楼梦中的一些女孩子起名时也特意用了玉字,也许是想牵引出她们此生和宝玉的交集和联系. 林黛玉 提起宝玉不得不说的人就是黛玉,因为黛玉是宝玉此生的挚爱,黛玉和宝玉的爱情美好而单纯,看到他们便让人充满了对爱情的憧憬.看着他们就想到了天荒地老和岁月静好,也一直很期盼可以看到他们喜结连理,曹公未完的红楼梦正好让我们可以幻想一个美好的结局. 黛玉和宝玉是青梅竹马,他们从懵懂到明白爱情的真谛,最好的岁月都是对方陪自己度过,黛玉生不仅是宝

红楼梦里王夫人为何让玉钏儿吃双份儿工资?有一个不能说的秘密

王夫人是贾府的当家主母,她所有行为都不是无意义的,她突然间把玉钏儿的月钱提升到二两银子,这是一个很敏感的数字,因为姨娘们的月钱也是这个数.王夫人这样做到底是什么意思呢? 王夫人听了,又想一想,道:"也罢,这个分例只管关了来,不用补人,就把这一两银子给他妹妹玉钏儿罢.他姐姐伏侍了我一场,没个好结果,剩下他妹妹跟着我,吃个双分子也不为过逾了."--王夫人问道:"正要问你,如今赵姨娘周姨娘的月例多少?"凤姐道:"那是定例,每人二两.赵姨娘有环兄弟的二两,共是四两

红楼梦里她比黛玉还令人心疼,一生都在为别人而活

一直以来众多喜黛者似乎都喜欢捧黛踩钗,一直诟病宝钗的心机城府深,可在我看来,她只是一个比黛玉还令人心疼的弱女子. 宝钗的"无情" "任是无情也动人."这是在"寿怡红群芳开夜宴"一回中,宝钗在抽花名签时抽到的一句诗,并附有"艳冠群芳"一词.可见,在曹公心中,宝钗的颜值胜过大观园中所有女子,但我也很疑惑."无情"?是在暗示宝钗无情冷漠吗? <飞鸟各投林>一曲中,更有"无情的,分明报应.&q

红楼梦里妙玉为何只请黛玉宝钗喝茶不请宝玉?她藏了三个小心思!

妙玉是大观园非常特立独行的姑娘,她不介意大家说她眼高于顶.目中无人,她只保持本心. 交自己喜欢的朋友,做自己觉得对的事情,这样的妙玉反倒显得与众不同.妙玉最隆重的一次出场就是贾母带着大家到栊翠庵喝茶,妙玉在招呼好大家喝茶之后,便单独请宝钗和黛玉喝茶,这次喝茶非常的有趣,其中透露除了妙玉很多不为人知的小心思. 第一,单独请宝钗和黛玉品茶,是一种考验 泡好茶最重要的就是要有上好的茶叶.优质的泡茶水.好的器皿.以及舒适的环境.贾母是懂茶的人,妙玉为她上茶的时候,她就和妙玉开始了一番"斗茶",

《红楼梦》里黛玉和宝钗的诗似曾相识,曹雪芹抄袭古人诗词吗?

红楼梦被称为封建时代的百科全书,很多人认为这有点言过其实了.对于此我想说,人的知识与阅历,决定人的眼界.在红楼梦中曹雪芹写了大量的诗词歌赋,当然没有我们今天所理解的抄袭.但是古人对于前人的作品是经常衍化的.正如红楼梦中所写唐朝诗人王维的"渡头余落日,墟里上孤烟",是从晋朝诗人"暖暖远人村,依依墟里烟"衍化出来的,这个就是古人的"抄袭",跟我们今天的抄袭是有着严重的区别的. 古人写诗词是讲究用词用典的,不能讲白话,一定要有个"典出何故&q

资深Python程序员教你统计,三国中人物名字出现的频率,很简单

资深Python程序员教你简单.有趣的程序:使用第三方库jieba切分,统计统计名著三国演义中人物名字出现次数. 资深Python程序员教你统计,三国中人物名字出现的频率,很简单其中一个jieba库是一个对中文文本依照汉字间关联概率进行词组划分的第三方库,使用简单,且非常好用 import jieba def getWords(): txt = open('novels/threekingdoms.txt', 'r', encoding = 'utf-8').read() words = jie

用R进行文本分析初探——以《红楼梦》为例

刚刚接触R语言和文本分析,为了将二者结合,试着对<红楼梦>进行分析,首先对<红楼梦>进行分词处理,并统计词频,同时画出标签云. 其实文本分析还可以分析其它很多东西,我的下一步打算分析新浪微博.现在先写一个小的分析,作为学习用. 文本分析是指对文本的表示及其特征项的选取:文本分析是文本挖掘.信息检索的一个基本问题,它把从文本中抽取出的特征词进行量化来表示文本信息. 一.需要加载的包 需要用到rJava,Rwordseg,wordcloud 安装步骤: 1.安装java: http:/

从《红楼梦》看古代贵族如何过重阳节

重阳节与端午.除夕等节日一样,为中国最重要的传统节日之一,据史料记载,它起始于春秋战国时期,普及于西汉,兴盛于唐代并被正式定为民间节日,可以说有着悠久的历史. 文人墨客的作品中多有关于重阳节的记载,唐代王维的诗<九月九日忆山东兄弟>中的"独在异乡为异客,每逢佳节倍思亲"中的"佳节"写的就是重阳节.孟浩然的<过故人庄>中的"待到重阳日,还来就菊花."写的也是重阳. 不仅诗词里多有描述,古典名著里亦有较多描写,<红楼梦&

iOS_6_ToolBar+xib+红楼梦

最终效果图 BeyondViewController.h // // BeyondViewController.h // 6_ToolBar // // Created by beyond on 14-7-24. // Copyright (c) 2014年 com.beyond. All rights reserved. // #import <UIKit/UIKit.h> @interface BeyondViewController : UIViewController - (IBAct