青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

學著站在巨人的肩膀上

金融數學,InformationSearch,Compiler,OS,

  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
  12 隨筆 :: 0 文章 :: 8 評論 :: 0 Trackbacks

由上一篇文章[原]自頂向下學搜索引擎——北大天網搜索引擎TSE分析及完全注釋[1]尋找搜索引擎入口 我們可以知道整個程序是從TSESearch.cpp 中的main函數開始的我們重點一下這段代碼

//TSESearch.cpp CQuery iQuery;
 iQuery.GetInputs();  //具體程序開始執行
 // current query & result page number
 iQuery.SetQuery();
 iQuery.SetStart();

 // begin to search
 //開始具體搜索程序
 gettimeofday(&begin_tv,&tz); //開始計時獲取程序運行時間差

 iQuery.GetInvLists(mapBuckets);  //將所有字符集存入映射變量中 瓶頸所在
 iQuery.GetDocIdx(vecDocIdx);  //將倒排索引存入向量中  瓶頸所在
 
 CHzSeg iHzSeg;  //include ChSeg/HzSeg.h
 iQuery.m_sSegQuery = iHzSeg.SegmentSentenceMM(iDict, iQuery.m_sQuery); //將get到的查詢變量分詞分成 "我/  愛/  你們/ 的/  格式"
 
 vector vecTerm;
 iQuery.ParseQuery(vecTerm);  //將以"/"劃分開的關鍵字一一順序放入一個向量容器中
 
 set setRelevantRst;
 iQuery.GetRelevantRst(vecTerm, mapBuckets, setRelevantRst);
 
 gettimeofday(&end_tv,&tz);
 // search end
 //搜索完畢按照順序我們首先深入進iQuery對象的類CQuery  

//Query.cpp

1、GetInputs

這個方法的功能是將前臺get過來的變量轉換到HtmlInputs結構體數組中如下例子和代碼:

//假設前臺查詢的關鍵字是"1"著HtmlInputs中內容輸出如下  //HtmlInputs[0].Name word  //HtmlInputs[0].Value 1  //HtmlInputs[1].Name www  //HtmlInputs[1].Value 搜索  //HtmlInputs[2].Name cdtype  //HtmlInputs[2].Value GB

 
/*
 * Get form information throught environment varible.
 * return 0 if succeed, otherwise exit.
 */
/**
 * 程序翻譯說明
 * 處理GET過來的表單
 *
 * @access  public
 * @return  string 0
 */
