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

學著站在巨人的肩膀上

金融數學,InformationSearch,Compiler,OS,

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

由于百度博客http://hi.baidu.com/jrckkyy發表文章字數有限,以后原創文章全部都先發表到csdn和cu上,再發表到百度博客上,百度博客除了放原創的文章還主要放網上尋找到的優秀文章。

本著黑客精神我將陸續把最近分析注釋TSE搜索引擎的心得發布出來,老鳥,大蝦,大牛,高手飄過就是了,若愿意浪費指點下小弟的在下不甚感激,有問題的朋友直接留言討論。由于本人水平有限,分析和翻譯難免有錯大家見笑了。

上學期拜讀了James F.Kurose著的《計算機網絡-自頂向下方法與internet特色(第三版陰影)》,覺得寫得確實不錯(希望沒看的朋友一定要買來看看),自己也來搞個高自頂向下的學習方法,先從用戶看得到的東西出發分析研究搜索引擎,下面我們就來看看各大搜索引擎搜索界面的代碼,你所需要特別注意的是form表單中的action

雅虎http://www.yohoo.com/

<form name=s1 style="margin-bottom:0" action="<table cellpadding=0 cellspacing=0 border=0><tr><td>
<input type=text size=30 name=p title="enter search terms here">&nbsp;
<input type=submit value=Search>&nbsp;&nbsp;</td><td><font face=arial size=-2>·&nbsp;
<a href="
search</a><br>·&nbsp;
<a href="
popular</a></font></td></tr></table></form>
谷歌
http://www.g.cn

<form method=GET action=/search><tr><td nowrap>
<font size=-1><input type=text name=q size=41 maxlength=2048 value="jrckkyy" title="Google 搜索"> <input type=submit name=btnG value="Google 搜索"><input type=hidden name=complete value=1><input type=hidden name=hl value="zh-CN"><input type=hidden name=newwindow value=1><input type=hidden name=sa value="2"></font></td></tr></form>
百度http://www.baidu.com

<form name=f2 action="/s">
<tr valign="middle">
<td nowrap>
<input type=hidden name=ct value="0">
<input type=hidden name=ie value="gb2312">
<input type=hidden name=bs value="jrckkyy">
<input type=hidden name=sr>
<input type=hidden name=z value="">
<input type=hidden name=cl value=3>
<input type=hidden name=f value=8>
<input name=wd size="35" class=i value="jrckkyy" maxlength=100>
<input type=submit value=百度一下> <input type=button value=結果中找 onclick="return bq(f2,1,0);">&nbsp;&nbsp;&nbsp;</td>
<td nowrap><a href="</tr>
</form>
天網
http://www.tianwang.com/

<form name=f action="/cgi-bin/tw" method=get>
                <td valign=center width=634 background=images/index_image_02.gif>
                    <table height=46 cellspacing=0 cellpadding=0 width=600 align=right  border=0>
                        <tbody>
                            <tr>
                                <td height=50>
                                    <table cellspacing=0 cellpadding=0 width=600 border=0>
                                        <tbody>
                                            <tr>
                                  <td width="524" height="30" valign="bottom">
                                        <div align="center">                                  <input name="word" type="text" size="40" maxlength="255" onClick="this.focus();checkWord(this,1)" onblutesr='checkWord(this,0)' value='請輸入資源名稱'>
                                            <font color=#ffffff> &nbsp;
                                            <select onChange=reRange(this.selectedIndex) name=range>
                                                <script language=javascript>...
                           <!--
                           for(var i = 0; i < rescode.length; i++) ...{
                               if(i == 0) ...{
                                   document.write('<option value="0" selected>' + rescode[i][0] + '</option>');
                               } else ...{
                                   document.write('<option value="' + i + '">' + rescode[i][0] + '</option>');
                               }
                           }
                           document.f.range.selectedIndex = 0;
                           -->
                         </script>
                                            </select>
                                            </font>-<font color=#ffffff>
                                            <select name=cd>
                                                <script language=javascript>...
                           <!--
                           var ind = document.f.range.selectedIndex;
                           var len = (rescode[ind].length - 1) / 2;
                           var sel = 0;
                           for(var i = 0; i < len; i++) ...{
                               document.write('<option value="' + rescode[ind][2*i+1] + '">' + rescode[ind][2*i+2] + '</option>');
                               if(rescode[ind][2*i+1] == 0)
                                   sel = i;
                           }
                           document.f.cd.selectedIndex = sel;
                           -->
                 </script>
                                            </select>
                                            </font></div>
                                    </td>
                <td width="71" valign="bottom"><input id=submit2 type=image height=22 width=40 src="images/so2.gif" align=absMiddle name=submit></td>
              </tr>
                                            <tr>
                                                <td colspan=3 height=25 class=style16>
                                                    <div align=center></div>
                                                </td>
                                            </tr>
                                        </tbody>
                                    </table>
                                </td>
                            </tr>
                        </tbody>
                    </table>
                </td>
            </form>
