java小说人物分析_第1页
java小说人物分析_第2页
java小说人物分析_第3页
java小说人物分析_第4页
java小说人物分析_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、一实验题目 自行下载自己最喜欢的小说1部。存储为文本文档。要求长篇小说,20万字以上。任取其中10个人物,考虑他们的姓名、别名等等一系列因素。(1)统计每个人在小说中出现的次数并排序。(2)统计每个人在小说中出现的篇幅跨度(第一次出现距最后一次出现的篇幅)并排序。(3) 如果两人在相距较短的一段文字中出现,我们认为两人有关系,距离越短,关系越近。自行设计统计标准,找出10个人中:1)关系最紧密的两个人,关系最不紧密的两个人。2)输入一个人名,列出该人和其他人关系的紧密程度排名。看与实际是否符合?如果不太符合,说明可能的原因。 二需求分析 本演示程序用 eclipse 编写,完成小说人物的出现次

2、数统计,人物篇幅跨度统计以及人物间亲密程度的统计。 统计人物出现次数:编写一个函数,当传入参数为人物名称时可统计该人物名在小说中的出现次数。 人物篇幅跨度:编写一个函数,当传入参数为人物名称是可统计该人物名在小说中第一次出现的位置以及最后一次出现的位置,将最后一次出现位置减去第一次出现的位置比去小说通篇长度可得该人物名在小说中的人物篇幅跨度。 人物间亲密程度:编写一个函数,当传入参数为人物名一和人物名二时,统计人物名一与人物名二同时在某个字数范围内出现的篇幅占人物名一的篇幅之比就是人物名一与人物名二的亲密程度。 制作功能选择界面:界面包含有十个人物名的下拉列表,三个功能排序按钮,一个文本区域可

3、输出统计结果。三概要设计 1)为了实现上述程序功能,需要定义一下几个类: interface类:该程序的功能选择界面,包含main函数。 novelfunction1类:用来实现程序的第一个功能的类。 novelfunction2类:用来实现程序的第二个功能的类。 novelfunction3类:用来实现程序的第三个功能的类。 saver类:用来保存程序运行后的统计结果,结果将统计在result.txt中。 在程序运行中,在界面中的下拉列表选定一位人物,选定后在界面的文本区域中会输出该人物在小说中的出现次数,篇幅跨度以及与其他九个人物间的亲密程度;在界面中点击功能按钮“人物出现次数排序”,点击

4、后文本区域会输出十个人物在小说中出现次数的升序排序;在界面中点击功能按钮“人物篇幅跨度排序”,点击后文本区域会输出十个人物在小说中篇幅跨度的升序排序;在界面中点击功能按钮“人物关系密度排序”,点击后文本区域中会输出十个人物间亲密程度最高的一组和亲密程度最低的一组结果。四.源代码:interface:package novelproject;import javax.swing.jframe;import javax.swing.jpanel;import javax.swing.jcombobox;import javax.swing.jlabel;import java.awt.border

5、layout;import java.awt.color;import java.awt.font;import java.awt.gridlayout;import java.awt.flowlayout;import java.awt.event.actionevent;import java.awt.event.actionlistener;import java.awt.event.itemevent;import java.awt.event.itemlistener;import javax.swing.jbutton;import javax.swing.jtextarea;im

6、port java.io.bufferedreader;import java.io.;import java.io.;import java.io.file;import java.io.;import java.io.printstream;import java.util.arrays;import java.util.hashmap;public class interface extends jframe implements itemlistener,actionlistenerprivate jlabel jbl=new jlabel(嫌疑犯x的献身);private jlabe

7、l function=new jlabel(功能);private jpanel jpl=new jpanel();private borderlayout bl=new borderlayout(10,10);private jcombobox jcb=new jcombobox();private jbutton jbt1=new jbutton(出现次数排序);private jbutton jbt2=new jbutton(篇幅跨度排序);private jbutton jbt3=new jbutton(关系密度排序);private jtextarea jta=new jtextar

8、ea(以下是结果:n,30,30);private static string personname=null;private static string arr1=new string汤川,草薙,岸谷,间宫,石神,靖子,美里,富坚,工藤,小代子; private static int arr2=new int10; private static hashmap rls=new hashmap(); private font font1=new font(黑体,font.bold,20); private font font2=new font(华文新魏,font.bold,16); priv

