日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

201671010406 丁家辉《英文文本统计分析》结对项目报告

發布時間:2024/4/17 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 201671010406 丁家辉《英文文本统计分析》结对项目报告 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

實驗四 軟件工程界對項目


博文簡要信息:

項目內容
這個作業屬于哪個課程【教師博客主頁鏈接】
這個作業的要求在哪里【作業鏈接地址】
課程學習目標熟悉軟件開發整體流程,提升自身能力
本次作業在哪個具體方面幫助我們實現目標第一次體驗一個完整的工程

實驗內容:

任務內容
任務一兩兩自由結對,對結對方的《實驗二 軟件工程個人項目》的項目成果進行評價
任務二采用兩人合作方式,設計開發一個英文文本統計分析軟件
任務三完成博文作業

任務一 組隊互評

項目內容
作業博客【張旭輝201671010459】
點評內容實驗結果很明了,實現的功能和欠缺的都很明顯,再補充編程方面的能力會做的更好。
點評心得編程語言的短板是絕對的硬傷,于人于已都是如此,當下惡補短板才是正道。
Github倉庫主頁【倉庫地址】

任務二 合作設計


1.需求分析

  • 實驗2要求的功能;
  • 單詞頻數可視化柱狀圖要求是以下樣式:

  • 統計該文本行數及字符數;
  • 各種統計功能均提供計時功能,顯示程序統計所消耗時間(單位:ms);
  • 可處理任意用戶導入的任意英文文本;
  • 人機交互界面要求GUI界面(WEB頁面、APP頁面都可);
  • 附加分功能:統計文本中除冠詞、代詞、介詞之外的高頻詞;
  • 附加分功能:統計前10個兩個單詞組成的詞組頻率。

2.軟件設計:類關鍵信息


  • BufferedReader(Reader in,int sz)類

? 創建一個使用指定大小輸入緩沖區的緩沖字符輸入流

  • JFreeChart類

? 字符串中的字母被轉換為小寫字母,開放的圖表繪制類庫,用于生成柱形圖,可以產生PNG文件

  • CategoryPlot類

? 實現對數組的排序,給輸出的單詞頻率高低進行排序,組合圖形

  • SimpleDateFormat類

? 以與語言環境相關的方式來格式化和分析日期的具體類

  • Map<String ,Integer>map接口

? map接口,以鍵值對方存儲單詞詞頻

  • File類

? File對象用來獲取或處理與磁盤文件相關的信息,例如權限,時間,日期和目錄路徑

  • ServletInputStream類

? 一個 Servlet 通過使用ServletRequest 接口獲得了對一ServletInputStream 對象的說明。這個類的子類必須提供一InputStream接口讀取有關信息的方法

  • Collection類

? 集合接口

uml圖:


3.核心功能代碼展示


