文本检索系统-7:软件和数据

本文介绍了一个文本检索系统的实现,包括库构建、查询处理和实用工具的使用。通过处理《国王詹姆斯圣经》和荷兰史泰登Vertaling圣经,展示了文本清理、索引构建和高效查询的能力。

问候,

介绍

上周,我有点忙于准备本系列文章的这一部分。 抱歉

为了那个原因。 本文部分总结了“文本处理”文章系列。 的

附件包含完整的源代码,前面已经解释过

文章部分。 下载它,将资源提取到某个地方并进行查看。

可以找到我一直在使用的数据

在这里 。 有

找到两个zip文件:

  • kjbible.zip
  • svbible.zip
第一个zip文件包含《国王詹姆斯》圣经中的所有书籍; 的

第二个zip文件包含荷兰史泰登Vertaling中存在的所有书籍

圣经。 下载它们并解压缩它们,最好在单独的目录中。

现在该看一下此文本处理文章的全部内容了。

编译源文件

所有源文件都存储在其正确的目录中,对应于

定义它们的包。 我不会解释你

应该编译一切; 您现在应该知道这一点。 只需编译

一切,您就在做生意。

创建库

在类目录中,您可以找到两个小的简单实用程序

整个库构建器框架。 该实用程序可以在

默认软件包。 这些实用程序名为MakeKJib.class和MakeSVLib.class。

我想你可以猜到他们在做什么。

该实用程序采用三个参数:

  • -i存放单独的.txt文件的目录。
  • -o应该将创建的libraray存储在其中的名称(和目录)
  • -n创建的库的名称。
最后一个参数是可选的,并且为库指定了一个明智的名称

如果您没有明确给自己起个名字。

例如,假设您已经存储了国王詹姆斯圣经的.txt文件

在c:\ kj \ text; 假设您希望将库以以下名称存储:

c:\ kj \ lib \ kjbible.txtlib。

这是您如何构建它:


java -cp . MakeKJLib -i c:/kj/text/ -o c:/kj/lib/kjbible.txtlib 
请注意,目录已经存在,并且还要注意尾随

输入目录的斜杠字符。

片刻之后,您应该看到以下输出:


King James Bible [15267, 15232, 3, 82, 1352, 36133]
build time: 7931ms 
构建时间不需要解释:这是我笔记本电脑上花费的时间

读取所有文件并构建整个库。

该库的默认名称是“ King James Bible”。 以下数字

名称具有以下含义:

  • 不重复字数
  • wordMap索引中唯一词的数量
  • 组数
  • 书数
  • 章数
  • 段落数
如您所见,从索引中滤除了15267-15232 = 35个“噪声”词。

有关所有内容的概述,请参见前面的文章各部分。

现在我们在c:\ kj \ lib \ kjbible.txtlib中有一个压缩库

如果要为荷兰史泰登Vertaling创建图书馆,只需遵循

相同的步骤。 该圣经的默认名称是“ Staten Vertaling”。

因此,库有一个名称,它以您喜欢的任何名称存储在文件中。

两种圣经的确切大小是:

  • 国王詹姆斯圣经:2,987,979字节
  • 史泰登(Verten)圣经:3,149,545字节
荷兰语版本要大一些; 这是其统计信息,如

构建器实用程序:


Staten Vertaling [23141, 23096, 2, 82, 1370, 37235]
build time: 6799ms 
如您所见,有更多独特的词,但只有两组:旧约

和新约。 国王詹姆斯圣经有一个单独的小组

外阴(有关这些书的说明,请参阅前一篇文章部分)。

未压缩的原始文本的大小为:

  • 国王詹姆斯圣经:5,387,972字节
  • 史泰登(Vertening)圣经:5,577,169字节
大小由“ dir”命令报告。 如您所见,创建的

库比原始原始文本小很多,而

库包含其他非常有用的索引。

让我们玩一下这些库:

RunLib实用程序

源代码中存在的第三个实用程序是RunLib实用程序; 它打开

一个库并接受用户的查询。 它将查询提供给库,

取回查询,询问结果并显示它们。 这是这样

要使用kjbible.txtlib来启动实用程序:


java -cp . RunLib c:/kj/lib/kjbible.txtlib 
该实用程序从加载的库中打印简单统计信息并提示

您查询。 如果您想玩荷兰史泰登Vertaling圣经

相反,很明显该怎么做。

