北大天网搜索引擎TSE分析及完全注释[6]倒排索引的建立的程序分析(2)
2009-02-28 10:22
363 查看
面的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 等技术
相关文章推荐
- 北大天网搜索引擎TSE分析及完全注释[6]倒排索引的建立的程序分析(1)
- 北大天网搜索引擎TSE分析及完全注释[6]倒排索引的建立的程序分析(3)
- 北大天网搜索引擎TSE分析及完全注释[6]倒排索引的建立的程序分析(4)
- 北大天网搜索引擎TSE分析及完全注释[2]路过查询处理程序
- 北大天网搜索引擎TSE分析及完全注释[3]来到关键字分词及相关性分析程序
- 北大天网搜索引擎TSE分析及完全注释[2]路过查询处理程序
- 北大天网搜索引擎TSE分析及完全注释[5]倒排索引的建立及文件介绍
- 北大天网搜索引擎TSE分析及完全注释[1]寻找搜索引擎入口
- 自顶向下学搜索引擎——北大天网搜索引擎TSE分析及完全注释[1]寻找搜索引擎入口
- 北大天网搜索引擎TSE分析及完全注释[4]小结
- 黄聪:TSE分析及完全注释[6] 倒排索引的建立的程序分析(转)
- 北大天网搜索引擎TSE分析及完全注释[1]寻找搜索引擎入口
- Linux DM9000网卡驱动程序完全分析
- 天网搜索TSE部分源码分析-url.cpp
- iOS- 如何建立索引实现本地文本搜索引擎,允许容错搜索?
- 使用NOSQL的MongoDB时建立索引需要注意的几点建议和Explain优化分析
- 搜索引擎–elasticsearch python客户端pyes 建立索引和搜索
- 搜索引擎的蜘蛛程序、目录索引工作原理
- 中国象棋程序的设计与实现(十二)--棋盘绘制算法(尽管注释非常详细,完全理解仍有难度)
- solr搜索引擎框架搭建,建立多核(多core),与数据库连接,案例分析及动态配置数据库