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
| Planning | 計劃 | 10 | 15 |
| Estimate | 估計這個任務需要多少 時間,并規劃大致工作步驟 | 10 | |
| Development | 開發 | 300 | 400 |
| Analysis | 需求分析 (包括學習新技術) | 15 | 20 |
| Design Spec | 生成設計文檔 | 15 | 30 |
| Design Review | 設計復審 (和同學審核設計文檔) | 16 | 23 |
| Coding Standard | 代碼規范 (為目前的開發制定合適的規范) | 5 | 9 |
| Design | 具體設計 | 20 | 30 |
| Coding | 具體編碼 | 180 | 240 |
| Code Review | 代碼復審 | 20 | 30 |
| Test | 測試(自我測試,修改代碼,提交修改) | 50 | 50 |
| Reporting | 報告 | 25 | 30 |
| Test Report | 測試報告 | 6 | 8 |
| Size Measurement | 計算工作量 | 5 | 5 |
| Postmortem & Process Improvement Plan | 事后總結 ,并提出過程改進計劃 | 9 | 12 |
實驗小結
? 每個人的性格不一樣,有的比較直率外向,有的則比較含蓄內向,如果兩個人互相學習,互相幫助取長補短,就會剛柔相濟,和諧相處。一個人的智慧和能力也是有限的,每個人都應該把自己的優勢與大家分享,利用別人的優勢來彌補自己的不足。人與人的合作不是人力的簡單相加,還需要真誠的態度,優勢的互補,只有這樣才會實現雙贏,實現1+1>2的效果。
轉載于:https://www.cnblogs.com/dingjiahui/p/10645667.html
總結
以上是生活随笔為你收集整理的201671010406 丁家辉《英文文本统计分析》结对项目报告的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用servlet校验密码2
- 下一篇: sublime text3安装