int CQuery::GetInputs()
{
    int i,j;
 char *mode = getenv("REQUEST_METHOD"); //返回環境變量的值 這里環境變量 REQUEST_METHOD 為 get 方法
    char *tempstr; //GET變量字符串或POST字符串內容
 char *in_line; 
 int length;  //GET變量串長度或POST內容長度

 cout << "Content-type: text/html\n\n";
 //cout << "Cache-Control: no-cache\n";
 //cout << "Expires: Tue, 08 Apr 1997 17:20:00 GMT\n";
 //cout << "Expires: 0\n";
 //cout << "Pragma: no-cache\n\n";

 cout << "\n";
 cout << "\n";
 //cout << "\n";
 //cout << "\n";
 //cout << "\n";
 cout << "\n";
 cout.flush(); //釋放輸出緩沖區 輸出頭部head和之前的html標簽內容
 //cout <<"" << endl;

 if (mode==NULL) return 1;

 if (strcmp(mode, "POST") == 0)
 {
  length = atoi(getenv("CONTENT_LENGTH")); //如果是POST方法著獲得環境變量CONTENT_LENGTH的整型值
  if (length==0 || length>=256)
   return 1;
  in_line = (char*)malloc(length + 1);
  read(STDIN_FILENO, in_line, length);
  in_line[length]='\0';
 }
 else if (strcmp(mode, "GET") == 0)
 {
  char* inputstr = getenv("QUERY_STRING"); //如果是GET方法著獲得環境變量QUERY_STRING的字符串值
  length = strlen(inputstr);
  if (inputstr==0 || length>=256)
   return 1;

  //獲取get內容長度并把get ?后面的參數賦值給變量in_line
  in_line = (char*)malloc(length + 1);
  strcpy(in_line, inputstr); //小心溢出攻擊
 }


 tempstr = (char*)malloc(length + 1); //獲取post內容或get內容長度
 if(tempstr == NULL)
 {
  printf("\n");
  printf("\n");
  printf("Major failure #1;please notify the webmaster\n");
  printf("\n");
  fflush(stdout); //輸出緩沖區
  exit(2); //錯誤返回
 }

 j=0;
 for (i=0; i char
   strcpy(HtmlInputs[HtmlInputCount].Name,tempstr);
   if (i == length - 1)
   {
    strcpy(HtmlInputs[HtmlInputCount].Value,"");
    HtmlInputCount++;
   }
   j=0;
  }
  else if ((in_line[i] == '&') || (i==length-1))
  {
   if (i==length-1)
   {
    if(in_line[i] == '+')tempstr[j]=' ';
    else tempstr[j] = in_line[i];
    j++;
   }
   tempstr[j]='\0';
   CStrFun::Translate(tempstr); //將URL編碼形式的參數轉換成字符型 %** -> char
   strcpy(HtmlInputs[HtmlInputCount].Value,tempstr);
   HtmlInputCount++;
   j=0;
  }
  else if (in_line[i] == '+')
  {
   tempstr[j]=' ';
   j++;
  }
  else
  {
   tempstr[j]=in_line[i]; //組合get中的變量如word www cdtype
   j++;
  }
  //cout<";
  //cout<";
  //cout.flush();
 }

 /*
 for (int kk = 0; kk < HtmlInputCount ; ++kk )
 {
  cout<<"Name="<";
  cout<<"Value="<";
 }
 //假設前臺查詢的關鍵字是"1"輸出如下
 //Name=word
 //Value=1
 //Name=www
 //Value= 搜索
 //Name=cdtype
 //Value=GB
 */

 if(in_line) free(in_line);
 if(tempstr) free(tempstr);

 return 0;
}
 
2、SetQuery
 
//Query.cpp
void CQuery::SetQuery()
{
 string q = HtmlInputs[0].Value;
 CStrFun::Str2Lower(q,q.size()); //大寫變小寫
 m_sQuery = q;  //準備查詢關鍵字
}
3、SetStart
void CQuery::SetQuery()
{
 string q = HtmlInputs[0].Value;
 CStrFun::Str2Lower(q,q.size()); //大寫變小寫word變量里的值
 m_sQuery = q;  //設置查詢關鍵字
}

4、GetInvLists
 bool CQuery::GetInvLists(map<string, string> &mapBuckets) const
{
 ifstream ifsInvInfo(INF_INFO_NAME.c_str(), ios::binary); //以二進制形式打開一個文件的輸入流緩沖,INF_INFO_NAME在頭文件Comm.h中定義了的, const string INF_INFO_NAME("./Data/sun.iidx");
 //倒排索引文件索引字和文檔好之間有一個制表符"\t"
 //朱德  14383 16151 16151 16151 1683 207 6302 7889 8218 8218 8637
 //朱古力  1085 1222
 
 if (!ifsInvInfo) {
  cerr << "Cannot open " << INF_INFO_NAME << " for input\n";
  return false;
 }
 string strLine, strWord, strDocNum;
 //以行讀取輸入流緩沖到字符串對象strLine中并做處理
 while (getline(ifsInvInfo, strLine)) {
  string::size_type idx;
  string tmp;
  idx = strLine.find("\t");
  strWord = strLine.substr(0,idx);
  strDocNum = strLine.substr(idx+1);
  mapBuckets.insert(map<string,string>::value_type (strWord, strDocNum)); //倒排表二項二維表存入映射中
 
  /*
  map<string, string>::iterator iter;
  int kkk = 0;
  for (iter = mapBuckets.begin(); kkk != 10; ++iter)
  {
   cout<<iter->first<<"  "<<iter->second<<"<br>";
   ++kkk;
  }
  cout.flush();
  */
 }
 return true;
}
 
