From 8fa19689a53b9719294928932169bcd261d36c9c Mon Sep 17 00:00:00 2001 From: jiaqing2000 <47920263+jiaqing2000@users.noreply.github.com> Date: Fri, 5 Jul 2019 23:12:51 +0800 Subject: [PATCH 1/4] Create add --- .../crawled/add" | 1 + 1 file changed, 1 insertion(+) create mode 100644 "summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/crawled/add" diff --git "a/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/crawled/add" "b/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/crawled/add" new file mode 100644 index 0000000..76d4bb8 --- /dev/null +++ "b/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/crawled/add" @@ -0,0 +1 @@ +add From afbd84573b2dfd1cb17384c21486ec2c29b78937 Mon Sep 17 00:00:00 2001 From: jiaqing2000 <47920263+jiaqing2000@users.noreply.github.com> Date: Fri, 5 Jul 2019 23:13:23 +0800 Subject: [PATCH 2/4] Create add --- .../search/add" | 1 + 1 file changed, 1 insertion(+) create mode 100644 "summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/add" diff --git "a/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/add" "b/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/add" new file mode 100644 index 0000000..76d4bb8 --- /dev/null +++ "b/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/add" @@ -0,0 +1 @@ +add From d453e3ecbf8e34be8f8887589f8ce58b0e026144 Mon Sep 17 00:00:00 2001 From: jiaqing2000 <47920263+jiaqing2000@users.noreply.github.com> Date: Fri, 5 Jul 2019 23:14:33 +0800 Subject: [PATCH 3/4] Add files via upload --- .../crawled/Makefile" | 12 ++ .../crawled/datechange.cpp" | 35 ++++ .../crawled/dealwith.cpp" | 157 ++++++++++++++++++ .../crawled/dfs.cpp" | 18 ++ .../crawled/getcontent.cpp" | 88 ++++++++++ .../crawled/head.h" | 43 +++++ .../crawled/main.cpp" | 15 ++ .../crawled/take_apart.py" | 13 ++ 8 files changed, 381 insertions(+) create mode 100644 "summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/crawled/Makefile" create mode 100644 "summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/crawled/datechange.cpp" create mode 100644 "summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/crawled/dealwith.cpp" create mode 100644 "summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/crawled/dfs.cpp" create mode 100644 "summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/crawled/getcontent.cpp" create mode 100644 "summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/crawled/head.h" create mode 100644 "summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/crawled/main.cpp" create mode 100644 "summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/crawled/take_apart.py" diff --git "a/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/crawled/Makefile" "b/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/crawled/Makefile" new file mode 100644 index 0000000..b89f3ad --- /dev/null +++ "b/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/crawled/Makefile" @@ -0,0 +1,12 @@ +bighomework : main.o getcontent.o dfs.o datechange.o dealwith.o main.cpp getcontent.cpp dfs.cpp datechange.cpp dealwith.cpp + g++ -o bighomework main.o getcontent.o dfs.o datechange.o dealwith.o -std=c++11 +main.o : main.cpp head.h + g++ -c main.cpp +dfs.o : dfs.cpp head.h + g++ -c dfs.cpp +datechange.o : datechange.cpp head.h + g++ -c datechange.cpp +getcontent.o : getcontent.cpp head.h + g++ -c getcontent.cpp +dealwith.o : dealwith.cpp head.h + g++ -c dealwith.cpp \ No newline at end of file diff --git "a/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/crawled/datechange.cpp" "b/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/crawled/datechange.cpp" new file mode 100644 index 0000000..e96b522 --- /dev/null +++ "b/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/crawled/datechange.cpp" @@ -0,0 +1,35 @@ +#include "head.h" +int datechange(string date) +{ + int loc1,loc2,m_date = 0; + char middle[9]; + for(int i = 0;i < 4;i++) + middle[i] = date[i]; + loc1 = date.find("月"); + if(loc1 == 7) + { + middle[4] = '0'; + middle[5] = date[6]; + } + else if(loc1 == 8) + { + middle[4] = date[6]; + middle[5] = date[7]; + } + loc2 = date.find("日"); + if(loc2-loc1 == 3) + { + middle[6] = '0'; + middle[7] = date[loc1+2]; + } + else if(loc2-loc1 == 4) + { + middle[6] = date[loc1+2]; + middle[7] = date[loc1+3]; + } + for(int i = 0;i < 8;i++) + { + m_date = m_date*10+int(middle[i]-48); + } + return m_date; +} \ No newline at end of file diff --git "a/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/crawled/dealwith.cpp" "b/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/crawled/dealwith.cpp" new file mode 100644 index 0000000..cf2f410 --- /dev/null +++ "b/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/crawled/dealwith.cpp" @@ -0,0 +1,157 @@ +#include "head.h" +void dealwith12(string command,string file,int Len,int loc) +{ + string name = "../data/"; + string stringdata; + int intdata; + int Loc,Loc1,Loc2; + int i = 0; + while(command[loc+Len+i] <= '9'&&command[loc+Len+i] >= '0') + { + name += command[loc+Len+i]; + i++; + } + name += ".html"; + ofstream foutdata; + foutdata.open(name); + foutdata << name << endl; + Loc = file.find("失踪人姓名"); + Loc1 = file.find("",Loc+1); + Loc2 = file.find("",Loc1+1); + stringdata = file.substr(Loc1+4,Loc2-Loc1-4); + foutdata << stringdata << endl; + Loc = file.find("性别"); + Loc1 = file.find("",Loc+1); + Loc2 = file.find("",Loc1+1); + stringdata = file.substr(Loc1+4,Loc2-Loc1-4); + if(stringdata == "男") + foutdata << 0 << endl; + else + foutdata << 1 << endl; + Loc = file.find("失踪人籍贯"); + Loc1 = file.find("",Loc+1); + Loc2 = file.find("",Loc1+1); + stringdata = file.substr(Loc1+4,Loc2-Loc1-4); + foutdata << stringdata << endl; + Loc = file.find("出生日期"); + Loc1 = file.find("",Loc+1); + Loc2 = file.find("",Loc1+1); + stringdata = file.substr(Loc1+4,Loc2-Loc1-4); + int birthday; + birthday = datechange(stringdata); + foutdata << birthday << endl; + Loc = file.find("失踪日期"); + Loc1 = file.find("",Loc+1); + Loc2 = file.find("",Loc1+1); + stringdata = file.substr(Loc1+4,Loc2-Loc1-4); + int lostday; + lostday = datechange(stringdata); + foutdata << lostday << endl; + Loc = file.find("失踪时身高"); + Loc1 = file.find("",Loc+1); + Loc2 = file.find("",Loc1+1); + stringdata = file.substr(Loc1+4,Loc2-Loc1-4); + int height = 0; + for(int j = 0;j < Loc2-Loc1-4;j++) + { + height = height*10 + int(stringdata[j]-48); + } + foutdata << height << endl; + Loc = file.find("失踪地点"); + Loc1 = file.find("",Loc+1); + Loc2 = file.find("",Loc1+1); + stringdata = file.substr(Loc1+4,Loc2-Loc1-4); + foutdata << stringdata << endl; + Loc = file.find("可能去向"); + Loc1 = file.find("",Loc+1); + Loc2 = file.find("",Loc1+1); + stringdata = file.substr(Loc1+4,Loc2-Loc1-4); + foutdata << stringdata << endl; + Loc = file.find("详细信息"); + Loc1 = file.find("

