一个简单的全文索引库,包括建立索引到检索索引结果,希望和大家共享 (0分)

  • 主题发起人 主题发起人 SS2000
  • 开始时间 开始时间
S

SS2000

Unregistered / Unconfirmed
GUEST, unregistred user!
不知道大家有没有兴趣?
我想和大家共享,一起完善这个文件全文索引,有兴趣的可给我来信,一起探讨
ccwtt@btamail.net.cn
以下是我的全文索引简单说明
TFullTextIndex = class
private
iIndexFileHandle: integer;
procedure CalculateIndexPos;
function InsertFilePos(CharCode: integer;
FileNo: integer;
Position: integer): Boolean;
function InsertPosition(var PositionList: TList;
Position: integer): Boolean;
function IsTextTogether(Text: string;
FileNo: integer): Boolean;
function ReadOneCharIndex(pCharIndex: PTCharIndex): Boolean;
function ReadOneFileIndex(pCharPosInFile: PTCharPosInFile): Boolean;
function GetCharIndex(CharCode: integer): PTCharIndex;
function GetCharPosition(CharCode: integer;
FileNo: integer): PTCharPosInFile;
function ReadCharIndex: Boolean;
function ReadFileIndex: Boolean;
function SearchChar(CharCode: integer;
var FileNoArray: TFileNoArray): Boolean;
function SearchWord(Word: string;
var FileNoArray: TFileNoArray): Boolean;
public
IndexFileName: string;
FullIndex: TList;
constructor Create(FileName: string='');
destructor Destroy;
override;
procedure FreeIndex;
function ReadAllIndex: Boolean;
//建立索引文件用
function ReadFileToIndex(FileNo: integer;
FileName: string): Boolean;
function WriteIndexToFile: Boolean;
//在索引文件中进行全文检索
function SearchString(Text: string;
var FileNoArray: TFileNoArray): Boolean;
end;
 
软件首次运行,要求用户输入信息,如注册名,单位名只类的。
将次字符串加密为一个字符串,加密酸法可以自己写,并在程序中写响应的逆酸法将结果写入注册表
要求拥护注册,拥护正确注册后,将注册吗写入注册表
每次启动查看注册表相应键值,若是为空或是不对,要求拥护注册,否则,跳国注册界面
 
如果是微软的平台,直接封装微软的全文检索也不错
-----
http://www.8421.org
 
"直接封装微软的全文检索"?
是什么?我怎么没听说过?请详细点,谢谢!(不会是Index Server吧)
 
用它的COM接口,很不错
 
那需要安装Index Server!受很大限制,而且好像只能用在服务器上,不知是否正确?
 
win2k几个版本都有
 
可是很多机器现在都是Win9x呀,而且我的全文索引还可以用在数据库中,
比如Access这样不支持全文索引的数据库,实现数据库的全文索引
 
目前我的全文索引存在一个缺点,就是索引文件太大,索引大约是正文的2-3倍,
想和大家一起共享,完善,降低索引的大小,我个人的能力毕竟是有限的。
 
没有函数实现阿?
 
我有兴趣
 
全文检索的关键就是分词表,用词做key建立索引,
我看你的好象是“字”索引呀。
 
to xusong168:
我用的确实是字索引,而不是词索引
function InsertFilePos(CharCode: integer;
FileNo: integer;
Position: integer): Boolean;
函数是用于记录索引在文件中的位置,以达到写文件的时候顺序写入,避免你所谓的“插入”。
其实建立索引是一次性的,效率不是很重要,重要的是查询速度,那才是最关键的
 
"字索引"的话,检索的时候开销不是很大?
毕竟很少只查一个字。如果查2个字,就要2倍的时间。
 
开销不是这样的计算的.因为词的数量远大于字.所以查两个字的时间未必多于一个词
 
呵呵,我可不敢让你替我做。我只是想把我的这个给大家用,也就是给你用,如果
在用的过程中有什么地方优化了,增加功能了,可以再返给我,我们一起来把它做
得更好。如果你用不着全文检索,就算了,谢谢你的好意。
不过,如果你想和我合作,我还有别的东西可以一起做,不知道你是否感兴趣?
 
假如用在“大富翁”离线浏览器上的话
我查一个每篇都有的词,比如是“回答”“答案”什么的,你那个要多大开销呀!
你要把“回”“答”的索引分别取出来,然后取交集,然后把每篇文章扫描一遍,
以便确定“回”后面紧接着有个“答”。
 
xusong168,你真聪明,确实要先交集,再判断是否是一个词.
象你说的那个开销,当然会很大,我没有测试过,只测试过6000篇文章,
如果查找一个全部文章都有的词,我的 PII 300 256M内存,大约需要0.1-0.2秒
如果你不需要全文检索,就不用麻烦你优化了,那样就失去了我的本意
 
我本想帮你改善你的程序,看来你不需要,那就算了。
我也有可能写一个全文检索的引擎。
 
后退
顶部