TIFF IFilter无法正确读取VARBINARY列中的文本

时间:2010-08-22 02:49:25

标签: sql-server-2008 ocr windows-server-2008-r2 full-text-indexing

link text我想在SQL Server 2008中使用内置于Windows 2008 Server R2的TIFF IFilter和全文搜索...也是R2。

我已经通过服务器管理器安装了过滤器,并更新了“强制TIFF IFilter为TIFF文档中的每个页面执行OCR”计算机配置中的本地组策略设置 - >管理模板 - > OCR为“已启用。”

我还创建了一个全文目录和一个名为“FileData”的表,如下所示:

CREATE TABLE [FileServer].[FileData](
 [FileDataId] [int] IDENTITY(1,1) NOT NULL,
 [FileGUID] [uniqueidentifier] ROWGUIDCOL  NOT NULL,
 [Data] [varbinary](max) FILESTREAM  NOT NULL,
 [Extension] [nvarchar](100) NULL,
 [Filename] [nvarchar](256) NULL,
 [Path] [nvarchar](256) NULL,
 CONSTRAINT [PK_FileData_FileDataId] PRIMARY KEY CLUSTERED 
(
 [FileDataId] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY] FILESTREAM_ON [FILES],
 CONSTRAINT [UX_File_FileGUID] UNIQUE NONCLUSTERED 
(
 [FileGUID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY] FILESTREAM_ON [FILES]

GO

SET ANSI_PADDING OFF
GO

ALTER TABLE [FileServer].[FileData] ADD  CONSTRAINT [DF_FileData_FileGUID]  DEFAULT (newid()) FOR [FileGUID]
GO

ALTER TABLE [FileServer].[FileData] ADD  CONSTRAINT [DF_FileData_FileData]  DEFAULT (0x) FOR [Data]
GO

当我将文件插入该表格时,如PDF或文字DOC,我可以稍后使用全文搜索命中文件中的关键字:

我制作了一个巨大的TIFF文件,文本非常清晰(1024 x 768 ...约12个单词)并将其导入到FileData表中。我可以找到其中的每一个字。

SELECT [Path], [Filename], [Data]
FROM [FileServer].[FileData]
WHERE FREETEXT(*, 'Jason') and FREETEXT(Extension, 'tif');

但是,当我使用“真实”TIFF文件(如制造商的数据表)时,我会在搜索关键字时获得ZERO结果。我不知道为什么,并且没有太多关于SQL Server的在线故障排除。

我尝试用各种压缩保存.TIFF文件,没有压缩等等......我只是没有运气。我的测试文件中的文字是CRYSTAL清晰但仍然非常大。我无法想象文件清晰度是问题所在,尽管我认为这是可能的。

为了让你有比较的东西,我拍摄了以下两张图片并导入它们:

WORKING SAMPLE FILE BROKEN SAMPLE FILE

工作样本的结果非常好。这些是全文索引中工作示例的关键字: $ 3.50 © 0004 08 1989年 2010 21 21时35分42秒 235 282 3116 3702 40 48109 89 盛产 吸收 抽象 伴随着 后天 法案 行动 好处 机构 算法 算法 已经 量 阿姆斯特丹 分析 安 出现 应用 乔木 arnficioj artficia1 分配 B.V. 基于 基础 布克 旅 桶 建造 BV 功能 小心 改变 特点 跳棋 分类 classtfier 关闭 认知 比较 竞争 复杂 复杂性 复杂 电脑 面对 迷惑 考虑 持续 不断 一直 做作 信用 治愈 D.E. 数据 德 正经 定义 定义 设计 设计 制定 发现 讨论 烦扰的 中 生态 经济 EECS 功夫 爱思唯尔 文件结束 工程 环境 环境 呃 甚至 事件 例 展示 经验 表达 现存 扩展 面对 面孔 可行 文件 射击 第一 流 以下 格式 游戏 生成 通用 遗传 给 目标 戈德堡 好 holiadd 荷兰 然而 假设 图片 沉浸 免疫的 撞击 隐式 不精确 信息 情报 利益 干预 介绍 不相干 J.H. JH 日志 磅。 大 磅 学习 学习 寿命 长 机 哺乳动物 哺乳动物 哺乳动物 大规模 信息 MI 密歇根州 新 nn0004 nn08 nn1989 nn2010 nn21 nn235 nn282 nn3116 nn3702 nn3d5 $ nn40 nn48109 nn89 吵 北 号 小说 新奇 获得 经常 一 操作 选项 本来 外 拥有 纸 平行 通过 图案 清偿 允许 永动的 永 玩 播放机 播放 可能 漂亮 问题 提供 出版者 出版商 很快 随机 很少 真实 实际 加强 反复 转载 要求 视网膜 评论 修改 机器人 规则 规则 科学 序列 套 显著 简单 只是 小 疏 系统 系统 标记 技术 理论 雷神 斗嘴 时间 tt2135 两次 曲折 二 一般 美国。 大学 上 我们 美国 视觉 第一卷 无 奇迹 世界

但破碎样本的结果只是......好吧,空缺。实际的TIFF图片中没有一个单词: 08 2010 21 21时49分22秒 文件结束 文件 格式 图片 nn08 nn2010 nn21 标记 斗嘴 tt2149

如果有人对接下来的尝试有任何想法,我会全力以赴。

4 个答案:

答案 0 :(得分:1)

尝试将非工作图像转换为黑白图像,并查看是否可识别更多单词。

<强>加

尝试使用IrfanView(或任何图像工具)将第二张图像的DPI设置为300.然后再试一次。

显然,这些故障排除步骤并非永久解决方案,它们只是帮助隔离问题。

答案 1 :(得分:1)

rwong是对的。您需要隔离问题。

并非所有OCR引擎都可以处理Color TIFF图像并且更喜欢B / W.我猜测OCR引擎甚至没有处理你的非工作页面,只是发出了一个你看不到的错误信息。

  1. 如上所述,尝试将文件另存为黑白TIFF图像。
  2. 将文件另存为JPEG并尝试将图像识别为JPEG。
  3. 我通过我的OCR运行了非工作图像,并且能够正确提取大部分文本,因此解决方案不是主要问题。

答案 2 :(得分:1)

嗯,事实证明实际问题是图像的尺寸。 ITFF IFilter中的OCR甚至没有试图处理它......太大了。我必须通过反复试验发现这一点,并且找不到任何说明传入TIFF的最大大小/ DPI的文档。有人知道这些规格吗?本文似乎有一些信息:support.microsoft.com/kb/837847但是特定于Sharepoint,我没有时间搞乱设置以查看它是否有效。另外,我真的需要删除大小上限。那里的想法?

答案 3 :(得分:0)

我找到了一些有趣的东西

我使用C#do

                    Image tiffFile = Image.FromFile(TiffPath);

                    resultFilePath = Path.Combine(tempFolder, Path.GetFileName(TiffPath));

                    tiffFile.Save(resultFilePath);

并使用把新的tiff文件放在数据库中,这是工作,我不知道为什么,但解决了我的问题