測試服務器TSE:

<form method="get" action="/cgi-bin/index/TSESearch" name="tw">
        <td width="100%" height="25" align="center">                          
        <input type="text" name="word" size="55">
        <input type="submit" value=" 搜索" name="www">
        </td>                          
        <input type="hidden" name="cdtype" value="GB">                        
        </form>   
由以上幾個form的屬性可以看出全部采用的是get方法,CGI做為處理程序,也就是C/C++,CGI全稱是“公共網關界面”(Common Gateway Interface),HTTP服務器與你的或其它機器上的程序進行“交談”的一種工具,其程序須運行在網絡服務器上。CGI逐漸被近幾年來的PHP,JAVA,ASP,PERL,Python,Ruby等動態語言所取代。但是其在速度和運行效率上的優勢是無法取代的。

以下是TSE CGI入口程序注釋,其他搜索引擎的入口也應該類似

 

/**//**
 * 程序翻譯說明
 * @Copyright (c) 2008, 研發部
 * All rights reserved.
 *
 * @filesource  TSESearch.cpp
 * @author  jrckkyy <jrckkyy@163.com>
 *
 * Let's start
 *
 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/time.h>
#include <unistd.h>

#include <iostream>
#include <fstream>
#include <list>

#include "Comm.h"    //包含2個索引和1個數據文件
#include "Query.h"    //包含數據查詢處理頭文件
#include "Document.h"    //html文檔處理頭文件
#include "StrFun.h"        //字符串處理頭文件
#include "ChSeg/Dict.h"    //字元字典處理頭文件
#include "ChSeg/HzSeg.h"   
#include "DisplayRst.h"    //返回查詢結果頁面頭文件,返回結果分為頭部,中部,底部

using namespace std;

/**//*
 * A inverted file(INF) includes a term-index file & a inverted-lists file.
 * A inverted-lists consists of many bucks(posting lists).
 * The term-index file is stored at vecTerm, and
 * the inverted-lists is sored at mapBuckets.
 */

/**//**
 * 程序翻譯說明
 * 搜索程序入口前臺關鍵字提交到該cgi程序 例如:./cgi-bin/index/TSESearch?word=123&start=1
 * 倒排文件包括一個記錄檢索詞文件和一個倒排列表文件。
 * 倒排列表包含很多標志(提交名單)。
 * 記錄檢索詞文件使用vecTerm來排序,和倒排列表是用mapBuckets來排序。
 *
 * @access  public
 * @param   int char 參數的漢字說明 用于接收前臺get傳遞的參數
 * @return  string 0
 */