9、ate font font3=new font(黑体,font.bold,14);public jpanel createwest1() jpanel west1=new jpanel();west1.setlayout(new gridlayout(6,1,5,5);west1.add(jcb);jcb.additem(请选择人物);jcb.additem(汤川);jcb.additem(草薙);jcb.additem(岸谷);jcb.additem(间宫);jcb.additem(石神);jcb.additem(靖子);jcb.additem(美里);jcb.additem(富坚);jcb

10、.additem(工藤);jcb.additem(小代子);west1.add(function);west1.add(jbt1);west1.add(jbt2);west1.add(jbt3);return west1;public jpanel createwest2()jpanel west2=new jpanel();west2.setlayout(new flowlayout();west2.add(createwest1();return west2;public jpanel createnorth()jpanel north=new jpanel();north.setlayo

11、ut(new flowlayout(flowlayout.center);north.add(jbl);return north;public jpanel createcenter()jpanel center=new jpanel();center.add(jta);return center;public interface() this.add(jpl);jpl.setlayout(bl);jpl.add(createwest2(),borderlayout.west);jpl.add(createnorth(),borderlayout.north);jpl.add(createce

12、nter(),borderlayout.center);jta.setfont(font1);jbt1.setfont(font2);jbt2.setfont(font2);jbt3.setfont(font2);jbl.setfont(font1);function.setfont(font1);this.setbackground(color.yellow);jcb.additemlistener(this);jbt1.addactionlistener(this);jbt2.addactionlistener(this);jbt3.addactionlistener(this);this

13、.setsize(500,600);this.setvisible(true);this.setdefaultcloseoperation(jframe.exit_on_close);public void itemstatechanged(itemevent e)if(e.getstatechange()=itemevent.selected)switch(string)e.getitem()case 汤川:personname=汤川; break;case 草薙:personname=草薙; break;case 岸谷:personname=岸谷; break;case 间宫:person

14、name=间宫; break;case 石神:personname=石神; break;case 靖子:personname=靖子; break;case 美里:personname=美里; break;case 富坚:personname=富坚; break;case 工藤:personname=工藤; break;case 小代子:personname=小代子; break;try saver.saver(personname);new file(result.txt); fr=new (file);bufferedreader br=new bufferedreader(fr); jta

15、.settext(以下是结果;n);while(true)string msg=br.readline();if(msg=null) break;jta.append(msg+n);fr.close();br.close(); catch (exception e1) e1.printstacktrace();public void actionperformed(actionevent e)if(e.getsource()=jbt1)int i; hashmap hm=new hashmap();for(i=0;i10;i+)try byte data=novelfunction1.getd

16、ata();arr2i=novelfunction1.stat(data,arr1i);hm.put(arr2i,arr1i);catch (exception e1) e1.printstacktrace();arrays.sort(arr2);jta.settext(以下是结果:n);for(int a:arr2)jta.append(hm.get(a)+ 的出现次数:+a+n);else if(e.getsource()=jbt2)int i;float arr3=new float10;hashmap hm=new hashmap();for(i=0;i10;i+)try arr3i=

17、novelfunction2.span(arr1i);hm.put(arr3i,arr1i);catch (exception e1) e1.printstacktrace();arrays.sort(arr3);jta.settext(以下是结果:n);for(float a:arr3)jta.append(hm.get(a)+ 的篇幅跨度为:+a+%+n);else if(e.getsource()=jbt3)jta.settext(以下是结果:n);for(int i= 0;i10;i+)try rls=novelfunction3.relationship2(arr1i);for(st

18、ring a:arr1)if(arr1i!=a)if(rls.get(a)=100)jta.append(arr1i+与+a+最亲密为:+rls.get(a)+n);catch (exception e1) e1.printstacktrace();for(int i= 0;i10;i+)try rls=novelfunction3.relationship2(arr1i);for(string a:arr1)if(arr1i!=a)if(rls.get(a)=0)jta.append(arr1i+与+a+最不亲密为:+rls.get(a)+n);catch (exception e1) e1

19、.printstacktrace();elsesystem.exit(0);public static void main(string args) throws exceptionnew interface(); novelfunction1:package novelproject;import java.io.file;import java.io.;public class novelfunction1 public static byte getdata()throws exception /读文件new file(嫌疑犯x的献身.txt); fis=new (novel);byte

20、 data=new byte(int)novel.length();fis.read(data);fis.close();return data;public static int stat(byte data,string pn)throws exception /统计次数string datastr=new string(data);int time=0;for(int i=0;idatastr.length()-pn.length()-1;i+)string s3 =datastr.substring(i,i+pn.length().tostring();if(s3.equals(pn)

21、time+;return time; novelfunction2:package novelproject;import java.util.hashmap;public class novelfunction2 public static float span(string pn)throws exception byte data=novelfunction1.getdata();hashmap hm1=new hashmap();hashmap hm2=new hashmap();hashmap hm3=new hashmap(); string datastr=new string(

22、data);int time=0;for(int i=0;idatastr.length()-pn.length()-1;i+)string s3 =datastr.substring(i,i+pn.length().tostring();if(s3.equals(pn )time+;if(time=1)hm1.put(pn,i);hm2.put(pn, i);hm3.put(pn, (hm2.get(pn)-hm1.get(pn);float span=(hm3.get(pn)*10000)/datastr.length();return (span/100); novelfunction3

23、:package novelproject;import java.util.hashmap;public class novelfunction3 private static float rs=new float10;private static hashmap rls=new hashmap();private static string arr=new string汤川,草薙,岸谷,间宫,石神,靖子,美里,富坚,工藤,小代子;public static float relationship1(string pn1,string pn2)throws exceptionbyte data

24、=novelfunction1.getdata();string datastr=new string(data);int time=novelfunction1.stat(data,pn1);int score=0;int length1=0;int length2=1000;for(;(length2datastr.length();length1+=1000,length2+=1000)for(int i=length1;ilength2-pn1.length()-1;i+)string s1=datastr.substring(i,i+pn1.length().tostring();f

25、or(int j=length1;(s1.equals(pn1)&(jlength2-pn2.length()-1);j+)string s2=datastr.substring(j,j+pn2.length().tostring();if(s2.equals(pn2)score+; break;float rs=(score*10000)/time);return rs/100;public static hashmap relationship2(string pn)throws exceptionfor(int i=0;i10;i+)rsi=relationship1(pn,arri);

26、rls.put(arri,rsi);return rls; saver:package novelproject;import java.io.;import java.io.printstream;import java.util.arrays;import java.util.hashmap;import javax.swing.joptionpane;public class saver public static string time=null;private static string sp=null;private static hashmap rls=new hashmap();private static string arr=new string汤川,草薙,岸谷,间宫,石神,靖子,美里,富坚,工藤,小代子;public static void

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论