错误博客( cuowu.com )发布于 2019-06-10 18:47:30

信息检索文本转换问题

信息检索文本转换问题。

搜索引擎用于在文本中进行搜索。遗憾的是,计算机中文本是以几百种相互之间不兼容的格式进行存储的。标准的文本格式包括原始文本、RTF、HTML、XML、Word、ODF(开放文档格式)以及PDF(便携式文档格式)。还有几十种不常用的字处理器使用它们自己的文件格式。但是,文本文档并不是需要搜索的唯一类型的文档;其他类型的文件中也含有重要的文本,如PowerPoint讲演稿和Excel电子表格。除了所有的这些文档格式,人们通常还希望搜索一些旧的文档,也就是说搜索引擎可能还需要支持过时的文件格式。对于商业化的搜索引擎来说,支持上百种文件类型是很常见的。

处理一个新的文件格式最常见的方式是使用一个转换工具,将文档中的内容转换成标签文本格式,如HTML或XML。这些格式很容易解析,并支持一些重要的格式信息(如字体大小)。在主要的网络搜索引擎中,可以看到这种文本格式。如果打算搜索PDF文档,但当你点击搜索结果下方的“Cached”链接,会得到对于该文档搜索引擎给出的视图,该视图通常是将原始文本转换为HTML的结果。对于一些文档类型,如PowerPoint,搜索引擎缓存的版本几乎是不可读的。幸运的是,可读性并不是搜索引擎关注的重点。搜索引擎涉及的主要问题是,将数据备份到搜索引擎中,以便能够建立索引并被检索到。然而,将数据转换成为HTML格式有一个优点:为了查看一个文档,用户不需要有专用的能够识别该文档文件格式的应用程序。对于过时的文件格式,这一点很重要。

文档可以转换为纯文本,而不是HTML或XML,但这么做会将一些重要的信息从文档中剥离出去,如标题、字体大小等,这些信息对索引器来讲是很有价值的。正如我们将要看到的,标题和黑体文本中,可能含有准确描述文档内容的词,在计算分值的时候我们希望对这些词进行特殊的处理。只有对格式信息进行了准确的转换,索引器才能抽取出这些重要的信息。

字符编码

由于字符编码(character encoding)的问题,即便是HTML文件之间也不能很好地互相兼容。在纸面上你所看到的文本是一系列的图形,称为字母(letter)或符号(glyph)。当然,计算机中的文件是一个二进制流,而不是图形的集合。字符编码就是在二进制位和符号之间的一个映射。对于英文来讲,基本的字符编码采用的是1963年就开始使用的ASCII编码。ASCII编码使用7位二进制数对128个字母、数字、特殊字符及控制符进行编码,另外附加1位以字节方式进行存储。对于具有26个字母的英文来讲,这个编码方案很精巧。但是世界上有许多种语言,有些语言有相当多的符号。例如,汉语中有40 000多个汉字,常用字也超过

3000个。用于东亚语言的CJK(中文-日文-韩文)语系,制定了很多不同的2字节编码标准。其他的语言,如北印度语或者阿拉伯语,也有很多不同的编码方案。即便是英文,也不是所有的编码都一致。例如,在大型主机上使用的EBCDIC编码方案与个人计算机上使用的ASCII编码方案完全不同。

在处理中文和阿拉伯语的复杂字符集上,计算机行业的进展很缓慢。直到最近,代表性的方法是使用不同的特定语言编码,有时称为代码页(code page)。每种编码方案中的开始128个数值都保留给英文的字母、标点和数字。大于128的数字都映射到从希伯来语到阿拉伯语中的符号,然而,如果对每种语言使用不同的编码方案,在同一个文档中就不能同时使用希伯来语和日语。同时,文档也不再是自描述的了。只将数据存放在文本文件中是不够的,必须同时记录它所使用的编码。

为了解决混乱的编码问题,人们制定了Unicode编码方案。Unicode是从数字到符号的一个映射,该方案中试图包含所有语言中的所有符号。这样就解决了在单个文件中使用多种语言的问题。遗憾的是,它并没有完全解决二进制编码的问题,因为Unicode是数字到符号之间的映射,而不是二进制位到符号之间的映射。结果导致会有很多种方式将Unicode中的数字转换成符号。其中一些普遍使用的方式包括UTF-8、UTF-16、UTF-32和UCS-2(不推荐该方法)。

编码方案的发展起源于对兼容性和节省空间的需求。用UTF-8对英文文本进行编码时,与ASCII编码方案是一致的。每个ASCII字母只需要一个字节。然而,一些繁体汉字会需要四个字节。为了能够对大多数的语言文字进行编码,也为了减少对西方语言进行编码的长度,折中方案是每个字符用可变的字节数表示,但这样会使得计算字符串中某个字符的数目或者自动跳转到字符串中的随机位置变得更加困难。相比之下,UTF-32(也就是UCS-4)对每个字符都使用4个字节进行编码。这使得在UTF-32编码的字符串中,跳转到第20个字符变得更加容易,即跳转到第80个字节处开始读取。遗憾的是,UTF-32编码的字符串和过去使用ASCII编码的软件不兼容,并且UTF-32编码的文件比UTF-8编码的文件需要四倍的空间进行存储。因此,一些应用程序对国际化文本进行编码的时候使用UTF-32(随机存取显得很重要),但将文本进行存储的时候使用UTF-8编码方案。

表3-1 UTF-8 编码

UTF-8 编码

表3-1给出了UTF-8的编码表。表中左边的列表示十进制数值的范围,最右边的列表示这些十进制数值以二进制方式编码的形式。字符x表示二进制数字。例如,希腊字母p在Unicode中对应数字960,对应的二进制数为 00000011 11000000(十六进制数为3C0)。表中的第二行告诉我们,这个字符在UTF-8中需要用两个字节进行编码。3C0的高五位二进制数落在第一个字节中,接下来的6位落在第二个字节中。该字符最终的UTF-8编码为11001111 10000000(对应的十六进制为CF80)。其中加粗的二进制位与表中的相同,表中的x字符对应的位由Unicode数字的二进制数值进行填充。


2020年错误博客亲测项目系列

错误教程( cuowu.com )专注网推培训、SEO培训和网赚培训,微信/电话:13722793092

关注微信公众号:第一时间获得错误博客最新教程,让我们一起成长!

公众号二维码