int main(int argc, char* argv[])
...{
    struct timeval begin_tv, end_tv;
    struct timezone tz;

    CDict iDict;
    map<string, string> dictMap, mapBuckets;
    vector<DocIdx> vecDocIdx;    //Document。h

    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<string> vecTerm;
    iQuery.ParseQuery(vecTerm);        //將以"/"劃分開的關鍵字一一順序放入一個向量容器中
   
    set<string> setRelevantRst;
    iQuery.GetRelevantRst(vecTerm, mapBuckets, setRelevantRst);
   
    gettimeofday(&end_tv,&tz);
    // search end
    //搜索完畢

    //下面開始顯示
    CDisplayRst iDisplayRst;
    iDisplayRst.ShowTop();

    float used_msec = (end_tv.tv_sec-begin_tv.tv_sec)*1000
        +((float)(end_tv.tv_usec-begin_tv.tv_usec))/(float)1000;

    iDisplayRst.ShowMiddle(iQuery.m_sQuery,used_msec,
            setRelevantRst.size(), iQuery.m_iStart);

    iDisplayRst.ShowBelow(vecTerm,setRelevantRst,vecDocIdx,iQuery.m_iStart);

    return 0;

}

 

 

posted on 2009-12-10 22:51 學者站在巨人的肩膀上 閱讀(2402) 評論(1)  編輯 收藏 引用 所屬分類: 中文文本信息處理

評論

