java小說(shuō)人物分析_第1頁(yè)
java小說(shuō)人物分析_第2頁(yè)
java小說(shuō)人物分析_第3頁(yè)
java小說(shuō)人物分析_第4頁(yè)
java小說(shuō)人物分析_第5頁(yè)
已閱讀5頁(yè),還剩18頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、自行下載自己最喜歡的小說(shuō) 1 部。存儲(chǔ)為文本文檔。要求長(zhǎng)篇小說(shuō), 20萬(wàn)字以上。任取其中 10 個(gè)人物,考慮他們的姓名、別名等等一系列因素。(1)統(tǒng)計(jì)每個(gè)人在小說(shuō)中出現(xiàn)的次數(shù)并排序。(2)統(tǒng)計(jì)每個(gè)人在小說(shuō)中出現(xiàn)的篇幅跨度(第一次出現(xiàn)距最后一次出現(xiàn)的篇幅)并排序。(3) 如果兩人在相距較短的一段文字中出現(xiàn),我們認(rèn)為兩人有關(guān)系,距離越短,關(guān)系越近。自行設(shè)計(jì)統(tǒng)計(jì)標(biāo)準(zhǔn),找出 10 個(gè)人中:1)關(guān)系最緊密的兩個(gè)人,關(guān)系最不緊密的兩個(gè)人。2)輸入一個(gè)人名,列出該人和其他人關(guān)系的緊密程度排名??磁c實(shí)際是否符合?如果不太符合,說(shuō)明可能的原因。二需求分析本演示程序用 eclipse 編寫,完成小說(shuō)人物的出現(xiàn)次數(shù)

2、統(tǒng)計(jì),人物篇幅跨度統(tǒng)計(jì)以及人物間親密程度的統(tǒng)計(jì)。統(tǒng)計(jì)人物出現(xiàn)次數(shù):編寫一個(gè)函數(shù),當(dāng)傳入?yún)?shù)為人物名稱時(shí)可統(tǒng)計(jì)該人物名在小說(shuō)中的出現(xiàn)次數(shù)。人物篇幅跨度:編寫一個(gè)函數(shù),當(dāng)傳入?yún)?shù)為人物名稱是可統(tǒng)計(jì)該人物名在小說(shuō)中第一次出現(xiàn)的位置以及最后一次出現(xiàn)的位置, 將最后一次出現(xiàn)位置減去第一次出現(xiàn)的位置比去小說(shuō)通篇長(zhǎng)度可得該人物名在小說(shuō)中的人物篇幅跨度。人物間親密程度: 編寫一個(gè)函數(shù), 當(dāng)傳入?yún)?shù)為人物名一和人物名二時(shí), 統(tǒng)計(jì)人物名一與人物名二同時(shí)在某個(gè)字?jǐn)?shù)范圍內(nèi)出現(xiàn)的篇幅占人物名一的篇幅之比就是人物名一與人物名二的親密程度。制作功能選擇界面:界面包含有十個(gè)人物名的下拉列表,三個(gè)功能排序按鈕,一個(gè)文本區(qū)域可輸

3、出統(tǒng)計(jì)結(jié)果。,概要設(shè)計(jì)1)為了實(shí)現(xiàn)上述程序功能,需要定義一下幾個(gè)類:Interface 類:該程序的功能選擇界面,包含 main 函數(shù)。Novelfunction1類:用來(lái)實(shí)現(xiàn)程序的第一個(gè)功能的類。Novelfunction2類:用來(lái)實(shí)現(xiàn)程序的第二個(gè)功能的類。Novelfunction3類:用來(lái)實(shí)現(xiàn)程序的第三個(gè)功能的類。Saver 類:用來(lái)保存程序運(yùn)行后的統(tǒng)計(jì)結(jié)果,結(jié)果將統(tǒng)計(jì)在result.txt 中。在程序運(yùn)行中, 在界面中的下拉列表選定一位人物, 選定后在界面的文本區(qū)域中會(huì)輸出該人物在小說(shuō)中的出現(xiàn)次數(shù), 篇幅跨度以及與其他九個(gè)人物間的親密程度;在界面中點(diǎn)擊功能按鈕“人物出現(xiàn)次數(shù)排序” ,點(diǎn)

4、擊后文本區(qū)域會(huì)輸出十個(gè)人物在小說(shuō)中出現(xiàn)次數(shù)的升序排序;在界面中點(diǎn)擊功能按鈕“人物篇幅跨度排序” ,點(diǎn)擊后文本區(qū)域會(huì)輸出十個(gè)人物在小說(shuō)中篇幅跨度的升序排序;在界面中點(diǎn)擊功能按鈕“人物關(guān)系密度排序” ,點(diǎn)擊后文本區(qū)域中會(huì)輸出十個(gè)人物間親密程度最高的一組和親密程度最低的一組結(jié)果。四.源代碼: 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的獻(xiàn)身”);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(出現(xiàn)次數(shù)排序);privateJButton jbt2=new JButton(篇幅跨度排序 );privat

8、eJButton jbt3=new JButton(關(guān)系密度排序 );private JTextArea jta= new JTextArea( 以下是結(jié)果:n ,30,30);private static String personname= null ;private staticString口 arr1= new String 湯川,草焉,岸谷,間宮 , 石神 , 靖子 , 美里 , 富堅(jiān) , 工藤 , 小代子 ;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(請(qǐng)選擇人物 );jcb.addItem(湯川 );jcb.a