",Loc1+1); + stringdata = file.substr(Loc1+3,Loc2-Loc1-3); + string prestringdata; + for(int k = 0 ; k < Loc2-Loc1-3;k++) + { + if(!(stringdata[k] < 48&&stringdata[k] >= 0&&stringdata[k] > 57&&stringdata[k] < 128)) + { + prestringdata += stringdata[k]; + } + } + ofstream foutinput; + ifstream finca; + string _part,all; + foutinput.open("input.txt"); + foutinput << prestringdata << endl; + system("python take_apart.py"); + finca.open("cache.txt"); + while(getline(finca,_part)) + { + all += _part; + } + foutdata << all << endl; +} +void dealwith3(string command, string file, int Len, int loc) +{ + string name = "../data/"; + string article = "
"; + string stringdata; + string information; + int intdata,len1; + int Loc,Loc1,Loc2; + int i = 0; + while(command[loc+Len+i] <= '9'&&command[loc+Len+i] >= '0') + { + name += command[loc+Len+i]; + i++; + } + name += ".html"; + ofstream foutdata; + foutdata.open(name); + foutdata << name << endl; + Loc = file.find(article); + information = "姓名: "; + Loc1 = file.find(information); + len1 = information.length(); + Loc2 = file.find(",",Loc1+1); + stringdata = file.substr(Loc1+len1,Loc2-Loc1-len1); + foutdata << stringdata << endl; + Loc1 = file.find(" ",Loc2+1); + stringdata = file.substr(Loc1+1,1); + if(stringdata == "男") + foutdata << 0 << endl; + else + foutdata << 1 << endl; + //籍贯 + information = "出生于"; + Loc1 = file.find("出生于",Loc1+1); + len1 = information.length(); + Loc2 = file.find("日",Loc1+1); + stringdata = file.substr(Loc1+len1,Loc2-Loc1-len1+1); + + Loc1 = file.find("
",Loc+1); + stringdata = file.substr(Loc1+3,Loc2-Loc1-3); + string prestringdata; + for(int k = 0 ; k < Loc2-Loc1-3;k++) + { + if(!(stringdata[k] < 48&&stringdata[k] >= 0&&stringdata[k] > 57&&stringdata[k] < 128)) + { + prestringdata += stringdata[k]; + } + } + ofstream foutinput; + ifstream finca; + string _part,all; + foutinput.open("input.txt"); + foutinput << prestringdata << endl; + system("python take_apart.py"); + finca.open("cache.txt"); + while(getline(finca,_part)) + { + all += _part; + } + foutdata << all << endl; + + +} \ No newline at end of file diff --git "a/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/crawled/dfs.cpp" "b/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/crawled/dfs.cpp" new file mode 100644 index 0000000..3d60183 --- /dev/null +++ "b/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/crawled/dfs.cpp" @@ -0,0 +1,18 @@ +#include "head.h" + +void crawled::deep_search(void) +{ + url_to_be_crawled.push(_root); + while(!url_to_be_crawled.empty()) + { + current_url = url_to_be_crawled.front(); + url_to_be_crawled.pop(); + if(url_already_be_crawled.find(current_url) == url_already_be_crawled.end()) + { + number++; + getContent(current_url); + } + url_already_be_crawled.insert(current_url); + } + cout << number << endl; +} diff --git "a/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/crawled/getcontent.cpp" "b/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/crawled/getcontent.cpp" new file mode 100644 index 0000000..b612327 --- /dev/null +++ "b/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/crawled/getcontent.cpp" @@ -0,0 +1,88 @@ +#include "head.h" +void crawled::getContent(string url) +{ + string command; + string infloc = "https://www.zgszrkdak.cn/home/person/show/id/"; + string infloc2 = "https://www.zgszrkdak.cn/home/family/show/id/"; + string infloc3 = "https://www.zgszrkdak.cn/home/news/index/classid/"; + command = "wget -O url_has_been_crawled.txt --tries=2 --timeout=3 \""; + command = command + url + "\""; + sleep(0.4); + system(command.data()); + ifstream fin; + ofstream fout; + string file,file_part; + int length = 0,len = 0,len1 = 0,location_first = 0,location_end = 0; + string url_format1 = "href="; + string url_format2 ; + fin.open("url_has_been_crawled.txt"); + fout.open("all_different_urls.txt"); + if(fin.is_open() == false) + { + cerr << "Can't open file!\n"; + exit(EXIT_FAILURE); + } + while(getline(fin,file_part)) + { + file += file_part; + } + if(command.find(infloc) != string::npos||command.find(infloc2) != string::npos) + { + int loc ,Len; + loc = command.find(infloc); + Len = infloc.length(); + dealwith12(command,file,Len,loc); + } + if(command.find(infloc3) != string::npos) + { + int loc ,Len; + loc = command.find(infloc); + Len = infloc3.length(); + //dealwith3(command,file,Len,loc); + } + location_first = file.find(url_format1); + if(location_first == string::npos) + return; + else + { + while(location_first != string::npos) + { + string url_to_be_finded; + url_format2 = file[location_first+5]; + location_end = file.find(url_format2,location_first+6); + len = location_end-location_first-6; + url_to_be_finded = file.substr(location_first+6,len); + if(url_to_be_finded.find(_root) != string::npos) + { + if(url_already_be_crawled.find(url_to_be_finded) == url_already_be_crawled.end()) + { + fout << url_to_be_finded << endl; + url_to_be_crawled.push(url_to_be_finded); + } + } + if(url_to_be_finded.find("http://") == string::npos) + { + int loc = url_to_be_finded.find("/"); + string url_to_be_finded_part; + if(loc == 0) + url_to_be_finded = _root+url_to_be_finded; + else if(loc == string::npos) + url_to_be_finded = _root + "/" + url_to_be_finded; + else + { + url_to_be_finded_part = url_to_be_finded.substr(0,loc); + url_to_be_finded = _root + "/" + url_to_be_finded_part; + } + if(url_already_be_crawled.find(url_to_be_finded) == url_already_be_crawled.end()) + { + fout << url_to_be_finded << endl; + url_to_be_crawled.push(url_to_be_finded); + } + } + location_first = file.find(url_format1,location_first+1); + url_to_be_finded.erase(0,200); + } + } + return; +} + diff --git "a/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/crawled/head.h" "b/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/crawled/head.h" new file mode 100644 index 0000000..8fff5a2 --- /dev/null +++ "b/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/crawled/head.h" @@ -0,0 +1,43 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +using namespace std; +int datechange(string date); +void dealwith12(string command,string file,int Loc ,int loc); +void dealwith3(string command,string file,int Loc ,int loc); +class crawled +{ + private: + int number ; + string _root ; + string current_url ; + queue url_to_be_crawled; + set url_already_be_crawled; + void getContent(string); + void deep_search(void); + public: + crawled() + { + number = 0; + } + crawled(string root) + { + number = 0; + _root = root; + deep_search(); + } +}; + + + diff --git "a/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/crawled/main.cpp" "b/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/crawled/main.cpp" new file mode 100644 index 0000000..d7434b0 --- /dev/null +++ "b/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/crawled/main.cpp" @@ -0,0 +1,15 @@ +#include "head.h" +int main() +{ + int time,time_beg,time_end; + string root; + time_beg = clock(); + cout << "Please input the name of url that you are going to crawl" << endl; + cin >> root; + crawled website = crawled(root); + time_end = clock(); + time = time_end-time_beg; + cout << time << endl; + return 0; +} + diff --git "a/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/crawled/take_apart.py" "b/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/crawled/take_apart.py" new file mode 100644 index 0000000..e9fa299 --- /dev/null +++ "b/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/crawled/take_apart.py" @@ -0,0 +1,13 @@ +#encoding=utf-8 +import jieba +import jieba.posseg as pseg +filename = "input.txt" +database = "cache.txt" +f = open(filename,"r") +fn = open(database,"w+") +line = f.read() +words = pseg.cut(line) +for word in words: + print >>fn,str(word) +f.close() +fn.close() \ No newline at end of file From 46db3b311043c599b05941de163a6f89d1a9dcd2 Mon Sep 17 00:00:00 2001 From: jiaqing2000 <47920263+jiaqing2000@users.noreply.github.com> Date: Fri, 5 Jul 2019 23:17:03 +0800 Subject: [PATCH 4/4] Add files via upload --- .../search/Makefile" | 22 +++ .../search/PersonData.cpp" | 28 ++++ .../search/PersonData.h" | 45 ++++++ .../search/Query.cpp" | 117 ++++++++++++++ .../search/Query.h" | 32 ++++ .../search/Scorer.cpp" | 24 +++ .../search/Similarity.cpp" | 113 +++++++++++++ .../search/Similarity.h" | 19 +++ .../search/TopResult.cpp" | 32 ++++ .../search/bighomework.cgi" | Bin 0 -> 153990 bytes .../search/itoa.cpp" | 25 +++ .../search/main.cpp" | 70 +++++++++ .../search/store.cpp" | 148 ++++++++++++++++++ .../search/take_apart.py" | 13 ++ .../search/utf8change.cpp" | 71 +++++++++ .../search/utf8change.h" | 5 + 16 files changed, 764 insertions(+) create mode 100644 "summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/Makefile" create mode 100644 "summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/PersonData.cpp" create mode 100644 "summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/PersonData.h" create mode 100644 "summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/Query.cpp" create mode 100644 "summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/Query.h" create mode 100644 "summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/Scorer.cpp" create mode 100644 "summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/Similarity.cpp" create mode 100644 "summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/Similarity.h" create mode 100644 "summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/TopResult.cpp" create mode 100644 "summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/bighomework.cgi" create mode 100644 "summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/itoa.cpp" create mode 100644 "summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/main.cpp" create mode 100644 "summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/store.cpp" create mode 100644 "summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/take_apart.py" create mode 100644 "summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/utf8change.cpp" create mode 100644 "summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/utf8change.h" diff --git "a/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/Makefile" "b/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/Makefile" new file mode 100644 index 0000000..c90dfa7 --- /dev/null +++ "b/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/Makefile" @@ -0,0 +1,22 @@ +bighomework.cgi : bighomework main.o Query.o itoa.o store.o Similarity.o TopResult.o utf8change.o PersonData.o Scorer.o main.cpp Query.cpp itoa.cpp store.cpp Similarity.cpp TopResult.cpp utf8change.cpp PersonData.cpp Scorer.cpp + g++ -o bighomework.cgi main.o Query.o itoa.o store.o Similarity.o TopResult.o utf8change.o PersonData.o Scorer.o -std=c++11 +bighomework : main.o Query.o itoa.o store.o Similarity.o TopResult.o utf8change.o PersonData.o Scorer.o main.cpp Query.cpp itoa.cpp store.cpp Similarity.cpp TopResult.cpp utf8change.cpp PersonData.cpp Scorer.cpp + g++ -o bighomework main.o Query.o itoa.o store.o Similarity.o TopResult.o utf8change.o PersonData.o Scorer.o -std=c++11 +main.o : main.cpp PersonData.h + g++ -c main.cpp +Query.o : Query.cpp Query.h utf8change.h + g++ -c Query.cpp +itoa.o : itoa.cpp PersonData.h + g++ -c itoa.cpp +store.o : store.cpp Similarity.h PersonData.h + g++ -c store.cpp +Similarity.o : Similarity.cpp PersonData.h + g++ -c Similarity.cpp +TopResult.o : TopResult.cpp PersonData.h + g++ -c TopResult.cpp +utf8change.o : utf8change.cpp + g++ -c utf8change.cpp +PersonData.o : PersonData.cpp PersonData.h + g++ -c Persondata.cpp +Scorer.o : Scorer.cpp Similarity.h + g++ -c Scorer.cpp \ No newline at end of file diff --git "a/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/PersonData.cpp" "b/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/PersonData.cpp" new file mode 100644 index 0000000..114adaf --- /dev/null +++ "b/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/PersonData.cpp" @@ -0,0 +1,28 @@ +#include "PersonData.h" + +void PersonData::ComputeDataValue() +{ + value = 0; + if (!name.empty()) + value += 100; + if (!sex.empty()) + value += 20; + if (birthday) + value += 20; + if (lostday) + value += 5; + if (height) + value += 20; + if (!birthplace.first.empty()) + value += 22.5; + if (!birthplace.second.empty()) + value += 7.5; + if (!lostplace.first.empty()) + value += 7.5; + if (!lostplace.second.empty()) + value += 2.5; + if (!MayToGo.empty()) + value += 5; + if (!information.empty()) + value += 40; +} \ No newline at end of file diff --git "a/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/PersonData.h" "b/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/PersonData.h" new file mode 100644 index 0000000..ec85b9d --- /dev/null +++ "b/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/PersonData.h" @@ -0,0 +1,45 @@ +#pragma once +#include +#include +#include +#include +#include "Query.h" + +string itostring(int i); + +class PersonData +{ +private: + string name; + string sex; + int birthday;//YYYYMMDD + int lostday;//YYYYMMDD + int height; + pair birthplace; + pair lostplace; + string MayToGo; + string information; + string DataName; + double score; + double value; +public: + friend void store(vector& alldata); + friend double NameSimilarity(const string p, const string q); + friend double SexSimilarity(const string p, const string q); + friend double DaySimilarity(const int p, const int q); + friend double HeightSimilarity(const int p, const int q); + friend double PairStringSimilarity(const string p, const pair q); + friend double PairStringSimilarity(const pair p, const pair q); + friend double InformationSimilarity(const string p, const string q); + friend bool CompByScore(PersonData a, PersonData b); + friend void SortByScore(vector &data); + friend void print(vector &data, int shows, int page); + friend void scorer(PersonData &p, const Query &q); + friend void scorer(PersonData &p, const ComplexQuery &q); + //PersonData() = default; + PersonData(string dataname, string m_name, string m_sex, pair m_birthplace, int m_birthday, int m_lostday, int m_height, pair m_lostplace + , string maytogo, string m_information): + DataName(dataname), name(m_name), sex(m_sex), birthplace(m_birthplace), birthday(m_birthday), lostday(m_lostday), height(m_height), lostplace(m_lostplace), + MayToGo(maytogo), information(m_information), score(0), value(0) {} + void ComputeDataValue(); +}; diff --git "a/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/Query.cpp" "b/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/Query.cpp" new file mode 100644 index 0000000..15980e0 --- /dev/null +++ "b/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/Query.cpp" @@ -0,0 +1,117 @@ +#include +#include +#include +#include "Query.h" +#include +#include "utf8change.h" + +ComplexQuery::ComplexQuery() +{ + name = sex = birthplace.first = birthplace.second = lostplace.first = lostplace.second = MayToGo.first = MayToGo.second = ""; + birthday = lostday = height = 0; +} + +/* name + sex + birthday + lostday + height + birthplacefirst + birthplacesecond + lostplacefirst + lostplacesecond + maytogofirst + maytogosecond + information +*/ + +ComplexQuery::ComplexQuery(const string &data) +{ + ComplexQuery(); + name = sex = birthplace.first = birthplace.second = lostplace.first = lostplace.second = MayToGo.first = MayToGo.second = ""; + birthday = lostday = height = 0; + int pos = 0, npos; + do + { + npos = data.find('&', pos); + string s = data.substr(pos, npos - pos); + int epos = s.find('='); + if (s[0] == 'n') + { + name = s.substr(epos + 1); + name = UrlDecode(name); + } + else if (s[0] == 's') + { + sex = s.substr(epos + 1); + sex =UrlDecode(sex); + } + else if (s[0] == 'b') + { + if (s[5] == 'd') + { + if (s.substr(epos + 1).empty()) + birthday = 0; + else birthday = stoi(s.substr(epos + 1)); + } + else if (s[10] == 'f') + { + birthplace.first = s.substr(epos + 1); + birthplace.first = UrlDecode(birthplace.first); + } + else + { + birthplace.second = s.substr(epos + 1); + birthplace.second = UrlDecode(birthplace.second); + } + } + else if (s[0] == 'l') + { + if (s[4] == 'd') + { + if (s.substr(epos + 1).empty()) + lostday = 0; + else lostday = stoi(s.substr(epos + 1)); + } + else if (s[9] == 'f') + { + lostplace.first = s.substr(epos + 1); + lostplace.first = UrlDecode(lostplace.first); + } + else + { + lostplace.second = s.substr(epos + 1); + lostplace.second = UrlDecode(lostplace.second); + } + } + else if (s[0] == 'h') + { + if (s.substr(epos + 1).empty()) + height = 0; + else height = stoi(s.substr(epos + 1)); + } + else if (s[0] == 'i') + { + information = s.substr(epos + 1); + information = UrlDecode(information); + cout << "infor" << information << endl; + ifstream fin; + ofstream fout; + string part; + fout.open("input.txt"); + fout << information << endl; + system("py take_apart.py"); + fin.open("cache.txt"); + information = ""; + while(getline(fin,part)) + { + information += part; + } + } + pos = npos + 1; + } while (npos != string::npos); +} + +void ComplexQuery::print() +{ +} diff --git "a/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/Query.h" "b/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/Query.h" new file mode 100644 index 0000000..a298633 --- /dev/null +++ "b/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/Query.h" @@ -0,0 +1,32 @@ +#pragma once +#include +using namespace std; + +class PersonData; + +class Query +{ +private: + string name; +public: + friend void scorer(PersonData &p, const Query &q); +}; + +class ComplexQuery +{ +private: + string name; + string sex; + int birthday; + int lostday; + int height; + pair birthplace; + pair lostplace; + pair MayToGo; + string information; +public: + ComplexQuery(); + ComplexQuery(const string &data); + friend void scorer(PersonData &p, const ComplexQuery &q); + void print(); +}; \ No newline at end of file diff --git "a/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/Scorer.cpp" "b/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/Scorer.cpp" new file mode 100644 index 0000000..f71ae00 --- /dev/null +++ "b/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/Scorer.cpp" @@ -0,0 +1,24 @@ +#include "Similarity.h" + +void scorer(PersonData &p, const Query &q) +{ + p.score = NameSimilarity(p.name, q.name) * 10000; +} + +void scorer(PersonData &p, const ComplexQuery &q) +{ + p.score = 0; + if (!q.name.empty()) + p.score += NameSimilarity(p.name, q.name) * 10000; + if (!q.sex.empty()) + p.score += SexSimilarity(p.sex, q.sex) * 2000; + if (q.birthday != 0) + p.score += DaySimilarity(p.birthday, q.birthday) * 2000; + if (q.lostday != 0) + p.score += DaySimilarity(p.lostday, q.lostday) * 500; + if (q.height != 0) + p.score += HeightSimilarity(p.height, q.height) * 2000; + p.score += PairStringSimilarity(p.birthplace, q.birthplace) * 3000 + + PairStringSimilarity(p.lostplace, q.lostplace) * 1000; + + InformationSimilarity(p.information, q.information) * 4000; +} \ No newline at end of file diff --git "a/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/Similarity.cpp" "b/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/Similarity.cpp" new file mode 100644 index 0000000..3d069f3 --- /dev/null +++ "b/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/Similarity.cpp" @@ -0,0 +1,113 @@ +#include +#include +#include +#include "PersonData.h" +#include "Query.h" +#include +using namespace std; + +double NameSimilarity(const string p, const string q) +{ + if (p.length() >= 12) + return 0.0; + if (p == q) + return 1.0; + int lp = p.length(), lq = q.length(); + if (lp == 0 || lq == 0) + return 0; + int dp[20][20]; + for (int i = 0; i <= lp; i++) + dp[i][0] = 0; + for (int i = 1; i <= lq; i++) + dp[0][i] = 0; + for (int i = 3; i <= lp; i += 3) + { + for (int j = 3; j <= lq; j += 3) + { + dp[i][j] = max(dp[i - 3][j], dp[i][j - 3]); + dp[i][j] = max(dp[i][j], dp[i - 3][j - 3] + 3 * (p[i] == q[j] && p[i - 1] == q[j - 1] && p[i - 2] == q[i - 2])); + } + } + return (double)(dp[lp][lq]) * dp[lp][lq] / lp / lq; +} + +double SexSimilarity(const string p, const string q) +{ + if (p == "不详") + return 1.0; + return (double)(p == q); +} + +double DaySimilarity(const int p, const int q) +{ + if (p == 0) + return 0.0; + int diff = abs(p - q); + int y = abs(p / 10000 - q / 10000), + m = abs(p % 10000 / 100 - q % 10000 / 100), + d = abs(p % 100 - q % 100); + if (y < 0 || y > 100 || m < 0 || m > 12 || d < 0 || d > 31) + return 0.0; + return 1.0 - y / 150.0 - m / 36.0 - d / 90.0; +} + +double HeightSimilarity(const int p, const int q) +{ + if (p == 0 || q <= 0 || q > 300) + return 0.0; + return 1.0 - double(abs(p - q)) * abs(p - q) / p / q; +} + +double PairStringSimilarity(const string p, const pair q) +{ + if (q.first == "不详" || q.first.empty() || p.find(q.first) == string::npos) + return 0.0; + else if (q.second == "不详" || q.second.empty() || p.find(q.second) == string::npos) + return 0.75; + else return 1.0; +} + +double PairStringSimilarity(const pair p, const pair q) +{ + if (q.first == "不详" || q.first.empty() || p.first != q.first) + return 0.0; + else if (q.second == "不详" || q.second.empty() || p.second != q.second) + return 0.75; + else return 1.0; +} + +double InformationSimilarity(const string p, const string q) +{ + if(p.length() == 0) + { + return 0.0; + } + if(p.find(q) != string::npos) + return 1.0; + else + { + int total = 0; + int k = 0; + int sum = 0; + int loc1 = 0,loc2; + string preq; + cout << preq << endl; + cout << loc1 << loc2 << endl; + while(!(q[k] <= 'z' && q[k] >= 'A' )) + { + preq += q[k]; + k++; + } + while(preq.find("/",loc1) != string::npos) + { + string part; + total++; + loc2 = preq.find("/",loc1+1); + part = preq.substr(loc1,loc2-loc1); + if(p.find(part) != string::npos) + sum++; + loc1 = loc2; + } + return log(1.0+(sum+1.0)/(total+1.0)); + } +} \ No newline at end of file diff --git "a/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/Similarity.h" "b/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/Similarity.h" new file mode 100644 index 0000000..d63aedb --- /dev/null +++ "b/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/Similarity.h" @@ -0,0 +1,19 @@ +#include +#include +#include +#include "PersonData.h" +using namespace std; + +double NameSimilarity(const string p, const string q); + +double SexSimilarity(const string p, const string q); + +double DaySimilarity(const int p, const int q); + +double HeightSimilarity(const int p, const int q); + +double PairStringSimilarity(const string p, const pair q); + +double PairStringSimilarity(const pair p, const pair q); + +double InformationSimilarity(const string p, const string q); \ No newline at end of file diff --git "a/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/TopResult.cpp" "b/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/TopResult.cpp" new file mode 100644 index 0000000..ad18b33 --- /dev/null +++ "b/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/TopResult.cpp" @@ -0,0 +1,32 @@ +#include +#include +#include +#include +#include "PersonData.h" + +const double eps = 1e-2; + +bool CompByScore(PersonData a, PersonData b) +{ + if (abs(a.score - b.score) > eps) + return a.score > b.score; + else return a.value > b.value; +} + +void SortByScore(vector &data) +{ + sort(data.begin(), data.end(), CompByScore); +} + +void print(vector &data, int shows, int page) +{ + int t = min(page * shows, (int)data.size()); + cout<<"