# re: 自頂向下學搜索引擎——北大天網搜索引擎TSE分析及完全注釋[1]尋找搜索引擎入口 2009-12-12 09:44 coconut
cgi是接口,和語言無關,可以是C也可以是其他語言。  回復  更多評論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产欧美一区二区精品忘忧草| 亚洲国产日韩在线| 欧美一区二区视频97| 亚洲精品久久久久久下一站| 1769国产精品| 黄色日韩精品| 亚洲肉体裸体xxxx137| 一本色道久久精品| 欧美一区二区视频观看视频| 久久免费视频网| 91久久精品国产91久久性色tv| 亚洲人成在线播放| 午夜日韩福利| 欧美精品高清视频| 国产伦精品一区二区三区| 影音先锋在线一区| 亚洲一区二区综合| 美女日韩欧美| 在线综合亚洲欧美在线视频| 久久婷婷人人澡人人喊人人爽| 欧美激情精品久久久久久| 国产精品男人爽免费视频1| 一区二区在线视频| 欧美一区二区三区四区夜夜大片| 欧美99在线视频观看| 这里只有精品在线播放| 欧美在线看片| 国产精品白丝av嫩草影院| 亚洲高清在线观看| 久久精品国产91精品亚洲| 亚洲韩国日本中文字幕| 欧美亚洲一区在线| 国产精品成人v| 亚洲欧洲一区二区三区| 久久久亚洲一区| 亚洲一区在线观看视频 | 小辣椒精品导航| 欧美高清视频www夜色资源网| 亚洲制服少妇| 欧美性事免费在线观看| 日韩午夜在线电影| 欧美激情1区| 久久久美女艺术照精彩视频福利播放| 欧美丝袜一区二区三区| 亚洲精选视频免费看| 裸体丰满少妇做受久久99精品| 亚洲一区精品视频| 国产精品久久久久一区| 一区二区三区福利| 亚洲精选久久| 欧美日韩日日骚| 99精品热视频| 亚洲精品欧美一区二区三区| 欧美电影在线| 亚洲精品社区| 亚洲欧洲偷拍精品| 亚洲在线第一页| 久久天堂国产精品| 国产精品区一区| 欧美激情欧美狂野欧美精品| 亚洲福利视频网站| 麻豆精品精品国产自在97香蕉| 亚洲一二三区在线| 国产欧美日本在线| 久久精品国产免费| 久久岛国电影| 亚洲国产精品日韩| 亚洲国产成人精品视频| 欧美成年人视频| 亚洲视频在线观看三级| 亚洲一区视频在线| 精品电影在线观看| 亚洲国产mv| 国产精品mv在线观看| 性色一区二区三区| 久久久不卡网国产精品一区| 亚洲国产精品免费| 日韩视频不卡中文| 国产精品区二区三区日本 | 亚洲综合好骚| 久久国产精品99国产精| 亚洲欧洲一区二区天堂久久 | 亚洲永久免费视频| 国产精品系列在线| 老司机久久99久久精品播放免费| 另类综合日韩欧美亚洲| 一区二区不卡在线视频 午夜欧美不卡在 | 国产日韩1区| 欧美成人69av| 欧美天天在线| 免费成人高清| 国产精品你懂的在线| 欧美mv日韩mv国产网站app| 欧美喷水视频| 久久久久久久久一区二区| 欧美高清视频www夜色资源网| 亚洲欧美激情在线视频| 久久综合色综合88| 性欧美在线看片a免费观看| 久久综合一区二区三区| 欧美一区二区三区视频免费播放| 麻豆精品视频在线观看视频| 午夜一级在线看亚洲| 免费观看成人| 久久九九有精品国产23| 国产精品av一区二区| 欧美国产免费| 好吊一区二区三区| 亚洲欧美激情在线视频| 国产精品av免费在线观看| 欧美精品自拍偷拍动漫精品| 午夜视频在线观看一区| 欧美视频一区二区| 欧美国产激情二区三区| 国产欧美 在线欧美| 亚洲精品综合精品自拍| 在线播放亚洲| 久久国产免费看| 亚洲欧美一区二区三区久久 | 欧美一区成人| 99在线精品视频在线观看| 久久香蕉国产线看观看网| 久久激五月天综合精品| 国产精品国产a| 亚洲精品久久久久久一区二区| ●精品国产综合乱码久久久久| 午夜精品电影| 欧美一区二区三区免费在线看| 欧美体内she精视频在线观看| 亚洲开发第一视频在线播放| 亚洲三级影院| 欧美激情一二三区| 91久久国产综合久久91精品网站| 亚洲高清视频中文字幕| 久久久久欧美精品| 欧美+亚洲+精品+三区| 永久域名在线精品| 久久一区二区三区四区| 欧美成人高清视频| 亚洲黄色性网站| 美女日韩欧美| 亚洲韩日在线| 亚洲一本视频| 国产精品高清免费在线观看| 一本色道**综合亚洲精品蜜桃冫 | 一本色道久久综合精品竹菊 | 久久综合导航| 欧美波霸影院| 最近看过的日韩成人| 欧美激情一区二区三级高清视频| 欧美成人精品在线观看| 亚洲国产欧美日韩| 欧美日韩第一页| 亚洲一级黄色av| 久久久久久久综合| 韩国三级在线一区| 美腿丝袜亚洲色图| 亚洲精品视频一区二区三区| 亚洲欧美网站| 在线观看视频亚洲| 欧美日韩国产精品专区| 亚洲男女自偷自拍图片另类| 久久久久一区二区三区四区| 亚洲人成啪啪网站| 欧美视频一区二区三区在线观看| 午夜精品久久久久久久久久久久久| 久久午夜羞羞影院免费观看| 亚洲日本中文字幕免费在线不卡| 欧美午夜精品久久久久久久| 欧美一级专区| 亚洲电影下载| 久久精品理论片| 国产精品久久久久久久久婷婷| 亚洲淫性视频| 久久综合网络一区二区| 一本色道久久综合一区| 亚洲一区二区三区欧美| 亚洲欧美成人在线| 亚洲综合国产激情另类一区| 国产精品成人aaaaa网站| 亚洲国产精品一区二区www| 99成人在线| 国产日韩欧美中文在线播放| 久久久精品日韩欧美| 日韩亚洲一区二区| 国产精品久久久久久亚洲调教| 亚洲精品视频免费| 久久久亚洲高清| 亚洲美女精品成人在线视频| 国产日韩精品一区二区三区| 欧美日韩国产色视频| 欧美在线91| 亚洲性感美女99在线| 亚洲国产视频一区二区| 久久精品五月| 亚洲一区二区三区免费视频| 亚洲国产精品久久久久秋霞蜜臀 | 亚洲作爱视频| 永久域名在线精品| 国产亚洲综合性久久久影院|