10、ddItem(草筵);jcb.addItem(岸谷 );jcb.addItem(間宮 );jcb.addItem(石神 );jcb.addItem(靖子 );jcb.addItem(美里 );jcb.addItem(富堅(jiān) );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 富堅(jiān) :personname= 富堅(jiān) ; 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( 以下是結(jié)果; 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( 以下是結(jié)果: n );for ( int a:arr2) jta.append(hm.get(a)+ 的出現(xiàn)次數(shù): +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( 以下是結(jié)果: n );for ( float a:arr3) jta.append(hm.get(a)+ 的篇幅跨度為 : +a+% +n ); else if (e.getSource()=jbt3) jta.setText( 以下是結(jié)果: 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的獻(xiàn)身.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/統(tǒng)計(jì)次數(shù)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 湯川,草焉,岸谷,間宮 ,石神,靖子,美里,富堅(jiān),工藤,小

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 湯川,草焉,岸谷,間宮 , 石神 , 靖子 , 美里 , 富堅(jiān) , 工藤 , 小代子 ;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= 出現(xiàn)次數(shù): ;ps.println(msg2+ time +n );String msg3= 人物篇幅跨度為: ; ps.println(msg3+ sp +% +n );String msg4= 人物關(guān)系密度: ;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)+ 的關(guān)系密度為 ps.close();五測(cè)試結(jié)果程序運(yùn)行時(shí)初界面:選擇人物(1):嫌疑犯X的獻(xiàn)身而沛石油哲學(xué))功能以下是結(jié)果: 人物:石神出現(xiàn)次數(shù):711人物篇幅跨度為二99, 84%人物關(guān)系密度:看神與間宮的關(guān)系密度為3. 79石神與小代子的關(guān)系密度為& 32力神與岸谷的關(guān)系密度為13. 92石神與工藤的關(guān)系密度為17. 29

32、石神與美里的關(guān)系密度為25. 03石神與富堅(jiān)的關(guān)系密度為31.22 石神上,草毒的關(guān)系密度為5立35石神與湯川的關(guān)系密度為62 57石神與靖子的關(guān)系密度為75. 24選擇人物(2):嫌疑犯X的獻(xiàn)身諦子t花岡譴子功能出現(xiàn)灰乳排序餐幅睡灰排了親興友林生以下是結(jié)果:人物:靖子出現(xiàn)次數(shù):620人物篇幅跨度為:9&55%人物關(guān)系密度:靖子與間宮的關(guān)系密度為4 Q3靖子與岸谷的關(guān)系密度為19,19靖子與小代子的關(guān)系密度為20. 64清子與湯川的關(guān)系密度為33. 06靖子與工藤的關(guān)系密度為34. 67靖子與草殖的關(guān)系密度為42 26靖子匕美里的關(guān)系密度為48 38培子與富堅(jiān)的關(guān)系密度為53. 38靖子與石神

33、的關(guān)系密度為66. 93X幅哆度排序崇全庭坪序 人物篇幅跨度為:87.03%人物關(guān)系密度工湯川與小代子的關(guān)系密度為0. 42湯川與間宮的關(guān)系密度為4. 24湯川與美里的關(guān)系密度為5 f 4湯川與工藤的關(guān)系密度為B. 49湯川與岸谷的關(guān)系密度為13. 16湯川與富里的關(guān)系密度為20. 38湯川與靖子的關(guān)系密度為56. 47湯川與石神的美系密度為83. 86湯川與草錐的美系密度為86 19選擇人物(4):嫌疑犯X的獻(xiàn)身草藉功能業(yè)如次毓林生以下是結(jié)果; 人物:草雍出現(xiàn)次數(shù):516人物篇幅跨度為;87. 01%人物關(guān)系密度:草雍與小代子的關(guān)系密度為2.13 草薄與美里的關(guān)系密度為9. 88 草再與間宮

34、的關(guān)系密度為11. Q4 草雍與工藤的關(guān)系密度為15. 5 草貓與岸谷的關(guān)系密度為36. 04 芽貓與富堅(jiān)的關(guān)系密度為3& 82 草雉與靖子的關(guān)系密度為64一 53 草攤與石神的關(guān)系密度為72真雉與湯川的關(guān)系密度為70. 93=嫌疑犯X的獻(xiàn)身嫌疑犯X的獻(xiàn)身盲堅(jiān)畝瞿慎二)功能片臨嗪度排序7集女及林序美里(花日美里)功能后或*41舞亭 苗臨為友林生 親睪塞山排序以下是結(jié)果:人物上美里出現(xiàn)次數(shù):149人物篇幅跨度為:96. 02%人物關(guān)系密度:美里與間宮的關(guān)系密度為0.67美里與岸谷的關(guān)系密度為9一 39美里與草雍的關(guān)系密度為16.1 美里與小代子的關(guān)系密度為17.44美里與湯川的關(guān)系密度為1,46 美里與,藤的關(guān)系密度為34. 89 美里與富軍的關(guān)系密度為5* 06美里與石神的關(guān)系密度為62. 41美里與靖子的美系密度為99. 32選擇人物(6):以下是結(jié)果:人物:富堅(jiān)出現(xiàn)次數(shù),178人物篇幅跨度為:95.98%人物關(guān)系密度工富里與間宮的關(guān)系密度為2. 24富基與小代子的關(guān)系密度為15 16言堅(jiān)與岸谷的美系密度為17. 97富整與工藤的關(guān)系密度為19.1富堅(jiān)與湯川的關(guān)系密度為22. 47富堅(jiān)與石神的關(guān)系密度為42. 13富隆與草維的關(guān)系密度為4719富里與美里的關(guān)系密度為51.68富里與靖子的美系密度為97. 75嫌疑犯XI嫌疑犯X的獻(xiàn)身岸谷功熊以下是

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論