\n"; + for (int i = (page - 1) * shows; i < t; i++) + { + + cout << ("姓名:") << data[i].name <<"
"<< ("得分:") << data[i].score <<"
""详细信息 "<
\n"; + } + cout<<"

\n"; +} \ No newline at end of file diff --git "a/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/bighomework.cgi" "b/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/bighomework.cgi" new file mode 100644 index 0000000000000000000000000000000000000000..8bf5fb1be2a7bb304382f51981644262af75ce38 GIT binary patch literal 153990 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 literal 0 HcmV?d00001 diff --git "a/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/itoa.cpp" "b/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/itoa.cpp" new file mode 100644 index 0000000..d0fd031 --- /dev/null +++ "b/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/itoa.cpp" @@ -0,0 +1,25 @@ +#include "PersonData.h" +string itostring(int i) +{ + string s; + int n,j = 0; + char x[20] = {0}, xx[20] = {0}; + n = i; + while(n != 0) + { + x[j] = char(n%10+48); + n = n/10; + j++; + } + for(int k = 0;k < j;k++) + { + xx[k] = x[j-k-1]; + } + xx[j] = '.'; + xx[j+1] = 'h'; + xx[j+2] = 't'; + xx[j+3] = 'm'; + xx[j+4] = 'l'; + s = xx; + return s; +} \ No newline at end of file diff --git "a/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/main.cpp" "b/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/main.cpp" new file mode 100644 index 0000000..12bcf94 --- /dev/null +++ "b/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/main.cpp" @@ -0,0 +1,70 @@ +#include +#include "PersonData.h" +using namespace std; + +int main() +{ + cout<<"Content-type:text/html\n\n"<"<\n"; + cout<<"\n"; + cout<<"\n"; + cout<<"失踪人口查询系统\n"; + cout<<"\n"; + cout<<"\n"; + cout<<"\n"; + cout<<" \n"; + cout<<"\n"; + cout<<"\n"; + cout<<"\n"; + cout<<"

