需要对249本软件著作实现句子级别全文检索,这些著作均为PDF文件,不使用现有的框架如lucene,自己实现的方法如下:
1、从PDF文件中提取文本,这里的重点是如何最大可能地还原文本。提取之后的文本,一个句子一行保存为文本文件。
2、将所有文本文件合并为一个单一的文本文件,这样,每一个句子就有一个唯一行号。
3、对每一行文本进行分词,建立倒排表,倒排表的格式为:词=包含该词的总行数N=行号1|行号2|行号3|行号N......,如下的例子表示所有文本中,包含ysc的有12行,分别是......:
ysc=12=41883|134145|199585|320658|320661|332585|333873|379773|379775|453341|476179|488165
4、优化倒排表,减少索引文件的磁盘和内存占用,将行号排序,存储递增值。比如如下倒排表:
ysc=12=41883|134145|199585|320658|320661|332585|333873|379773|379775|453341|476179|488165
可优化为:
ysc=12=41883|92262|65440|121073|3|11924|1288|45900|2|73566|22838|11986
5、处理单一检索词,直接读取倒排表,然后处理递增存储的行号。
6、处理多个检索词,合并多个单一检索词的结果,取交集。
7、根据检索到的行号,从第2步建立的单一的文本文件中获取句子。
实现代码如下:
1、
2、
3、