java文学作品人物分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一.实验题目
自行下载自己最喜欢的小说1部。存储为文本文档。要求长篇小说,20万字以上。
任取其中10个人物,考虑他们的姓名、别名等等一系列因素。
(1)统计每个人在小说中出现的次数并排序。
(2)统计每个人在小说中出现的篇幅跨度(第一次出现距最后一次出现的篇
幅)并排序。
(3) 如果两人在相距较短的一段文字中出现,我们认为两人有关系,距离越
短,关系越近。自行设计统计标准,找出10个人中:
1)关系最紧密的两个人,关系最不紧密的两个人。
2)输入一个人名,列出该人和其他人关系的紧密程度排名。
看与实际是否符合?如果不太符合,说明可能的原因。
二.需求分析
本演示程序用 eclipse 编写,完成小说人物的出现次数统计,人物篇幅跨度统计以及人物间亲密程度的统计。
①统计人物出现次数:编写一个函数,当传入参数为人物名称时可统计该人
物名在小说中的出现次数。
②人物篇幅跨度:编写一个函数,当传入参数为人物名称是可统计该人物名在小说中第一次出现的位置以及最后一次出现的位置,将最后一次出现位置减去第一次出现的位置比去小说通篇长度可得该人物名在小说中的人物篇幅跨度。
③人物间亲密程度:编写一个函数,当传入参数为人物名一和人物名二时,统计人物名一与人物名二同时在某个字数范围内出现的篇幅占人物名一的篇幅之比就是人物名一与人物名二的亲密程度。
④制作功能选择界面:界面包含有十个人物名的下拉列表,三个功能排序按
钮,一个文本区域可输出统计结果。
三.概要设计
1)为了实现上述程序功能,需要定义一下几个类:
①Interface类:该程序的功能选择界面,包含main函数。
②Novelfunction1类:用来实现程序的第一个功能的类。
③Novelfunction2类:用来实现程序的第二个功能的类。
④Novelfunction3类:用来实现程序的第三个功能的类。
⑤Saver类:用来保存程序运行后的统计结果,结果将统计在result.txt中。在程序运行中,在界面中的下拉列表选定一位人物,选定后在界面的文本区域中会输出该人物在小说中的出现次数,篇幅跨度以及与其他九个人物间的亲密程度;在界面中点击功能按钮“人物出现次数排序”,点击后文本区域会输出十个人物在小说中出现次数的升序排序;在界面中点击功能按钮“人物篇幅跨度排序”,点击后文本区域会输出十个人物在小说中篇幅跨度的升序排序;在界面中点击功能按钮“人物关系密度排序”,点击后文本区域中会输出十个人物间亲密程度最高的一组和亲密程度最低的一组结果。
四.源代码:
①Interface:
package novelproject;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import java.awt.BorderLayout;
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;
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,ActionListener{
private 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();
private JButton jbt1=new JButton("出现次数排序");
private JButton jbt2=new JButton("篇幅跨度排序");
private JButton jbt3=new JButton("关系密度排序");
private JTextArea jta=new JTextArea("以下是结果:\n",30,30);
private static String personname=null;
private static String[] arr1=new String[]{"汤川","草薙","岸谷","间宫","石神","靖子","美里","富坚","工藤","小代子"};
private static int[] arr2=new int[10];
private static HashMap
HashMap
private Font font1=new Font("黑体",Font.BOLD,20);
private Font 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("岸谷");