• <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>

            學著站在巨人的肩膀上

            金融數學,InformationSearch,Compiler,OS,

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

            前面的DocIndex程序輸入一個Tianwang.raw.*****文件,會產生一下三個文件 Doc.idx, Url.idx, DocId2Url.idx,我們這里對DocSegment程序進行分析。

            這里輸入 Tianwang.raw.*****,Doc.idx,Url.idx.sort_uniq等三個文件,輸出一個Tianwang.raw.***.seg 分詞完畢的文件

            int main(int argc, char* argv[])
            {
                string strLine, strFileName=argv[1];
                CUrl iUrl;
                vector<CUrl> vecCUrl;
                CDocument iDocument;
                vector<CDocument> vecCDocument;
                unsigned int docId = 0;

                //ifstream ifs("Tianwang.raw.2559638448");
                ifstream ifs(strFileName.c_str());  //DocSegment Tianwang.raw.****
                if (!ifs) 
                {
                    cerr << "Cannot open tianwang.img.info for input\n";
                    return -1;
                }

                ifstream ifsUrl("Url.idx.sort_uniq");   //排序并消重后的url字典
                if (!ifsUrl) 
                {
                    cerr << "Cannot open Url.idx.sort_uniq for input\n";
                    return -1;
                }
                ifstream ifsDoc("Doc.idx"); //字典文件
                if (!ifsDoc) 
                {
                    cerr << "Cannot open Doc.idx for input\n";
                    return -1;
                }

                while (getline(ifsUrl,strLine)) //偏離url字典存入一個向量內存中
                {
                    char chksum[33];
                    int  docid;

                    memset(chksum, 0, 33);
                    sscanf( strLine.c_str(), "%s%d", chksum, &docid );
                    iUrl.m_sChecksum = chksum;
                    iUrl.m_nDocId = docid;
                    vecCUrl.push_back(iUrl);
                }

                while (getline(ifsDoc,strLine))     //偏離字典文件將其放入一個向量內存中
                {
                    int docid,pos,length;
                    char chksum[33];

                    memset(chksum, 0, 33);
                    sscanf( strLine.c_str(), "%d%d%d%s", &docid, &pos, &length,chksum );
                    iDocument.m_nDocId = docid;
                    iDocument.m_nPos = pos;
                    iDocument.m_nLength = length;
                    iDocument.m_sChecksum = chksum;
                    vecCDocument.push_back(iDocument);
                }

             

                strFileName += ".seg";
                ofstream fout(strFileName.c_str(), ios::in|ios::out|ios::trunc|ios::binary);    //設置完成分詞后的數據輸出文件
                for ( docId=0; docId<MAX_DOC_ID; docId++ )
                {

                    // find document according to docId
                    int length = vecCDocument[docId+1].m_nPos - vecCDocument[docId].m_nPos -1;
                    char *pContent = new char[length+1];
                    memset(pContent, 0, length+1);
                    ifs.seekg(vecCDocument[docId].m_nPos);
                    ifs.read(pContent, length);

                    char *s;
                    s = pContent;

                    // skip Head
                    int bytesRead = 0,newlines = 0;
                    while (newlines != 2 && bytesRead != HEADER_BUF_SIZE-1) 
                    {
                        if (*s == '\n')
                            newlines++;
                        else
                            newlines = 0;
                        s++;
                        bytesRead++;
                    }
                    if (bytesRead == HEADER_BUF_SIZE-1) continue;


                    // skip header
                    bytesRead = 0,newlines = 0;
                    while (newlines != 2 && bytesRead != HEADER_BUF_SIZE-1) 
                    {
                        if (*s == '\n')
                            newlines++;
                        else
                            newlines = 0;
                        s++;
                        bytesRead++;
                    }
                    if (bytesRead == HEADER_BUF_SIZE-1) continue;

                    //iDocument.m_sBody = s;
                    iDocument.RemoveTags(s);    //去除<>
                    iDocument.m_sBodyNoTags = s;

                    delete[] pContent;
                    string strLine = iDocument.m_sBodyNoTags;

                    CStrFun::ReplaceStr(strLine, " ", " ");
                    CStrFun::EmptyStr(strLine); // set " \t\r\n" to " "


                    // segment the document 具體分詞處理
                    CHzSeg iHzSeg;
                    strLine = iHzSeg.SegmentSentenceMM(iDict,strLine);
                    fout << docId << endl << strLine;
                    fout << endl;
                    
                }

                return(0);
            }
            這里只是浮光掠影式的過一遍大概的代碼,后面我會有專題詳細講解 parse html 和 segment docment 等技術

             

             

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

            評論

            # re: 自頂向下學搜索引擎——北大天網搜索引擎TSE分析及完全注釋[6]倒排索引的建立的程序分析(2) 2009-12-12 13:17 凡客誠品網
            捱三頂四看來達到  回復  更多評論
              

            日本加勒比久久精品| WWW婷婷AV久久久影片| 日本精品一区二区久久久| 香蕉久久永久视频| 久久精品国产亚洲精品2020| 99久久国产综合精品麻豆| 国内精品久久久久久久涩爱| 久久综合亚洲色一区二区三区| 日产精品久久久久久久| 久久国产视频网| 久久精品国产亚洲AV电影| 久久男人中文字幕资源站| 波多野结衣中文字幕久久| 欧美午夜A∨大片久久| 99久久精品日本一区二区免费| 亚洲精品无码久久毛片| 2021久久国自产拍精品| 97精品依人久久久大香线蕉97 | 99精品久久精品一区二区| 久久久久国产精品嫩草影院| 日产精品久久久久久久性色| 看全色黄大色大片免费久久久 | 丰满少妇人妻久久久久久| 久久久久久伊人高潮影院| 久久久噜噜噜久久| 久久国产精品成人免费| 久久久久亚洲AV成人片| 亚洲精品美女久久久久99| 亚洲国产高清精品线久久 | 国产精品对白刺激久久久| 老男人久久青草av高清| 久久香蕉国产线看观看猫咪?v| 久久电影网一区| 久久777国产线看观看精品| 久久99精品国产麻豆| 影音先锋女人AV鲁色资源网久久| 亚洲v国产v天堂a无码久久| 国产三级观看久久| 久久激情五月丁香伊人| 精品久久久久国产免费| 久久综合色区|