开源桌面搜索引擎 Terrier 和 imgSeek

IBMdW 发布于 2011/06/03 09:35
阅读 1K+
收藏 4

开源桌面搜索引擎的好处

过去,寻找正确的内容十分容易,从鞋盒里找到正确的软盘就可以了。但那样的日子早已一去不返了。如今,普通的桌面计算机都会包含数千兆、甚至 数太字节的数据!如此多的信息相互关联,再以简单的层级结构组织文件夹和文件可能不再能够帮助您找到您需要的文件。需要有这样一种工具,可以智能地索引您 的文件并帮助您在正确的上下文环境中定位这些文件。Google 等已经创建了商业的桌面搜索引擎。不过,现在也有一些开源的桌面搜索引擎可用。

接下来,我将着重介绍两种开源桌面搜索引擎:imgSeek 和 Terrier,这两种工具在搜索图像文件以及包含了文本以及对图像的引用的 XML 文档时十分方便。我可以使用一个草图或是导入一个图像来从数百个不相干的图像中查询类似的图像 — 类似于从图像堆中寻找一两个图像。搜索结果可能会返回重复的图像,只是文件名不同。除了按内容查询之外,还可以按元数据关键字,比如文件名、描述和创建日 期来查找文件。

Terrier

有了 Desktop Terrier,我就可以将我的搜索缩小到查找包含一个或两个单词,且引用我在搜索字段内指定的图像的文档。我有几个搜索选择。在搜索字段内,我可以指定 文档中必须包含的一个单词以及不能包含的另一个单词。如果一个单词比另一个单词更为重要或更具相关性,我就会为该单词分配一个权重。包含重要单词的文档在 搜索结果中首先出现。一般,我对结果都比较满意。Terrier 也提供批处理模式和交互模式。

imgSeek

imgSeek 的桌面版本是一个免费的开源可视相似性项目集合。我可以将此查询表述为我所绘制的一个草图或我提供的另一个图像。imgSeek 使用的算法是此查询和数据库图像的多尺度小波分解。如果您对将一个基于内容的图像数据库集成到一个与图像相关的网站感兴趣,也可以使用服务器端版本。

图 1 显示了首次初始化时,其桌面版本的主页。


图 1. 主页: Options>Viewing
屏幕快照显示了 imgSeek 内的查看选项,内含一个'幻灯片放映延时'以及缩略图平滑

在启动 imgSeek 时,可以改变 imgSeek 出现在其主页上的方式。如果想要将按图像内容搜索作为主页,可以单击 Search,然后单击 Image。退出 imgSeek 并重新启动。图 2 显示了结果。


图 2. imgSeek 主页:按图像内容搜索
屏幕快照显示了按图像内容搜索,允许您导入一个示例图像或绘制一个草图

按图像内容搜索

您可以选择按图像内容、关键字或组进行搜索。要按内容进行搜索,必须首先导入一个图像或绘制一个草图,然后用它来从一个集合中查询或呈现图像。如果目前尚没有一个这样的集合,转到 Add 选项卡来创建一个集合,然后再将图像添加到其中。

处理完集合后,可以返回到 Search by Image 内容选项卡以便从此集合导入一个图像或创建一个草图。图 3 显示了在进行绘制时,可以从调色板选择颜色。


图 3. 一朵花的草图
屏幕快照显示了一朵具有粗略的红色轮廓线的花朵、一个画笔大小的滑块和一个颜色选择器

您可以调整草图的画笔大小,将滑块滑到左边缩小尺寸,滑到右边扩大尺寸。随着画笔大小的增加或减小,含有您从面板中选择的颜色的文本框也会增加或减小。可以保存这个草图以备日后查看,也可以把它丢到垃圾箱或重置草绘历史。

然后,转到 Results 框单击查询按钮(最左侧)以迅速查找集合内的类似图像。图 4 显示了该查询检索到的图像具有与 图 3 内的草图类似的形状和颜色。百分比形式的权重代表的是相似度。


图 4. 花的结果图像
屏幕快照显示了与草图相匹配的三个图像结果并以本分比给出了相似度

现在,让我们看看 图 5 所示的这个用较大的画笔绘制的草图。选中的颜色框的大小要大过 图 3 中所示的。


图 5. 用较大的画笔绘制的草图
屏幕快照显示了用较重的线条绘制的相同的花的草图

图 6 中所示的结果与 图 4 中的不同。


图 6. 花的不同的结果图像集
屏幕快照显示了具有相似度百分比的另一组图像结果

