当前位置: 首页 > news >正文

网站建设的思想嘉兴网站快速排名优化

网站建设的思想,嘉兴网站快速排名优化,网站被百度k了如何申述,企业推广托管输入不能存在空格 目前输入的关键词时每隔一空格内容分别进行搜索#xff0c;大部分时候我们都是将一串包含空格的内容直接进行搜索#xff0c;需要将代码改进。 将cin换为fgets #include searcher.hpp #include iostream #include cstdio #in…输入不能存在空格 目前输入的关键词时每隔一空格内容分别进行搜索大部分时候我们都是将一串包含空格的内容直接进行搜索需要将代码改进。 将cin换为fgets #include searcher.hpp #include iostream #include cstdio #include cstring #include stringconst std::string input data/raw_html/raw.txt;int main() {//for testns_searcher::Searcher *search new ns_searcher::Searcher();search-InitSearcher(input);std::string query;std::string json_string;char buffer[1024];while(true){std::cout Please Enter You Search Query# ;fgets(buffer, sizeof(buffer)-1, stdin);buffer[strlen(buffer) - 1] 0;query buffer;search-Search(query, json_string);std::cout json_string std::endl;}return 0; }desc存在None 搜索出来的结果有部分desc的内容时None std::string GetDesc(const std::string html_content, const std::string word) {//找到word在html_content中的首次出现然后往前找50个字节(如果没有就从begin开始)往后找100个字节(如果没有就截取到end)//截取出这部分内容const std::size_t prev_step 50;const std::size_t next_step 100;//1.找到首次出现std::size_t pos html_content.find(word);if(pos std::string::npos){return None1; //不可能发生}//2.获取startendstd::size_t start 0;std::size_t end html_content.size() - 1;//如果之前有50字符就更新开始位置if(pos - prev_step start) start pos - prev_step;if(pos next_step end) end pos next_step;//3.截取子串returnif(start end) return None2;return html_content.substr(start, end - start); } 给None的两种情况加上脚标 None1和2都有 因为pos是无符号整数减去step过了0成为负数其实是变为一个特别大的值此时就超过了start远大于start条件成立更新startstart变为一个特别大的值这时start有可能大于end于是返回None2 if(pos start prev_step) start pos - prev_step;将-变为转换为两个正数的比较 std::string GetDesc(const std::string html_content, const std::string word) {//找到word在html_content中的首次出现然后往前找50个字节(如果没有就从begin开始)往后找100个字节(如果没有就截取到end)//截取出这部分内容const std::size_t prev_step 50;const std::size_t next_step 100;//1.找到首次出现std::size_t pos html_content.find(word);if(pos std::string::npos){return None1; //不可能发生}//2.获取startendstd::size_t 无符号整数std::size_t start 0;std::size_t end html_content.size() - 1;//如果之前有50字符就更新开始位置if(pos start prev_step) start pos - prev_step;if((int)pos (int)(end - next_step)) end pos next_step;//3.截取子串returnif(start end) return None2;return html_content.substr(start, end - start); } None2修改完成 在word里面保存的对应的搜索关键字都变为小写。 索引关键字搜索关键字都是小写 但是在获取摘要的时候用的是原始的网页内容提炼摘要的word是已经转为小写的词 实际在获取摘要find的时候就匹配不到了因为fine不是忽略大小写的 而且string在实际搜索的时候也没有忽略大小写的匹配方式 并且不能直接将原始网页全部变为小写 可以使用c的search std::string GetDesc(const std::string html_content, const std::string word) {//找到word在html_content中的首次出现然后往前找50个字节(如果没有就从begin开始)往后找100个字节(如果没有就截取到end)//截取出这部分内容const int prev_step 50;const int next_step 100;//1.找到首次出现auto iter std::search(html_content.begin(), html_content.end(), word.begin(), word.end(), [](int x, int y){return (std::tolower(x) std::tolower(y));});if(iter html_content.end()){return None1;}int pos std::distance(html_content.begin(), iter);//2.获取startendstd::size_t 无符号整数int start 0;int end html_content.size() - 1;//如果之前有50字符就更新开始位置if(pos start prev_step) start pos - prev_step;if(pos end - next_step) end pos next_step;//3.截取子串returnif(start end) return None2;return html_content.substr(start, end - start); } None1修改完成 输出权值和doc_id searcher.hpp Json::Value root; for(auto item : inverted_list_all){ns_index::DocInfo * doc index-GetForwardIndex(item.doc_id);if(nullptr doc){continue;}Json::Value elem;elem[title] doc-title;elem[desc] GetDesc(doc-content, item.word); //content是文档的去标签的结果但是不是我们想要的我们要的是一部分elem[url] doc-url;//for debugelem[id] (int)item.doc_id; //int-stringelem[weight] item.weight; root.append(elem); } 是按照权值大小降序排列的 打开这个网页查看 函数重名 util.hpp class StringUtil{public:static void Split(const std::string target, std::vectorstd::string *out, const std::string sep){//boost splitboost::split(*out, target, boost::is_any_of(sep), boost::token_compress_on);}};把StringUtil的函数名改为Split index.hpp DocInfo *BuildForwardIndex(const std::string line) {//1. 解析line字符串切分//line - 3 string, title, content, urlstd::vectorstd::string results;const std::string sep \3; //行内分隔符ns_util::StringUtil::Split(line, results, sep);//ns_util::StringUtil::CutString(line, results, sep);if(results.size() ! 3){return nullptr;}//2. 字符串进行填充到DocIinfoDocInfo doc;doc.title results[0]; //titledoc.content results[1]; //contentdoc.url results[2]; ///urldoc.doc_id forward_index.size(); //先进行保存id在插入对应的id就是当前doc在vector中的下标!//3. 插入到正排索引的vectorforward_index.push_back(std::move(doc)); //doc,html文件内容return forward_index.back(); } 把index的BuildForwardIndex的调用改为Split 修改文件名 makefile PARSERparser DUGdebug ccg.PHONY:all all:$(PARSER) $(DUG)$(PARSER):parser.cc$(cc) -o $ $^ -lboost_system -lboost_filesystem -stdc11 $(DUG):debug.cc$(cc) -o $ $^ -ljsoncpp -stdc11 .PHONY:clean clean:rm -f $(PARSER) $(DUG)将server.cc改名为debug.cc mv server.cc debug.cc权值和实际关键词出现次数不符合 会多计算也会少计算权值 可能分词工具在分词的时候会少分词 如果目标关键词在尖括号内可能会当成标签处理不会计入 把整个文件拿到内存 去标签之后先拿到标题 对整个文件进行去标签其中是包括标签的 实际如果一个词在title中出现一定会被当标题和当内容分别统计一次 index.hpp bool BuildInvertedIndex(const DocInfo doc) {//DocInfo{title, content, url, doc_id}//word - 倒排拉链struct word_cnt{int title_cnt;int content_cnt;word_cnt():title_cnt(0), content_cnt(0){}};std::unordered_mapstd::string, word_cnt word_map; //用来暂存词频的映射表//对标题进行分词std::vectorstd::string title_words;ns_util::JiebaUtil::CutString(doc.title, title_words);if(doc.doc_id 8713){for(auto s : title_words){std::cout title: s std::endl;}}//对标题进行词频统计for(std::string s : title_words){boost::to_lower(s); //需要统一转化成为小写word_map[s].title_cnt; //如果存在就获取如果不存在就新建}//对文档内容进行分词std::vectorstd::string content_words;ns_util::JiebaUtil::CutString(doc.content, content_words);if(doc.doc_id 8713){for(auto s : content_words){std::cout content: s std::endl;}}//对内容进行词频统计for(std::string s : content_words){boost::to_lower(s);word_map[s].content_cnt;}#define X 10 #define Y 1//Hello,hello,HELLOfor(auto word_pair : word_map){InvertedElem item;item.doc_id doc.doc_id;item.word word_pair.first;item.weight X*word_pair.second.title_cnt Y*word_pair.second.content_cnt; //相关性InvertedList inverted_list inverted_index[word_pair.first];inverted_list.push_back(std::move(item));}return true; } debug.cc #include searcher.hpp #include iostream #include cstdio #include cstring #include stringconst std::string input data/raw_html/raw.txt;int main() {//for testns_searcher::Searcher *search new ns_searcher::Searcher();search-InitSearcher(input);//std::string query;//std::string json_string;//char buffer[1024];//while(true){// std::cout Please Enter You Search Query# ;// fgets(buffer, sizeof(buffer)-1, stdin);// buffer[strlen(buffer) - 1] 0;// query buffer;// search-Search(query, json_string);// std::cout json_string std::endl;//}return 0; } 生成了内容和分词但是很难观察 创建一个log.txt touch log.txt将debug的内容重定向到log.txt当中 ./debug log.txt共有7000行内容 查找split
http://www.sczhlp.com/news/206539/

