`
sealbird
  • 浏览: 584033 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

clucene 读源码记录

阅读更多
0\ iconv 的使用http://www.gnu.org/software/libc/manual/html_node/iconv-Examples.html#iconv-Examples
1\ TestUtf8 中的 测试把GBK中的数据转换为unicode,然后索引
void _Index(CuTest *tc, IndexWriter* ndx,char* file){
    char path[CL_MAX_PATH];
    TCHAR tlang[20];
 
 
	strcpy(path,clucene_data_location);
	strcat(path,"/utf8text");
	CuAssert(tc,_T("Utf8 directory does not exist"),Misc::dir_Exists(path));
	strcat(path,"/");
	strcat(path,file);
	/*strcat(path,"_utf8.txt");*/
	strcat(path,"_gbk.txt");

	CuAssert(tc,_T("Language file does not exist"),Misc::dir_Exists(path));
	
	STRCPY_AtoT(tlang,file,CL_MAX_PATH);

    Document doc;
	doc.add(*Field::Keyword(_T("language"),tlang));	   
	
	jstreams::FileReader* fr = new jstreams::FileReader(path, "GBK");

  //  StandardAnalyzer analyzer;
 //   TokenStream* stream = analyzer.tokenStream(NULL, _CLNEW CL_NS(util)::Reader(fr,true));

	doc.add(*Field::Text(_T("contents"), _CLNEW CL_NS(util)::Reader(fr,true) ));
	ndx->addDocument(&doc);
  }

2\ clucene 中util 库代码中的FileInputStream,一个从文件中读出数据填充到缓存中方法 
int32_t FileInputStream::fillBuffer(char* start, int32_t space) {
    if (file == 0) return -1;
    // read into the buffer
    int32_t nwritten = fread(start, 1, space, file);
    // check the file stream status
    if (ferror(file)) {
        error = "Could not read from file '" + filepath + "'.";
        fclose(file);
        file = 0;
        status = Error;
        return -1;
    }
    if (feof(file)) {
        fclose(file);
        file = 0;
    }
    return nwritten;
}

3\
有关的

template <class T> template <class char>
void InputStreamBuffer<T>::setSize(int32_t size) {
    // store pointer information
    int32_t offset = (int32_t)(readPos - start);

	// allocate memory in the buffer
    if ( start == 0 )
		start = (T*)malloc(size*sizeof(T));
	else
		start = (T*)realloc(start, size*sizeof(T));
    this->size = size;

    // restore pointer information
    readPos = start + offset;
}


4\GBK转UCS-2码,然后索引
 iconv_t converter = iconv_open("UCS-2-INTERNAL", "GBK");
	//iconv_t converter = iconv_open("UCS-2-INTERNAL", "UTF-8");
	// iconv_t converter = iconv_open("UCS-2-INTERNAL", "ASCII");
	 
	 const char *inbuf ="我喜欢你欧阳";
     size_t inbytesleft = strlen(inbuf);
	 wchar_t* start=(wchar_t*)malloc(inbytesleft*sizeof(wchar_t));
	 memset(start,0,inbytesleft*sizeof(wchar_t));
     size_t outbytesleft = sizeof(wchar_t)*inbytesleft;
     char *outbuf = (char*)start;
     size_t r = iconv(converter, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
     iconv_close(converter);
 doc.add(*Field::Text(_T("contents"),start));



4\从gb2312转 utf8 ,再从utf8转 ucs-2
//代码转换:从一种编码转为另一种编码
int code_convert(char *from_charset,char *to_charset,const char *inbuf,size_t inlen,char *outbuf,size_t outlen)
{
	iconv_t cd;
	int rc;
	const char **pin = &inbuf;
	char **pout = &outbuf;

	cd = iconv_open(to_charset,from_charset);
	if (cd==0) return -1;
	memset(outbuf,0,outlen);
	if (iconv(cd,pin,&inlen,pout,&outlen)==-1) return -1;
	iconv_close(cd);
	return 0;
}
//UNICODE码转为GB2312码
int u2g(char *inbuf,size_t inlen,char *outbuf,size_t outlen)
{
	return code_convert("utf-8","gb2312",inbuf,inlen,outbuf,outlen);
}
//GB2312码转为UNICODE码
int g2u(char *inbuf,size_t inlen,char *outbuf,size_t outlen)
{
	return code_convert("gb2312","utf-8",inbuf,inlen,outbuf,outlen);
}

 iconv_t converter = iconv_open("UCS-2-INTERNAL", "UTF-8");

	 //gb2312码转为unicode码
	 char *in_gb2312="我喜欢你欧阳";
	  size_t tmpleng = strlen(in_gb2312);
	// char out[500];
	 
	 char* out=(char*)malloc(3*tmpleng*sizeof(char));
     int  rec = g2u(in_gb2312,strlen(in_gb2312),out,3*tmpleng);
	 const char * inbuf=out;
	 size_t inbytesleft = strlen(inbuf);
	 wchar_t* start=(wchar_t*)malloc(inbytesleft*sizeof(wchar_t));
	 memset(start,0,inbytesleft*sizeof(wchar_t));
     size_t outbytesleft = sizeof(wchar_t)*inbytesleft;
     char *outbuf = (char*)start;
     size_t r = iconv(converter, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
     iconv_close(converter);

	 doc.add(*Field::Text(_T("contents"),start));
分享到:
评论

相关推荐

    CLucene源代码-Lucene的C++版本

    CLucene的源代码提供了深入理解信息检索和搜索引擎工作原理的机会。开发者可以查看和修改源代码,了解索引构建、查询解析、搜索执行等核心流程,这对于开发自定义的搜索引擎或扩展现有功能非常有用。通过学习CLucene...

    搜索引擎 CLucene 源代码

    通过 CLucene 的源代码学习,你可以深入理解全文检索的工作原理,掌握索引构建和查询优化的技术。对于想要提升 C++ 应用程序搜索功能的开发者来说,研究 CLucene 源代码是十分有益的。同时,你还可以了解到如何在 ...

    CLucene 最新源码

    此外,"吐血推荐"表明这个源码具有很高的学习价值,可能是由于其代码质量高、注释清晰或实现了某些创新特性。因此,对于想要在C++环境中开发全文搜索功能的开发者来说,这份源码是一份不可多得的学习资源。 在...

    C++搜索引擎Clucene源码

    《C++搜索引擎Clucene源码解析》 在信息技术飞速发展的今天,搜索引擎已经成为了人们获取信息的重要工具。本文将深入探讨C++实现的全文搜索引擎——Clucene,通过对源码的剖析,来理解其核心概念、设计思想以及实现...

    C++搜索引擎 CLucene源码

    1. **安装与配置**:下载CLucene源码,根据项目需求选择合适的编译选项,进行编译和链接。 2. **创建索引**:使用CLucene API读取文档内容,进行文本分析,并建立索引。 3. **查询索引**:编写查询代码,解析用户...

    clucene源码

    大名鼎鼎的clucene,是lucene的c++ 版; CLucene README ============== ------------------------------------------------------ CLucene is a C++ port of Lucene. It is a high-performance, full-featured ...

    clucene2.3.3.4源码 windows下vs2013工程

    在Windows环境下,使用CMake工具是将CLucene源码转化为Visual Studio 2013兼容工程的关键步骤。CMake是一个跨平台的自动化构建系统,它可以生成各种IDE的项目文件,包括VS2013的.sln解决方案文件。首先,你需要下载...

    clucene源代码

    《C语言实现的Lucene——clucene源代码解析》 Lucene,作为一款著名的全文搜索引擎库,由Java编写,广泛应用于各种信息检索系统。然而,对于C语言开发者来说,使用Java版Lucene可能会面临一些挑战。为了满足这部分...

    clucene中文处理

    这些都需要对Clucene的源代码进行深入理解和修改。 总的来说,"clucene中文处理"是一个综合性的任务,它涵盖了中文分词、索引构建、查询解析、编码处理等多个技术领域。开发者需要对C++编程、自然语言处理、信息...

    CLucene

    CLucene是基于C++语言实现的一个全文搜索引擎库,它是对Java版Lucene的移植,旨在为C++开发者提供与Lucene类似的搜索功能。Lucene是一个广泛使用的开源信息检索库,由Apache软件基金会维护,它提供了丰富的文本分析...

    luceneDemo_pure1aa_DEMO_clucene_

    三、Clucene源码导入 将Clucene的源码文件夹添加到vc6工程中,确保所有头文件和源文件能够被正确引用。注意,Clucene可能依赖一些外部库如zlib和bzip2,需要确保这些库也已正确配置。 四、构建DEMO项目 在vc6中...

    CLUCENE资料合集+代码源码

    这是我学CLUCENE时期整理出来的几个不错的资料,我觉得里面总有一款会适合你,而且你所需要知道的技术里面基本上都是涵盖的,所以可以当作教材或者参考手册使用。(里面有CLUCENE,可以用的)

    Clucene库以及自己封装好的Clucene方法库

    最后,压缩包中的文件`clucene-cored.dll`和`clucene-sharedd.dll`是Clucene库的核心和共享组件,它们包含了Clucene的实现代码。而`MyCluceneDll.dll`很可能是用户封装后的库文件,直接调用这个库可以避免与原始...

    搜索引擎开源代码Clucene-core-0.9.21

    这个压缩包包含了Clucene的核心源代码,对于想要理解搜索引擎工作原理、学习C++编程以及对信息检索技术感兴趣的开发者来说,是一份宝贵的资源。 首先,Clucene是Lucene的C++实现,Lucene是一个广泛使用的全文搜索...

    CLucene结构文档

    CLucene类结构文档 内嵌源代码及各类关系图

    clucene-core-2.3.3.4 cmake可生产vs2005工程

    因此,提供了一个“干净”的版本,即不包含任何个人机器特定设置的源代码,用户需要自行使用CMake来生成适用于他们本地环境的Visual Studio 2005项目。这里提到的“说明文档”很可能是指导用户如何使用CMake来配置和...

    clucene-core-2.3.3.4

    根据错误信息,定位源代码中的问题,进行相应修正。 6. **测试与优化**:成功构建后,进行单元测试和功能测试,确保Clucene-core-2.3.3.4的核心功能正常工作。同时,可以考虑优化代码,提高性能,比如使用预编译...

    clucenes _64位

    - **源码开放**:作为一个开源项目,CLucene允许开发者查看和修改源代码,满足定制化需求。 - **易于集成**:CLucene提供API供其他应用程序调用,方便集成到各种软件项目中。 2. **版本与编译环境** - 版本号:...

    clucene-core lucene c

    总得来说用Lucene来进行建立 和搜索和操作数据库是差不多的(有点像),Document可以看作是 数据库的一行记录,Field可以看作是数据库的字段。用lucene实 现搜索引擎就像用JDBC实现连接数据库一样简单。

Global site tag (gtag.js) - Google Analytics