图 4图 6 中,由搜索查询检索到的第一个图像被标记了最高的权重。分配给图 6 内的第一个图片的权重比图 4 中的权重要高一些,这是因为草图与从集合检索到的图像之间在形状和颜色上的相似度有稍许提高。

图 4 中的第二个图像是 图 6 中的第一个图像。这是因为草图(用较大的画笔绘制)与此图像的相似性程度有所改变。图 6 内花的照片没有显示在图 4 内。图 5 内的草图的形状和厚度有几分类似于此照片。图 3 内的草图因为纤细致使没能带来图 4 所示的集合内的照片。

构建图像集合

往往需要构建想要搜索和浏览的图像集合。要添加文件,转到 Add。可以设置想要添加或忽略的文件的路径。可以选择提供给集合一个名字或是让系统自动创建一个集合。还可以将该文件限制为某种文件、维度和扩展。

若能激活警笛音来了解 imgSeek 在何时完成添加文件或元数据提取,这会很有帮助。可以选择隐藏过程和添加没有扩展的图像文件。准备好后,单击 Add 开始过程。

如果想要编辑元数据项,比如作者名,在添加文件之前,应该转到 Tools 菜单。在这里,可以选择是否希望逐个编辑图像元数据,或者是否想要将这些变更应用到之前构建的批处理中的那组图像。还可以通过选择 Tools 下的 Work 批处理编辑器来编辑这个批处理。图 7 显示了在哪里可以找到这个批处理编辑器。


图 7. Work 批处理编辑器
屏幕快照显示了可从中选择此 Work 批处理编辑器的菜单

要填充一个 Work 批处理,可以在想要包括进来的图像上右键单击,然后将其添加到这个批处理。可以向位于系统目录、关键字组合数据库目录的工作批处理进行添加。还可以找到重 复的图像并重命名它们。为了将这些变化存储到元数据,转到 Database 菜单来导出元数据,如 图 8 所示。


图 8. 导出元数据
屏幕快照显示了可从中选择 Exort 元数据的菜单

如果忘记了已经将哪些图像添加到此集合,可以通过转到 Maintenance 菜单,扫描所有目录来寻找新图像。

按关键字的图像查询

可以按关键字而非内容来搜索图像。首先,右键单击 Field 列内的空白,弹出一个小菜单。单击 New 插入 Description 作为第一个默认参数。在 Value 列内键入以描述这个图像。

下一步骤是选择逻辑 AND 或 OR 操作符和第二个参数。AND 操作符表明 imgSeek 必须使用第一和第二个参数来查询集合内的图像。OR 操作符表明 imgSeek 可以使用这两个参数内的任何一个进行查询,前提是使用哪个参数来查询此集合均可。

创建第二个参数,然后右键单击 Description 参数(第一个)下的空白部分,然后单击 New parameter。使用下拉箭头显示所有参数的列表,如下所示。

  • Description
  • Dimensions
  • Filename
  • File size
  • Format
  • Modify Date
  • Database Date
  • Mounted(只限Linux®)

选择后,描述这个参数。如果不太确认如何描述每个参数,可以转到 Maintenance 菜单查看图像元数据。您会注意到关键字参数列表仅仅是图像元数据的一小部分。

按相似性进行图像浏览

可以按文件、组、系统和相似性进行浏览。按文件和组进行浏览不是什么新鲜事。如果您能记起在何处放置了文件,那么就可以直接浏览到包含了这些文件的那个目录。

在对这个图像与另一个图像进行相似性的对比之前,需要转到 Add 选项卡来将这些图像添加到一个集合。完成后,可以返回到 Similarity 选项卡并指出是否想要按日期或文件名浏览图像。

如果想要浏览的文件有数百个,那么更为高效的方法是先按相似日期和文件名对文件进行分组,然后选择想要浏览的组。为了生成相似组,单击 Group。如果集合太小不便浏览,可以尝试向集合添加更多图片。可以使用相邻 Group 按钮的 Export 按钮来导出相似性组作为逻辑组。

文本桌面搜索引擎:Terrier

若您对图像查询结果还算满意,那么接下来的一步是使用 Terrier 来搜索包含了这些图像的 XML 文档。与 imgSeek 不同,需要从命令行提示符启动 Terrier 的 GUI。请确保已经在计算机上安装了 Java™ 的正确版本。

