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

下载本文档

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

文档简介

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.Bo

5、rderLayout;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.JTextAre

6、a;import java.io.BufferedReader;import java.io.FileOutputStream;import java.io.FileInputStream;import java.io.File;import java.io.FileReader;import java.io.PrintStream;import java.util.Arrays;import java.util.HashMap;public class Interface extends JFrame implements ItemListener,ActionListenerprivate

7、 JLabel jbl= new JLabel(嫌疑犯 X的献身”);private JLabel function= new JLabel( 功能 );private JPanel jpl= new JPanel();private BorderLayout bl= new BorderLayout(10,10);private JComboBox jcb= new JComboBox(); TOC o 1-5 h z privateJButton jbt1=new JButton(出现次数排序);privateJButton jbt2=new JButton(篇幅跨度排序 );privat

8、eJButton jbt3=new JButton(关系密度排序 );private JTextArea jta= new JTextArea( 以下是结果:n ,30,30);private static String personname= null ;private staticString口 arr1= new String 汤川,草焉,岸谷,间宫 , 石神 , 靖子 , 美里 , 富坚 , 工藤 , 小代子 ;private static int arr2= new int 10;private static HashMap rls= new HashMap();privateFon

9、t font1=new Font( 黑体 ,Font.BOLD,20);private Font font2= new Font( 华文新魏 ,Font.BOLD,16);privateFont font3=new Font( 黑体 ,Font.BOLD,14);public JPanel createWEST1() JPanel west1= new JPanel();west1.setLayout( new GridLayout(6,1,5,5);west1.add(jcb); TOC o 1-5 h z jcb.addItem(请选择人物 );jcb.addItem(汤川 );jcb.a

10、ddItem(草筵);jcb.addItem(岸谷 );jcb.addItem(间宫 );jcb.addItem(石神 );jcb.addItem(靖子 );jcb.addItem(美里 );jcb.addItem(富坚 );jcb.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(

11、 new FlowLayout();west2.add(createWEST1();return west2;public JPanel createNORTH()JPanel north= new JPanel();north.setLayout( new FlowLayout(FlowLayout.CENTER);north.add(jbl);return north;public JPanel createCENTER()JPanel center= new JPanel();center.add(jta);return center;public Interface() this .a

12、dd(jpl);jpl.setLayout(bl);jpl.add(createWEST2(),BorderLayout.WEST);jpl.add(createNORTH(),BorderLayout.NORTH);jpl.add(createCENTER(),BorderLayout.CENTER);jta.setFont(font1);jbt1.setFont(font2);jbt2.setFont(font2);jbt3.setFont(font2);jbl.setFont(font1);function.setFont(font1);this .setBackground(Color

13、.yellow);jcb.addItemListener( this );this );this );this );jbt1.addActionListener(jbt2.addActionListener(jbt3.addActionListener(this .setSize(500,600);this .setVisible( true );this .setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); public void itemStateChanged(ItemEvent e)if (e.getStateChange()=ItemEve

14、nt.SELECTED) switch (String)e.getItem()case 汤川 :personname= 汤川 ; break ;case 草筵:personname=草筵;break ;case 岸谷 :personname= 岸谷 ; break ;case 间宫 :personname= 间宫 ; break ;case 石神 :personname= 石神 ; break ;case 靖子 :personname= 靖子 ; break ;case 美里 :personname= 美里 ; break ;case 富坚 :personname= 富坚 ; break ;c

15、ase 工藤 :personname= 工藤 ; break ;case 小代子 :personname= 小代子 ; break ;try Saver.saver(personname);File file= new File( result.txt );FileReader fr= new FileReader(file);BufferedReader br= new BufferedReader(fr);jta.setText( 以下是结果; n );while ( true )String msg=br.readLine();if (msg= null ) break ;jta.app

16、end(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.getData();arr2i=NovelFunction1.stat(data,arr1i);hm.put(arr2i,arr1i); catch (E

17、xception 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 float 10;HashMap hm= new HashMap();for (i=0;i10;i+) try arr3i=NovelFunction2.Span(arr1i);hm.put(arr3i,arr1i); catch (Exc

18、eption 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 (String a:arr1) if (arr1i!=a) if (rls.ge

19、t(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.printStac

20、kTrace();else System.exit(0);public static void main(String args) throws Exception new Interface();NovelFunction1:package novelproject;import java.io.File;import java.io.FileInputStream;public class NovelFunctionl public static byte 口 getData() throws Exception/读文件File novel= new File(嫌疑犯 X的献身.txt);

21、FileInputStream fis= new FileInputStream(novel);byte 口 data= new byte ( int )novel.length();fis.read(data);fis.close();return data;public static int stat( byte 口 data,String pn) throwsException/统计次数String dataStr= new String(data);int time=0;for (int i=0;idataStr.length()-pn.length()-1;i+)String s3

22、=dataStr.substring(i,i+pn.length().toString();if (s3.equals(pn) time+;return time;NovelFunction2:package novelproject;import java.util.HashMap;public class NovelFunction2 public static float Span(String pn) throws Exceptionbyte data=NovelFunction1.HashMap hm1 =HashMap hm2=HashMap hm3=getData ();new

23、HashMap();new HashMap();new HashMap();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 ) time+; if (time=1) hm1.put(pn,i); hm2.put(pn, i); hm3.put(pn, (hm2.get(pn)-hm1.get(pn); float s

24、pan=(hm3.get(pn)*10000)/dataStr.length(); return (span/100); NovelFunction3:package novelproject;import java.util.HashMap;public class NovelFunction3 private static float 口 rs =new float 10;private static HashMap rls =new HashMap();private static String口 arr =new String 汤川,草焉,岸谷,间宫 ,石神,靖子,美里,富坚,工藤,小

25、代子”;public static float Relationship1(String pn1,String pn2)throwsExceptionbyte data=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

26、=length1;ilength2-pn1.length()-1;i+) String s1=dataStr.substring(i,i+pn1.length().toString();for (intj=length1;(s1.equals(pn1)&(jlength2-pn2.length()-1);j+) Strings2=dataStr.substring(j,j+pn2.length().toString();if (s2.equals(pn2) score+; break ; float rs=(score*10000)/time);return rs/100;public sta

27、tic HashMap Relationship2(String pn)throwsExceptionfor ( int i=0;i10;i+)rs i= Relationship1 (pn, arr i);rls .put( arr i, rs i); return rls ;Saver:package novelproject;import java.io.FileOutputStream;import java.io.PrintStream;import java.util.Arrays;import java.util.HashMap;import javax.swing.JOptio

28、nPane;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 saver(String personname) throws Exceptiontry byte data=NovelFunctio

29、n1. getData ();int ti=NovelFunction1. stat (data,personname); time =String. valueOf (ti);Span(personname); (personname);( null , 操作异常 ););sp=String. valueOf (NovelFunction2.rls =NovelFunction3. Relationship2 catch (Exception ex)JOptionPane. showMessageDialog PrintStream ps= new PrintStream( newFileO

30、utputStream( e:eclipselnyresult.txtString msg1= 人物: ;ps.println(msg1+personname+ n );String msg2= 出现次数: ;ps.println(msg2+ time +n );String msg3= 人物篇幅跨度为: ; ps.println(msg3+ sp +% +n );String msg4= 人物关系密度: ;ps.println(msg4);HashMap hm= new HashMap();float aa= new float 10;for ( int i=0;i10;i+)aai= rl

31、s .get( arr i);hm.put(aai, arr i);Arrays. sort (aa);for ( float a:aa)+a);if (personname!=hm.get(a) ps.println(personname+ 与 +hm.get(a)+ 的关系密度为 ps.close();五测试结果程序运行时初界面:选择人物(1):嫌疑犯X的献身而沛石油哲学)功能以下是结果: 人物:石神出现次数:711人物篇幅跨度为二99, 84%人物关系密度:看神与间宫的关系密度为3. 79石神与小代子的关系密度为& 32力神与岸谷的关系密度为13. 92石神与工藤的关系密度为17. 29

32、石神与美里的关系密度为25. 03石神与富坚的关系密度为31.22 石神上,草毒的关系密度为5立35石神与汤川的关系密度为62 57石神与靖子的关系密度为75. 24选择人物(2):嫌疑犯X的献身谛子t花冈谴子功能出现灰乳排序餐幅睡灰排了亲兴友林生以下是结果:人物:靖子出现次数:620人物篇幅跨度为:9&55%人物关系密度:靖子与间宫的关系密度为4 Q3靖子与岸谷的关系密度为19,19靖子与小代子的关系密度为20. 64清子与汤川的关系密度为33. 06靖子与工藤的关系密度为34. 67靖子与草殖的关系密度为42 26靖子匕美里的关系密度为48 38培子与富坚的关系密度为53. 38靖子与石神

33、的关系密度为66. 93X幅哆度排序崇全庭坪序 人物篇幅跨度为:87.03%人物关系密度工汤川与小代子的关系密度为0. 42汤川与间宫的关系密度为4. 24汤川与美里的关系密度为5 f 4汤川与工藤的关系密度为B. 49汤川与岸谷的关系密度为13. 16汤川与富里的关系密度为20. 38汤川与靖子的关系密度为56. 47汤川与石神的美系密度为83. 86汤川与草锥的美系密度为86 19选择人物(4):嫌疑犯X的献身草藉功能业如次毓林生以下是结果; 人物:草雍出现次数:516人物篇幅跨度为;87. 01%人物关系密度:草雍与小代子的关系密度为2.13 草薄与美里的关系密度为9. 88 草再与间宫

34、的关系密度为11. Q4 草雍与工藤的关系密度为15. 5 草猫与岸谷的关系密度为36. 04 芽猫与富坚的关系密度为3& 82 草雉与靖子的关系密度为64一 53 草摊与石神的关系密度为72真雉与汤川的关系密度为70. 93=嫌疑犯X的献身嫌疑犯X的献身盲坚亩瞿慎二)功能片临嗪度排序7集女及林序美里(花日美里)功能后或*41舞亭 苗临为友林生 亲睾塞山排序以下是结果:人物上美里出现次数:149人物篇幅跨度为:96. 02%人物关系密度:美里与间宫的关系密度为0.67美里与岸谷的关系密度为9一 39美里与草雍的关系密度为16.1 美里与小代子的关系密度为17.44美里与汤川的关系密度为1,46 美里与,藤的关系密度为34. 89 美里与富军的关系密度为5* 06美里与石神的关系密度为62. 41美里与靖子的美系密度为99. 32选择人物(6):以下是结果:人物:富坚出现次数,178人物篇幅跨度为:95.98%人物关系密度工富里与间宫的关系密度为2. 24富基与小代子的关系密度为15 16言坚与岸谷的美系密度为17. 97富整与工藤的关系密度为19.1富坚与汤川的关系密度为22. 47富坚与石神的关系密度为42. 13富隆与草维的关系密度为4719富里与美里的关系密度为51.68富里与靖子的美系密度为97. 75嫌疑犯XI嫌疑犯X的献身岸谷功熊以下是

温馨提示

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

最新文档

评论

0/150

提交评论