相关文章:

  • 网站改版 升级的目的商丘网站建设网站推广
  • 微信怎样制作网站郑州做网站找哪家
  • 苏州网站建设制作网络公司短链接生成器
  • 网站内容管理系统下载北京seo顾问推推蛙
  • 响应式网站和自适应网站建设验收内容
  • 网站需要在哪些方面备案玉溪网站制作
  • 关键字查询我的网站怎么做织梦的网站收录不好
  • 创建自己的网站需要多少钱行业网站模板
  • 做网站成功案例如何设计一个app
  • 宿迁网站建设报价网站在线咨询模块
  • 网站设计尺寸做外包网站搭建
  • 建设银行网站缺点新开传奇手游发布网站
  • 单位网站建设制作如何做网赌网站
  • 贵州建设厅网站办事大厅网络营销的工作岗位有哪些
  • 创新的医疗网站建设黄浦网站制作
  • 虚拟主机如何搭建网站wordpress图片整站
  • 佛山做网站格个人持有域名可以做公司网站吗
  • 静态化网站的缺点做网站找哪家公司比较好
  • 网站的备用金怎么做凭证家装室内设计
  • 住房和城乡建设部网站科技项目石家庄做网站多少钱
  • 2025年10月AI搜索优化推荐榜单:十强服务商对比评测与避坑指南
  • uml九种类图介绍
  • 2025 年试验箱厂家最新推荐排行榜:涵盖高低温 / 恒温恒湿 / 冷热冲击等设备,精选研发实力强、质量管控严的优质品牌
  • 野外美食网站设计欣赏网站建设以后就业方向
  • 门户网站关键词企业画册设计图片
  • 创建网站公司 徐州企业门户定制网站建设公司
  • 设计公司企业计划书番禺区网站优化
  • 谁有做任务网站石材石料网站搭建教程
  • 企业网址大连seo顾问