/*** 柱狀圖設置文字樣式* @param chart*/private static void getChartByFont(JFreeChart chart,Integer end) {// 圖形設置標題文字TextTitle textTitle = chart.getTitle();textTitle.setFont(new Font("宋體", Font.BOLD, 32));//設置X軸內容豎直 // XYPlot xyplot = chart.getXYPlot(); // DateAxis dateaxis = (DateAxis)xyplot.getDomainAxis(); // dateaxis.setTickUnit(new DateTickUnit(1, 1, new SimpleDateFormat("MMM-yyyy"))); // dateaxis.setVerticalTickLabels(true); // 設置圖形X軸坐標文字CategoryPlot plot = (CategoryPlot) chart.getPlot();CategoryAxis axis = plot.getDomainAxis();axis.setLabelFont(new Font("宋體", Font.BOLD, 8)); // 設置X軸坐標上標題的文字axis.setTickLabelFont(new Font("宋體", Font.BOLD, 16)); // 設置X軸坐標上的文字axis.setCategoryLabelPositions(CategoryLabelPositions.DOWN_45); axis.setUpperMargin(0.01);//設置距離圖片左端距離 axis.setLowerMargin(0.01); //設置距離圖片右端距離// 設置圖形Y軸坐標文字NumberAxis na= (NumberAxis)plot.getRangeAxis(); na.setStandardTickUnits(NumberAxis.createIntegerTickUnits()); ValueAxis valueAxis = plot.getRangeAxis();valueAxis.setLabelFont(new Font("宋體", Font.BOLD, 20)); // 設置Y軸坐標上標題的文字valueAxis.setTickLabelFont(new Font("sans-serif", Font.BOLD, 16));// 設置Y軸坐標上的文字valueAxis.setRange(0,end); // valueAxis.setLowerBound(0); //Y軸以開始的最小值 // valueAxis.setUpperBound(15); //Y軸的最大值 // 設置提示內容的文字chart.getLegend().setItemFont(new Font("宋體", Font.BOLD, 24));} } public class InputFile {/*** 文件名生成* @return*/public static String getRandomFileName() { SimpleDateFormat simpleDateFormat; simpleDateFormat = new SimpleDateFormat("yyyyMMdd"); Date date = new Date(); String str = simpleDateFormat.format(date); Random random = new Random(); int rannum = (int) (random.nextDouble() * (99999 - 10000 + 1)) + 10000;// 獲取5位隨機數 return rannum + str;// 當前時間 }/*** 單詞:詞頻* @param file* @return*/ public class FileServlet extends HttpServlet{private static final long serialVersionUID = 1L;public FileServlet() {super();}/*** 存入文件*/@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}/*** 讀取文件*/@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("utf-8");response.setContentType("utf-8");//String contentType = request.getContentType();//System.out.println("表單類型:"+contentType);//String boundary = contentType.substring(contentType.indexOf("boundary=")+9);//System.out.println("boundary:"+boundary);String root = getServletContext().getRealPath("/tempFile/temp.txt");File file = new File(root);if(!file.exists()){//先得到文件的上級目錄,并創建上級目錄,在創建文件file.getParentFile().mkdir();try {//創建文件file.createNewFile();} catch (IOException e) {e.printStackTrace();}} public class JfreeChartServlet extends HttpServlet{/*** 柱狀圖生成* @return*/private static final long serialVersionUID = 1L;public JfreeChartServlet() {super();}@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}@SuppressWarnings("null")@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("UTF-8");response.setHeader("Content-Type", "textml;charset=UTF-8");String root = getServletContext().getRealPath("/tempFile/temp.txt");File readfile = new File(root);//System.out.println(readfile.exists());if(readfile.exists()){InputFile in = new InputFile();Map<String,Integer> readmap = in.readFile(readfile);//System.out.println(readmap);//取出單詞詞頻最大數值Collection<Integer> c = readmap.values();Object[] obj = c.toArray();Arrays.sort(obj); // System.out.println("單詞詞頻數:"+Arrays.toString(obj)); // System.out.println("最大詞頻:"+obj[obj.length-1]);Integer maxnumber = (Integer) obj[obj.length-1];System.out.println("單詞數:"+obj.length);//遍歷DefaultCategoryDataset dataset = new DefaultCategoryDataset();for (String key : readmap.keySet()) {Integer value = readmap.get(key); //得到每個key所對應的value值dataset.addValue(value, "單詞", key);}// 獲取柱狀圖工具類創建的柱狀圖,(將數據集傳入)JFreeChart chart = ColumnarTools.createCoColumnar(dataset,maxnumber+1);new InputFile();//以當前時間生成圖片名稱(防止圖片重復被覆蓋)String time = InputFile.getRandomFileName();String uploadUrl = request.getServletContext().getRealPath("/")+"images\\"+time+".png";System.out.println("圖片物理路徑所在位置:"+uploadUrl);File file = new File(uploadUrl);//System.out.println(file);if(!file.exists()){//先得到文件的上級目錄,并創建上級目錄,在創建文件file.getParentFile().mkdir();try {//創建文件file.createNewFile();} catch (IOException e) {e.printStackTrace();}}ChartUtilities.saveChartAsJPEG(file, chart, 800, 600);Map<String, String> map = new HashMap<String, String>();map.put("name", time+".png");JSONObject jsonObject = JSONObject.fromObject(map);System.out.println("json圖片名稱:"+jsonObject);response.getWriter().write(jsonObject.toString());}

4.程序運行


選擇txt文本:

讀取txt,分離單詞:

查詢單詞頻率:

顯示統計柱狀圖:

5.過程及照片

6.PSP

PSP2.1任務內容計劃共完成需要的時間(min)實際完成需要的時間(min)
Planning計劃1015
Estimate估計這個任務需要多少 時間,并規劃大致工作步驟10
Development開發300400
Analysis需求分析 (包括學習新技術)1520
Design Spec生成設計文檔1530
Design Review設計復審 (和同學審核設計文檔)1623
Coding Standard代碼規范 (為目前的開發制定合適的規范)59
Design具體設計2030
Coding具體編碼180240
Code Review代碼復審2030
Test測試(自我測試,修改代碼,提交修改)5050
Reporting報告2530
Test Report測試報告68
Size Measurement計算工作量55
Postmortem & Process Improvement Plan事后總結 ,并提出過程改進計劃912

實驗小結


? 每個人的性格不一樣,有的比較直率外向,有的則比較含蓄內向,如果兩個人互相學習,互相幫助取長補短,就會剛柔相濟,和諧相處。一個人的智慧和能力也是有限的,每個人都應該把自己的優勢與大家分享,利用別人的優勢來彌補自己的不足。人與人的合作不是人力的簡單相加,還需要真誠的態度,優勢的互補,只有這樣才會實現雙贏,實現1+1>2的效果。

轉載于:https://www.cnblogs.com/dingjiahui/p/10645667.html

總結

以上是生活随笔為你收集整理的201671010406 丁家辉《英文文本统计分析》结对项目报告的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。