在它的主窗口,Terrier 只显示了两个选项卡:Search 和 Index。当首次运行 Terrier 时,它聚焦于 Index 选项卡并显示了一个对话框(参见 图 9),询问您是否想要 Terrier 索引它自己的文档或您所选择的文档。


图 9. 首次运行 Terrier 出现的对话框
屏幕快照显示了索引其自身的文档的 Yes/No 选项

选择想要索引的 XML 文档的文件夹。当重启 Terrier 时,它会将聚焦转移到 Search 选项卡。可以在查询之前,转到 Index 选项卡来重新索引您的文档。

索引文件

在 Index 选项卡上,选择文件夹以弹出一个窗口,在其中指定 Terrier 应该索引哪些文档。完成后,单击 OK 返回到 Index 选项卡并开始创建索引的过程。

Terrier 并不支持递增索引。每次创建一个索引,Terrier 都将删除旧的索引并从头索引所有指定的文件夹。

在窗口底部可以观察索引过程。Terrier 完成索引后,会将焦点转到 Search 选项卡。

Terry 查询语言

Search 选项卡非常简单,只包含用来输入 Terrier 查询的一个字段。可以使用此查询语言来搜索单个单词或者是词组内的单词。如下的一些例子展示了如何对包含了用 imgSeek 找到的图像的文档进行查询。

示例 1:word1 word2

此查询会返回包含一个或两个单词的文档,但并不总是会返回同时包含这两个单词的文档。让我们假设第一个单词是 boat,第二个单词是 imgboat1.png。搜索结果可能会显示包含了 boat 但不包含 imgboat1.png 的一个文档。第二个文档则包含了 imgboat1.png,而不包含 boat。第三个文档包含了这两个单词。

搜索结果可能会以随机的顺序显示这些文档。这有助于辨别哪些文档包含了被错误标签的图像。

示例 2:word1^2.3 word2

第一个单词的权重提高了 2.3,而第二个单词的权重则仍保持为 1。在键入查询时,不要忘记在单词和权重值之间插入一个 ^ 符号。搜索结果会返回总是包含第一个单词但不一定包含第二个单词的那些文档。搜索结果还会首先显示包含了加权词的文档。

与第一个例子中的文档不同,包含了权重为 2.3 的 boat 的文档总是会显示在结果的顶部。而这些文档中不一定会包含对此 boat 图像的引用。

为了进一步完善搜索,在搜索字段输入第三个单词,比如 flower。为此单词分配的权重可以高于或低于分配给第一个单词的权重。权重越高,比如第一个单词 7.2,第三个单词 2.5,那么包含第一个单词的文档首先出现在搜索结果内的可能性就越高。

示例 3:+word1 +word2

也可以通过输入加号作为单词前缀来获得包含了这两个单词的文档。这两个单词可以处于文档的单独位置。它们也不必如同在一个词组内那样相邻。比如,flowerimgflower1.png 处于不同的位置,但 flower 可能与 imgflower1.png 不相关。在一个文档内,此图像可能会被标记为 Flower,而在这个相同文档的不同版本,此图像也可能会被标记为 Rose

示例 4:+word1 -word2

在寻找包含了第一个单词而不包含第二个单词的文档时,就可以参照这个示例。可以通过在第一个单词前面放上加号,在第二个单词前面放上减号来达到这个目的。如果一个文档既包含第一个单词,也包含第二个单词,那么这个文档将不会出现在搜索结果内。

比如,如果搜索三个单词: +boat +imgboat1.png-canoe,得到的将是包含了 boatimgboat1.png 但不包含 canoe 的文档。

示例 5:"word1 word2"

也可以获得包含了同一个词组内的两个单词的文档。这些单词不会如第三个例子所示的那样位于文档内的不同位置。为了表明是一个词组,应该将这些单词置于双引号之内,比如 "Flower picture"

示例 6:phrase1 -word1 word2^3.5

假设,需要放入第四个单词来查询包含了一个词组、一个权重为 3.5 的单词,但不包含第二个单词的文档。比如,寻找包含 "图 7. This is the picture of a flower"、不含 boat 但包含权重为 3.5 的 stone 的文档。

结束语

那些必须在规定期限内从数以千计的文件堆中找到并展示信息的用户会发现 imgSeek 和 Terrier 十分有用。这两个工具具有操作系统局限于或者不具备的功能。imgSeek 可以按内容、关键字和相似性搜索图像。Terrier 则可以为要在文档内容内搜索的单词赋予权重。

本文转自 IBM developerWorks
加载中
返回顶部
顶部