如果您没有提供库名称,或者提供的库名称不正确

名称这个简单的实用程序只是在打印出堆栈跟踪后就消失了。 没门

对图书馆本身造成的任何伤害。

查询

该实用程序将打印出“ query:”提示。 让我们给它一个愚蠢的查询两次:


query: computer
query time: 90ms
results: 0
query: computer
query time: 0ms
results: 0
query:  
我问詹姆斯国王圣经中是否有“计算机”一词。 明显

不是,但是请注意,第一个查询在我的笔记本电脑上花费了90毫秒

而第二个相同的查询花费的时间少于Millisecod; 那是因为

第一次大多数类仍然需要加载。 当第二

已发出查询,所有类均已加载。 部分速度增加

是因为热点和jit编译器找到了代码并决定进行编译

将其转换为原始机器代码。

让我们给它一个明智的查询:


query: God & devil
New Testament    Luke    4    2    And the devil said unto him, If thou be the Son of God, command this stone that it be made bread.
New Testament    Acts    10    37    How God anointed Jesus of Nazareth with the Holy Ghost and with power: who went about doing good, and healing all that were oppressed of the devil; for God was with him.
New Testament    Ephesians    6    10    Put on the whole armour of God, that ye may be able to stand against the wiles of the devil.
New Testament    James    4    6    Submit yourselves therefore to God. Resist the devil, and he will flee from you.
New Testament    I John    3    7    He that committeth sin is of the devil; for the devil sinneth from the beginning. For this purpose the Son of God was manifested, that he might destroy the works of the devil.
New Testament    I John    3    9    In this the children of God are manifest, and the children of the devil: whosoever doeth not righteousness is not of God, neither he that loveth not his brother.
Apocrypha    Tobit    6    16    And the devil shall smell it, and flee away, and never come again any more: but when thou shalt come to her, rise up both of you, and pray to God which is merciful, who will have pity on you, and save you: fear not, for she is appointed unto thee from the beginning; and thou shalt preserve her, and she shall go with thee. Moreover I suppose that she shall bear thee children. Now when Tobias had heard these things, he loved her, and his heart was effectually joined to her.
query time: 441ms
results: 7 
因此,《圣经》中有七个段落,两个词

其中有“上帝”和“恶魔”。 让我们看看这个查询的作用:


query: !(God & devil)
... lots of output here
query time: 30ms
results: 36126 
好吧,这是有道理的:有七个段落,分别带有“上帝”和“

里面有“恶魔”,没有36126段。 有36133

总共有几段,所以加起来很好。 请注意,查询仅花费了三十

毫秒。

我们已经知道这本圣经不包含“计算机”一词,让我们看看

如果包含“设备”或“设备”:


query: =/device(s?)/
... quite a bit of output
query time: 510ms
results: 36
query:  
完成这36个结果需要510毫秒; 那是因为常规

表达式查询必须遍历所有文本,即它们不能

只需查询索引以获取结果。

但是值得注意的是,他们当时确实了解设备;-)

在编写这个小工具之前,我检查了那些圣经是否

包含“退出”一词; 他们没有,所以我决定如果用户输入

退出实用程序的单词“退出”。 尼斯和方便。 随时更改

实用程序和/或构建器和库代码的来源; 您可以

如果您愿意,甚至可以围绕它构建一个不错的GUI。

结束语和致谢

本文部分完成了“文本处理”文章系列。 我们已经看到

必须完成肮脏工作的处理器和制造商零件,即

清理原始(有时结构不一致的)文本。 图书馆

本身是干净的软件; 为了方便,它甚至可以序列化。

这些查询提供了相当复杂的功能。 我们刚刚看到了一点

本文中的部分内容; 阅读本文的前一部分以获取完整的信息

查询子系统提供的描述。

再次感谢Prometheuzz提供了必要的数据/网站空间; 谢谢!

并感谢已故的德克(Dirk)向我捐赠了他的旧台式机,

否则我永远都不会开发文本处理引擎,因为我没有

大量的连贯的文字可以玩。

我会为下一篇文章做些准备(系列?)。 如果您阅读过

完整的系列并下载了代码,您会觉得有趣,紧凑,

存储在计算机磁盘上的功能非常强大。 下周见

亲切的问候,

乔斯

From: https://bytes.com/topic/java/insights/702041-text-retrieval-systems-7-software-data

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值