5、GetDocIdx
 
bool CQuery::GetDocIdx(vector &vecDocIdx) const
{
 ifstream ifs(DOC_IDX_NAME.c_str(), ios::binary); 
 //0  0  bc9ce846d7987c4534f53d423380ba70
 //1  76760 4f47a3cad91f7d35f4bb6b2a638420e5
 //2  141624 d019433008538f65329ae8e39b86026c

 if (!ifs) {
  cerr << "Cannot open " << DOC_IDX_NAME << " for input\n"; //以二進制形式打開一個文件的輸入流緩沖,DOC_IDX_NAME在頭文件Comm.h中定義了的, const string INF_INFO_NAME("./Data/Doc.idx"); 
  return false;
 }

 string strLine, strDocid, strUrl;
 while (getline(ifs,strLine)){
  DocIdx di;

  sscanf( strLine.c_str(), "%d%d", &di.docid, &di.offset ); //只保留了前面兩項文檔號和偏移量
  vecDocIdx.push_back(di); //導入結構體向量中
 }

 return true;
}

 

posted on 2009-12-10 22:52 學者站在巨人的肩膀上 閱讀(1074) 評論(0)  編輯 收藏 引用 所屬分類: 中文文本信息處理
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久精品男女| 国产精品久久久久av免费| 免费国产自线拍一欧美视频| 亚洲免费久久| 性欧美xxxx大乳国产app| 久久九九精品| 免费精品视频| 在线播放一区| 久久久亚洲一区| 性色av一区二区怡红| 麻豆精品91| 激情综合在线| 国产精品美女午夜av| 999亚洲国产精| 亚洲国产小视频| 亚洲视频一二| 欧美日韩一区二区视频在线观看| 国内成人在线| 蜜乳av另类精品一区二区| 久久久999精品免费| 在线免费观看日韩欧美| 欧美激情一区二区三区在线视频观看 | 最新成人av网站| 欧美激情久久久| 99国产精品国产精品毛片| 久久综合九色九九| 亚洲一区网站| 久久激情婷婷| 亚洲精品永久免费精品| 久久综合久久综合久久| 亚洲成人在线网| 亚洲免费视频网站| 久久国产精品久久久| 一本色道久久综合精品竹菊| 亚洲一区二区精品在线| 欧美激情亚洲国产| 国产亚洲激情在线| 久久国产精品99精品国产| 老鸭窝91久久精品色噜噜导演| 久久精品国产在热久久| 一本色道久久综合亚洲精品小说 | 久久蜜桃资源一区二区老牛 | 国模精品一区二区三区| 亚洲一区在线播放| 免费看的黄色欧美网站| 欧美阿v一级看视频| 欧美成人精品不卡视频在线观看| 欧美国产日韩xxxxx| 亚洲夫妻自拍| 久久精品夜夜夜夜久久| 久久久久国产精品一区二区| 欧美日韩亚洲一区二区三区| 欧美中文在线观看| 欧美一级片久久久久久久| 老司机一区二区| 久久一区中文字幕| 欧美影视一区| 在线午夜精品自拍| 欧美激情按摩| 久久国产精品久久国产精品| 91久久精品国产91性色| 亚洲网站啪啪| 欧美成人高清| 久久xxxx精品视频| 日韩写真在线| 亚洲一区精品视频| 一区二区电影免费观看| 国产精自产拍久久久久久| 亚洲网站在线| 91久久久国产精品| 亚洲影院免费观看| 亚洲第一页在线| 亚洲欧洲日本mm| 免费在线国产精品| 美国十次了思思久久精品导航| 亚洲欧美精品一区| 亚洲国产天堂久久国产91| 亚洲桃花岛网站| 亚洲第一综合天堂另类专| 99视频精品免费观看| 久久九九全国免费精品观看| 国产精品一卡二| 欧美久久久久久久| 狠色狠色综合久久| 欧美综合激情网| 久久综合网hezyo| 欧美bbbxxxxx| 亚洲亚洲精品在线观看| 亚洲精品黄色| 性欧美videos另类喷潮| 久久亚洲电影| 亚洲国产福利在线| 99精品欧美一区二区三区| 亚洲欧美日韩在线综合| 免费中文日韩| 韩国在线视频一区| 亚洲欧美在线播放| 亚洲乱码国产乱码精品精天堂| 久久精品国产亚洲5555| 夜夜嗨av一区二区三区| 久久丁香综合五月国产三级网站| 亚洲国内自拍| 国内外成人免费激情在线视频网站 | 久久精品99国产精品| 亚洲综合日韩在线| 久久九九有精品国产23| 蜜臀久久99精品久久久画质超高清 | 欧美日韩日本国产亚洲在线| 99国产精品视频免费观看一公开| 亚洲天堂av在线免费观看| 欧美日韩国产欧美日美国产精品| 99精品国产99久久久久久福利| 亚洲自拍另类| 国产一区二区欧美| 欧美激情2020午夜免费观看| 99在线|亚洲一区二区| 欧美视频在线观看免费| 性久久久久久| 亚洲第一网站免费视频| 亚洲视频一区在线观看| 国产麻豆日韩| 欧美jizz19hd性欧美| 国产精品视频专区| 亚洲美女中文字幕| 亚洲国产精品t66y| 欧美片在线播放| 亚洲免费中文| 亚洲高清免费视频| 午夜视频一区二区| 亚洲国产天堂久久综合| 国产精品热久久久久夜色精品三区 | 狠狠色丁香婷婷综合影院| 亚洲免费一级电影| 在线观看精品| 国产精品福利网站| 久久综合色一综合色88| 欧美一区二区在线| 亚洲免费成人av电影| 国产美女精品视频| 欧美激情一区二区三区成人| 午夜精品久久久久久久99樱桃| 亚洲国产福利在线| 久久另类ts人妖一区二区| 国产精品99久久99久久久二8 | 欧美成人午夜| 午夜在线观看欧美| 亚洲精品综合精品自拍| 久久久天天操| 欧美激情bt| 亚洲图片在区色| 国产日韩精品一区二区三区 | 亚洲色无码播放| 欧美www在线| 最近中文字幕日韩精品| 亚洲一区二区毛片| 欧美精品一线| 免费久久精品视频| 久久精品国产91精品亚洲| 亚洲一区二区免费在线| 欧美激情一区二区三级高清视频| 亚洲欧美日韩精品在线| 狠狠色狠狠色综合日日91app| 久热精品在线| 在线一区欧美| 久久亚洲私人国产精品va| 最新中文字幕一区二区三区| 欧美日韩国产首页在线观看| 亚洲一区二区欧美日韩| 你懂的视频一区二区| 在线天堂一区av电影| 国产人久久人人人人爽| 欧美mv日韩mv国产网站| 亚洲免费人成在线视频观看| 欧美国产日本高清在线| 性欧美1819性猛交| 亚洲人精品午夜在线观看| 国产精品美女久久久久久2018 | 欧美电影免费观看高清| 一本大道av伊人久久综合| 欧美在线国产| 久久国产直播| 久久婷婷久久| 欧美不卡高清| 久久高清免费观看| 亚洲精选大片| 亚洲欧美日韩国产成人精品影院| 亚洲国产mv| 国产一区二区精品| 国产精品久久国产精品99gif| 亚洲国产高清在线| 一区二区三区波多野结衣在线观看| 久热精品在线| 欧美一区二区在线免费观看| 一本一道久久综合狠狠老精东影业| 尤物九九久久国产精品的特点| 国产精品一区二区三区四区| 欧美日韩专区| 欧美日韩日本网| 欧美激情一级片一区二区| 免费不卡视频|