1、java小说人物分析一实验题目 自行下载自己最喜欢的小说1部。存储为文本文档。要求长篇小说,20万字以上。任取其中10个人物,考虑他们的姓名、别名等等一系列因素。(1)统计每个人在小说中出现的次数并排序。(2)统计每个人在小说中出现的篇幅跨度(第一次出现距最后一次出现的篇幅)并排序。(3) 如果两人在相距较短的一段文字中出现,我们认为两人有关系,距离越短,关系越近。自行设计统计标准,找出10个人中:1)关系最紧密的两个人,关系最不紧密的两个人。2)输入一个人名,列出该人和其他人关系的紧密程度排名。看与实际是否符合?如果不太符合,说明可能的原因。 二需求分析 本演示程序用 eclipse 编写,
2、完成小说人物的出现次数统计,人物篇幅跨度统计以及人物间亲密程度的统计。 1统计人物出现次数:编写一个函数,当传入参数为人物名称时可统计该人物名在小说中的出现次数。 人物篇幅跨度:编写一个函数,当传入参数为人物名称是可统计该人物名在小说中第一次出现的位置以及最后一次出现的位置,将最后一次出现位置减去第一次出现的位置比去小说通篇长度可得该人物名在小说中的人物篇幅跨度。 人物间亲密程度:编写一个函数,当传入参数为人物名一和人物名二时,统计人物名一与人物名二同时在某个字数范围内出现的篇幅占人物名一的篇幅之比就是人物名一与人物名二的亲密程度。 制作功能选择界面:界面包含有十个人物名的下拉列表,三个功能排
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;importt;imp
5、ort 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;import java.
6、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,ActionListener private JLabel jbl=n
7、ew JLabel(嫌疑犯X的献身); private JLabel 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(关系
8、密度排序); private JTextArea jta=new JTextArea(以下是结果: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 Fo
9、nt font2=new Font(华文新魏,Font.BOLD,16); private 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(石神);
10、 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(new FlowLayout(); west2.add(createWEST1(); return west2;
11、 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.add(jpl); jpl.setLayout(bl); jpl.add(createWEST2()
12、,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.yellow); jcb.addItemListener(this); jb
13、t1.addActionListener(this); jbt2.addActionListener(this); jbt3.addActionListener(this); this.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() cas
14、e 汤川: personname=汤川; break; case 草薙: personname=草薙; break; case 岸谷: personname=岸谷; break; case 间宫: personname=间宫; break; case 石神: personname=石神; break; case 靖子: personname=靖子; break; case 美里: personname=美里; break; case 富坚: personname=富坚; break; case 工藤: personname=工藤; break; case 小代子: personname=小代子
15、; 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.append(msg+n); fr.close(); br.close(); catch (Exception e1) e1.print
16、StackTrace(); 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 (Exception e1) e1.printStackTrace(); Arrays.sort(arr2); jta.setTe
17、xt(以下是结果: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=NovelFunction2.Span(arr1i); hm.put(arr3i,arr1i); catch (Exception e1) e1.printStackTrace(); Arrays.sort(arr3); jta.setText(以下
18、是结果: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.get(a)=100) jta.append(arr1i+与+a+最亲密为:+rls.get(a)+n); catch (Exception e1) e1.pri
19、ntStackTrace(); 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.printStackTrace(); else System.exit(0); public static void main(String args) throws Exception new Inte
20、rface(); 2NovelFunction1:package novelproject;import java.io.File;import java.io.FileInputStream;public class NovelFunction1 public static byte getData()throws Exception /读文件 File novel=new File(嫌疑犯X的献身.txt); FileInputStream fis=new FileInputStream(novel); byte data=new byte(int)novel.length(); fis.
21、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) time+; return time; 3NovelFun
22、ction2: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(data); int time=0; for(i
23、nt 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); 4NovelFunction3:package nov
24、elproject;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 Exception byte data=NovelFu
25、nction1.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();
26、for(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 Exception for(int i=0;i10;i+) rsi=Relationship1(pn,arri); rls.put(arri,rsi); return rls; 5Saver:package novelproject;import java.io.FileOutputStream;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
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1