• <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 凡客誠品網
            捱三頂四看來達到  回復  更多評論
              

            99久久综合国产精品免费| 2022年国产精品久久久久| 久久久精品久久久久特色影视| 久久精品国产亚洲一区二区| AV色综合久久天堂AV色综合在 | 久久综合丁香激情久久| 欧美麻豆久久久久久中文| 久久AV无码精品人妻糸列| 久久精品成人免费网站| 中文精品99久久国产 | 国产精品内射久久久久欢欢| 久久精品亚洲男人的天堂| 亚洲国产另类久久久精品黑人| 久久精品嫩草影院| 亚洲国产精品无码久久久不卡| 国产精品gz久久久| 亚洲AV日韩AV天堂久久| 婷婷久久综合九色综合绿巨人| www.久久精品| 亚洲精品乱码久久久久久蜜桃不卡| 久久精品国产91久久综合麻豆自制 | 无码任你躁久久久久久| 久久综合九色综合97_久久久| 久久婷婷国产剧情内射白浆| 人妻系列无码专区久久五月天| www.久久99| 潮喷大喷水系列无码久久精品| 久久亚洲AV无码精品色午夜麻豆| 成人国内精品久久久久影院VR| 久久夜色精品国产欧美乱| 欧美日韩中文字幕久久久不卡| 久久综合九色综合欧美狠狠| 潮喷大喷水系列无码久久精品| 国产69精品久久久久9999APGF | 久久偷看各类wc女厕嘘嘘| 性高湖久久久久久久久AAAAA| 亚洲国产精品久久久久网站| 日本免费久久久久久久网站| 99久久99这里只有免费费精品| 2022年国产精品久久久久| 久久国产精品国产自线拍免费|