\n"; + cout<<"Missing\n"; + cout<<"Population\n"; + cout<<"Inquiry\n"; + cout<<"System

\n"; + cout<< "

\n"; + cout<<"查询结果

\n"; + + cout<<"\n"; + cout<<"\n"; + cout<<"
\n"; + + //string s("name=&sex=男&birthday=&lostday=&height=&birthplacefirst=&birthplacesecond=&lostplacefirst=福建省&lostplacesecond=&information=") ; + //cout<> s; + vector data; + store(data); + ComplexQuery q(s); + //cout << data.size() << endl; + for (size_t i = 0; i < data.size(); i++) + scorer(data[i], q); + SortByScore(data); + print(data, 5, 1); + q.print(); + + cout<<"
\n"; + + + cout<<"\n"; + cout<<"\n"; + cout<<"
\n"; + cout<<"

Copyright © 2019.林润博 付嘉庆 吴翔宇.

\n"; + cout<<"
\n"; + cout<<"\n"; + cout<<"\n"; + cout<<"\n"; + cout<<"\n"; + cout<<"\n"; + cout<<"\n"; + cout<<"\n"; + cout<<"\n"; + cout<<"\n"; + cout<<"\n"; + cout<<"\n"; + cout<<"\n"; + cout<<"\n"; + + return 0; +} \ No newline at end of file diff --git "a/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/store.cpp" "b/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/store.cpp" new file mode 100644 index 0000000..4e68004 --- /dev/null +++ "b/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/store.cpp" @@ -0,0 +1,148 @@ +#include "PersonData.h" + +void store(vector &alldata) +{ + int max = 10860; + ifstream fin; + ofstream fout; + for(int i = 0; i <= max;i++) + { + string name = "C:/Users/12772/Desktop/CMakeProject/data/" + itostring(i); + fin.open(name); + if(fin.is_open() == true) + { + int loc1,loc2; + string place; + string dataname; + string m_name; + bool m_sex;//0 : male + string mm_sex; + int m_birthday;//YYYYMMDD + pair m_birthplace; + int m_lostday;//YYYYMMDD + int m_height; + pair m_lostplace; + string maytogo; + string m_information; + fin >> dataname >> m_name >> m_sex >> place >> m_birthday; + if(place.find("省") != string::npos) + { + loc1 = place.find("省"); + m_birthplace.first = place.substr(0,loc1+3); + loc2 = place.find("市"); + if(loc2 != string::npos) + m_birthplace.second = place.substr(loc1+3,loc2-loc1+3); + else + { + m_birthplace.second = "不详"; + } + } + else if(place.find("自治区") != string::npos) + { + loc1 = place.find("自治区"); + m_birthplace.first = place.substr(0,loc1+9); + loc2 = place.find("市"); + if(loc2 != string::npos) + m_birthplace.second = place.substr(loc1+9,loc2-loc1+3); + else + { + m_birthplace.second = "不详"; + } + } + else if(place.find("特别行政区") != string::npos) + { + loc1 = place.find("特别行政区"); + m_birthplace.first = place.substr(0,loc1+15); + loc2 = place.find("市"); + if(loc2 != string::npos) + m_birthplace.second = place.substr(loc1+15,loc2-loc1+3); + else + { + m_birthplace.second = "不详"; + } + } + else if(place.find("市") != string::npos) + { + loc1 = place.find("市"); + m_birthplace.first = place.substr(0,loc1+3); + loc2 = place.find("区"); + if(loc2 != string::npos) + m_birthplace.second = place.substr(loc1+3,loc2-loc1+3); + else + { + m_birthplace.second = "不详"; + } + } + else + { + m_birthplace.first = "不详"; + m_birthplace.second = "不详"; + } + fin >> m_lostday >> m_height >> place; + if(place.find("省") != string::npos) + { + loc1 = place.find("省"); + m_lostplace.first = place.substr(0,loc1+3); + loc2 = place.find("市"); + if(loc2 != string::npos) + m_lostplace.second = place.substr(loc1+3,loc2-loc1+3); + else + { + m_lostplace.second = "不详"; + } + } + else if(place.find("自治区") != string::npos) + { + loc1 = place.find("自治区"); + m_lostplace.first = place.substr(0,loc1+9); + loc2 = place.find("市"); + if(loc2 != string::npos) + m_lostplace.second = place.substr(loc1+9,loc2-loc1+3); + else + { + m_lostplace.second = "不详"; + } + } + else if(place.find("特别行政区") != string::npos) + { + loc1 = place.find("特别行政区"); + m_lostplace.first = place.substr(0,loc1+15); + loc2 = place.find("市"); + if(loc2 != string::npos) + m_lostplace.second = place.substr(loc1+15,loc2-loc1+3); + else + { + m_lostplace.second = "不详"; + } + } + else if(place.find("市") != string::npos) + { + loc1 = place.find("市"); + m_lostplace.first = place.substr(0,loc1+3); + loc2 = place.find("区"); + if(loc2 != string::npos) + m_lostplace.second = place.substr(loc1+3,loc2-loc1+3); + else + { + m_lostplace.second = "不详"; + } + } + else + { + m_lostplace.first = "不详"; + m_lostplace.second = "不详"; + } + fin >> maytogo >> m_information; + if(m_sex == 1) + mm_sex = "女"; + else + { + mm_sex = "男"; + } + + PersonData temp( dataname ,m_name ,mm_sex , m_birthplace, m_birthday, m_lostday, m_height, m_lostplace,maytogo, m_information); + alldata.push_back(temp); + } + fin.close(); + } +} \ No newline at end of file diff --git "a/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/take_apart.py" "b/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/take_apart.py" new file mode 100644 index 0000000..e9fa299 --- /dev/null +++ "b/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/take_apart.py" @@ -0,0 +1,13 @@ +#encoding=utf-8 +import jieba +import jieba.posseg as pseg +filename = "input.txt" +database = "cache.txt" +f = open(filename,"r") +fn = open(database,"w+") +line = f.read() +words = pseg.cut(line) +for word in words: + print >>fn,str(word) +f.close() +fn.close() \ No newline at end of file diff --git "a/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/utf8change.cpp" "b/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/utf8change.cpp" new file mode 100644 index 0000000..2c3ca8f --- /dev/null +++ "b/summer/\345\220\264\347\277\224\345\256\207_\346\236\227\346\266\246\345\215\232_\344\273\230\345\230\211\345\272\206_\345\244\261\350\270\252\344\272\272\345\217\243\346\220\234\347\264\242/search/utf8change.cpp" @@ -0,0 +1,71 @@ + +#include +#include +#include +#include + +unsigned char ToHex(unsigned char x) +{ + return x > 9 ? x + 55 : x + 48; +} + +unsigned char FromHex(unsigned char x) +{ + unsigned char y; + if (x >= 'A' && x <= 'Z') y = x - 'A' + 10; + else if (x >= 'a' && x <= 'z') y = x - 'a' + 10; + else if (x >= '0' && x <= '9') y = x - '0'; + else assert(0); + return y; +} + +std::string UrlEncode(const std::string& str) +{ + std::string strTemp = ""; + size_t length = str.length(); + for (size_t i = 0; i < length; i++) + { + if (isalnum((unsigned char)str[i]) || + (str[i] == '-') || + (str[i] == '_') || + (str[i] == '.') || + (str[i] == '~')) + strTemp += str[i]; + else if (str[i] == ' ') + strTemp += "+"; + else + { + strTemp += '%'; + strTemp += ToHex((unsigned char)str[i] >> 4); + strTemp += ToHex((unsigned char)str[i] % 16); + } + } + return strTemp; +} + +std::string UrlDecode(const std::string& str) +{ + std::string strTemp = ""; + size_t length = str.length(); + for (size_t i = 0; i < length; i++) + { + if (str[i] == '+') strTemp += ' '; + else if (str[i] == '%') + { + assert(i + 2 < length); + unsigned char high = FromHex((unsigned char)str[++i]); + unsigned char low = FromHex((unsigned char)str[++i]); + strTemp += high*16 + low; + } + else strTemp += str[i]; + } + return strTemp; +} +/* int main(){ + std::string url="%E5%BC%A0%E4%B8%89"; + //std::cin>>url; + //url = UrlEncode(url); + url = UrlDecode(url); + std::cout<