劉浩:http://www.javashuo.com/article/p-wheluewc-bw.html
後敬甲:http://www.javashuo.com/article/p-vggafcmt-ds.htmlhtml
後敬甲:對爬取文本的字符統計、有效行統計、單詞統計;
劉浩:文章的爬取、附加題、詞頻統計、博客主要撰寫;python
https://github.com/tsf2016/pair-projectc++
使用python語言實現,其中使用到了requests庫和beautifulsoup庫,主要使用bs的.select函數選擇html中所須要的標籤的id,class屬性,以找到並獲取對應的信息git
主要流程圖以下
github
簡單使用條件語句逐個判斷輸入的參數,分析其對應的功能,並給出可能發生的錯誤分析算法
while (argv[p] != NULL) { if (argv[p][0]!= '-') { printf("錯誤輸入格式\n"); return -1; } else if(argv[p][1]=='i'){ if (argv[p + 1] == NULL) { printf("缺乏輸入路徑\n"); return -1; } ipath = argv[p + 1];//輸入.txt文件的路徑 p=p+2; continue; } else if (argv[p][1] == 'o') { if (argv[p + 1] == NULL) { printf("缺乏輸出路徑\n"); return -1; } opath = argv[p + 1];//輸出.txt文件的路徑 p = p + 2; continue; } else if (argv[p][1] == 'n') { if (argv[p + 1] == NULL) { break; } if (isdigit(argv[p + 1][0]) == NULL) { p++; } else { diy = atoi(argv[p + 1]);//詞頻輸出個數 p = p + 2; } continue; } else if (argv[p][1] == 'm') { if (argv[p + 1]== NULL) { break; } if (isdigit(argv[p + 1][0]) == NULL) { p++; } else { if (atoi(argv[p + 1]) < 2 || atoi(argv[p + 1]) > 10){ printf("錯誤詞組長度"); return -1; } cizulen = atoi(argv[p + 1]);//詞組長度 p = p + 2; } continue; } else if (argv[p][1] == 'w') { if (argv[p + 1] == NULL || (atoi(argv[p + 1])!=1 && atoi(argv[p + 1])!=0)) { printf("錯誤權重\n"); return -1; } weight = atoi(argv[p + 1]);//詞頻權重 p = p + 2; continue; } else { printf("錯誤參數\n"); return -1; } }
int character(char* path) { /* ifstream 讀取文件路徑 逐個讀取字符數,統計讀入的全部字符 將全部字符鏈接後按分割符進行分割,將一個個子字符串放入vector中 /* for (vector<string>::size_type i = 0; i != split.size(); ++i) { //逐個讀入子字符串,計算子字符串爲「Title「的次數, string key = split[i]; if (i+2<=split.size()&&split[i + 1] == "Title"&&key.size() <= 3) { //字符數還要減去Title前的文章編號 count = count - key.size()-1; //cout << count << endl; } if (m1.count(key) == 0) { m1.insert(pair <string, int>(key, 1)); } else { m1[key]++; } } /* 由於Title不會在正文(須要統計的範圍)中出現, 而每個Title對應着一個一樣不須要統計的Abstract,按照題意每一篇文章要減去17個字符 */ count = count - m1["title"] * 17; return count; }
與統計字符數原理類似,也是算出總的單詞數而後再減去出現的Title和Abstract的次數,還有兩論文之間的換行網絡
int character(char* path) { /* ifstream 讀取文件路徑 逐個讀取字符數,統計讀入的全部字符 將全部字符鏈接後按分割符進行分割,將一個個子字符串放入vector中 /* for (vector<string>::size_type i = 0; i != split.size(); ++i) { //逐個讀入子字符串,計算子字符串爲「Title「的次數, string key = split[i]; if (i+2<=split.size()&&split[i + 1] == "Title"&&key.size() <= 3) { //字符數還要減去Title前的文章編號 count = count - key.size()-1; //cout << count << endl; } if (m1.count(key) == 0) { m1.insert(pair <string, int>(key, 1)); } else { m1[key]++; } } /* 由於Title不會在正文(須要統計的範圍)中出現, 而每個Title對應着一個一樣不須要統計的Abstract,按照題意每一篇文章要減去17個字符 */ count = count - m1["title"] * 17; return count; }
減小不一樣功能對讀入字符後的操做,如只記錄字符數的話就不須要將字符串統一轉小寫,若只記錄單詞數的話就不須要放入map中等等
* 性能分析圖
* 調用最大資源的函數
函數
* TestMethod1:空文本 * TestMethod2:單字符文本 * TestMethod3:全空格文本 * TestMethod4:非字母與數字文本 * TestMethod5:單詞所有大寫文本 * TestMethod6:單詞數字開頭文本 * TestMethod7:最後一行有換行 * TestMethod8:單詞長度小於4 * TestMethod9:漢字文本名 * TestMethod10:無輸入
第N周 | 新增代碼(行) | 累計代碼(行) | 本週學習耗時(小時) | 累計學習耗時(小時) | 重要成長 |
---|---|---|---|---|---|
4 | 0 | 340 | 5 | 25 | Leangoo工具的學習 |
5 | 300 | 640 | 15 | 40 | 哈希算法、優先隊列、結構體等c++算法複習 |
[關係圖譜] 一.Gephi經過共線矩陣構建知網做者關係圖譜
https://blog.csdn.net/eastmount/article/details/81746650工具