利用Minidx Extract-Text Com组件从Word,Xls,Pdf……等文件中读取文本内容

2023-11-08 22:10

本文主要是介绍利用Minidx Extract-Text Com组件从Word,Xls,Pdf……等文件中读取文本内容,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

利用Minidx Extract-Text Com组件从Word,Xls,Pdf……等文件中读取文本内容

By Minidxer | December 31, 2007

 

 

 

不少人对Google,Baidu等搜索引擎可以“找到”你放在服务器上的Word的Doc,Excel的xls以及Pdf等各种文件而感到惊叹不已,也有不少人发来邮件询问我Minidx文件管理器中从各种格式的文件中读取文本内容是如何实现的。Linux平台实现起来比较复杂一些,不过对于Windows用户来说,其实利用微软Ifilter的Indexing service接口,可以比较容易的实现上面的功能。Minidx支持200多种文件格式,其实也是利用了Ifilter的接口。实现的基本原理,就是写一个Com组件,去查找系统中相应文件格式的API接口所在的Dll路径,然后调用抽取文本。

 


 

 

在上面的微软Ifilter中有关于IFilter的基本概念的介绍,这里不再重复,另外在codeproject的Using IFilter in C#中,可以找到C#的实现并且可以下载到源代码。因为性能上的考虑,Minidx文件管理器的这一部分完全利用C++实现,并封装为Com组件,下面主要是对如何通过调用这一Com组件在自己的程序中实现Doc,Xls,Pdf,msg等等文本阅读等功能作一些说明。

 

●Demo压缩包构造(压缩包可以从这里下载)

 

demo_vb.zip———–demo_vb.sln   整个解决方案(solution)文件

 

                     |———demo_vb.suo 用户配置文件

 

          |———demo_vb—-bin——–Debug—-demo_vb.exe   Debug版本目标文件

 

                                                        |———Release—demo_vb.exe  Release版本目标文件

 

                                                |—My Project(忽略)

 

                                                |—obj                       编译生成的临时文件

 

                                                |—demo_vb.vbproj      工程文件

 

                                                |—ExtractText.dll         文本抽取Com组件

 

                                                |—Form1.Designer.vb   Demo的GUI文件

 

                                                |—Form1.resx                资源文件

 

                                                |—Form1.vb                   Demo的源代码文件

 

                                                |—run.bat                      Com组件注册命令

 

●执行Demo

 

①、双击run.bat执行,注册Com组件

 

register

 

②、双击demo_vb\bin\Release或者demo_vb\bin\Debug目录下的demo_vb.exe

 

demo-run

 

③、点“File”,选择对象文件

 

select-english-file

 

④、选中文件,查看抽取文本结果。(下面分别是中日英Word的抽取结果)

 

result-engilsh select-Japanese-file select-Chinese-file

 

注意:抽取文本对象文件需要有读写权限,正在编辑中的文件抽取文本时可能会出错。

 

●Demo代码说明

 

首先当然需要导入Dll组件,下面的代码很简单,也都有注释,应该不难理解,这里不再累述,有什么不明白或者有什么问题的话,可以提出来一起探讨,:)

 

   1:  '-----------------------------
   2:  ' desc: Extract text from selected file
   3:  '-----------------------------
   4:  Private Sub SelectFileDialog_FileOk(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles SelectFileDialog.FileOk
   5:          On Error GoTo ErrH
   6:   
   7:          ' get selected full-path file name
   8:          Dim sFile As String = SelectFileDialog.FileName
   9:   
  10:          ' set file name
  11:          txtFilePath.Text = sFile
  12:   
  13:          ' set ExtractText module
  14:          Dim te As ExtractTextLib.TextExtractor = New ExtractTextLib.TextExtractor
  15:          Dim sText As String
  16:          sText = te.ExtractText(sFile, MAX_EXTRACT_TEXT_SIZE)
  17:          Err.Clear()
  18:   
  19:          'Me.FileLength.Text = Len(sText).ToString()
  20:          Me.ExtractText.Text = sText
  21:   
  22:          Exit Sub
  23:  ErrH:
  24:          MsgBox("Error extracting text from '" & sFile & "' Err=" & Err.Number & "-" & Err.Description & " in " & Err.Source)
  25:      End Sub

工程的DLL和Demo源代码从这里下载,C/C++调用的Demo还在制作中,有兴趣的高手们也可以制作Php,Delphi,C#等各种语言调用的Demo以供分享~~,实际上原理是一样的。有什么问题可以直接在这里留言或者在Minidx帮助论坛发贴寻找帮助。该模块可用于任何商业和非商业的用途,如果你愿意的话,可以发一个邮件给我告诉我这一模块被用在了你的项目中,那么当你取得成功的时候,我也可以向我的朋友们吹嘘一下,当然这不是必需的,:)

 Topics: Minidx相关 | 29 Comments » | 830 views Tags: C++, Com组件, doc, Extract Text, IFilter, indexing service, Minidx, pdf, VB.net, xls, 搜索引擎

 

 

你可能还对下列文章感兴趣:

  • 利用Minidx Extract-Text Com组件从doc,Xls,Pdf……等读取文本内容VC Demo
  • 利用Minidx Extract-Text Com组件封装类的实现
  • 利用Minidx Extract-Text Com组件从doc,Xls,Pdf……等读取文本内容VC2003 Demo
  • SWIG发布1.3.33版本
  • Minidx.RC1.1的中日英版本下载数都已经超过1K了

 

 

 

  1. qinai - 12/31/2007 at 11:41 pm

    看到了你的邮件,令我感动也令我吃惊。不说了,谢谢!

     

    祝新年快乐!以后会常来和你学习,谢谢!

     

     

     

  2. Minidxer - 12/31/2007 at 11:50 pm

    @qinai
    呵呵,兄弟不用客气~~~~

     

     

  3. sorryle - 01/1/2008 at 3:09 am

    不谈技术,只来拜年,新年快乐minidx :)

     

     

  4. Minidxer - 01/1/2008 at 8:47 am

    @sorryle
    谢谢~~~新年快乐sorryle,呵呵

     

     

  5. yiyix - 01/1/2008 at 2:07 pm

    看不懂,先拜年~~~

     

     

  6. Minidxer - 01/1/2008 at 3:22 pm

    @yiyix
    呵呵,拜年拜年~~~

     

     

  7. 有图 - 01/1/2008 at 4:56 pm

    很厉害哦 以后经常来看

     

     

  8. Minidxer - 01/1/2008 at 4:58 pm

    @有图
    谢谢~呵呵,欢迎经常来哦

     

     

  9. tip - 01/2/2008 at 9:39 am

    原来是这样的,hoho
    学习中

     

     

  10. pp - 01/9/2008 at 9:42 pm

    Extract.dll和intero.ExtractTextLib.dll两个dll 是什么关系?
    com组件不提供接口说明,大家不指导如何开发啊

     

     

  11. Minidxer - 01/10/2008 at 12:53 am

    @pp
    可以参照这里:http://blog.minidx.com/2008/01/10/373.html
    intero.ExtractTextLib.dll是编译时生成的,忘记删掉了。

     

     

  12. skybright - 04/14/2008 at 3:51 pm

    我下了个vc2005的源代码 为什么编译的时候有错——————–Configuration: demo_vc – Win32 Debug——————–
    Compiling…
    demo_vc.cpp
    e:\我的文档\demo_vc2005_wrap\demo_vc2005_wrap\demo_vc\demo_vc.cpp(16) : error C2059: syntax error : ‘&&’
    e:\我的文档\demo_vc2005_wrap\demo_vc2005_wrap\demo_vc\demo_vc.cpp(16) : error C2143: syntax error : missing ‘;’ before ‘}’
    e:\我的文档\demo_vc2005_wrap\demo_vc2005_wrap\demo_vc\demo_vc.cpp(16) : error C2143: syntax error : missing ‘;’ before ‘}’
    e:\我的文档\demo_vc2005_wrap\demo_vc2005_wrap\demo_vc\demo_vc.cpp(17) : error C2143: syntax error : missing ‘;’ before ‘{’
    e:\我的文档\demo_vc2005_wrap\demo_vc2005_wrap\demo_vc\demo_vc.cpp(17) : error C2447: missing function header (old-style formal list?)
    e:\我的文档\demo_vc2005_wrap\demo_vc2005_wrap\demo_vc\demo_vc.cpp(17) : error C2143: syntax error : missing ‘;’ before ‘}’
    Error executing cl.exe.

     

     

  13. skybright - 04/14/2008 at 3:53 pm

    我刚学组件 有些还不是很懂。谢谢指教!

     

     

  14. minidxer - 04/14/2008 at 4:00 pm

    @skybright

     

    你用的是VS2005吗?
    我这里编译没有问题啊

     

    其实你可以自己创建一个工程,把
    ExtractText.dll
    ExtractText.h
    ExtractText_i.c
    以及demo_vc.cpp的相关几行代码复制过去,组件按照上面的说明注册一下就可以用了。

     

     

     

     

  15. skybright - 04/14/2008 at 4:33 pm

    我试试。。谢谢先!

     

     

  16. heroyo - 08/19/2008 at 9:47 pm

    您好:我在系統的Lucene全文檢索功能,取用您的ExtractText.dll元件,以截取txt、office格式的附件,很感謝您在網路上釋出這麼好用的軟件。
    請問程式中,宣告MAX_EXTRACT_TEXT_SIZE變數時,指定64M做為讀取文本內容的上限,64M是不是經過測試,所訂立出來的讀取上限呢?或是什麼原因之下,而訂立64M呢?
    謝謝!

     

     

  17. heroyo - 08/20/2008 at 12:11 pm

    另外請教一個問題,請問ExtractText.dll元件是如何產出的呢?
    1.Microsft元件?2.您撰寫的元件?

     

     

  18. Minidxer - 08/20/2008 at 12:16 pm

    @heroyo
    关于第一个问题,请参考:
    http://forum.minidx.com/thread-83-1-1.html

     

    关于第二个问题,请参照正文开头的说明,
    ExtractText.dll 是基于微软的IFilter编写的Com组件。

     

     

     

  19. icen - 11/19/2008 at 2:40 pm

    您好!请问怎么运用在flash as3.0当中读取word并显示出来啊?

     

     

  20. sky - 06/5/2009 at 4:33 pm

    请问,针对Excel,有没有按照某个sheet,每一行的顺序提取出来的。

     

    目前的方法,是一次性把所有信息提取出来,内容不知道是按照什么顺序提取出来的。

     

     

     

  21. lwp - 07/15/2009 at 1:56 pm

    您好:
    我给您的minidxer@gmail.com邮箱发了封邮件请查收,需要您的帮助。

     

     

  22. pang - 08/6/2009 at 11:40 am

    关于从文件读取文本的问题咨询:
    目前提取文档的接口如下:
    ITextExtractor *te = NULL;
    HRESULT Cohr = CoCreateInstance(CLSID_TextExtractor, NULL, CLSCTX_INPROC_SERVER,IID_ITextExtractor, (void**) &te);
    if(SUCCEEDED(Cohr)&&te)
    {
    te->ExtractText(fileName, 0,&bstr);
    te->Release();
    }
    在使用接口ExtractText析取文本的时候,文件的类型是通过fileName确定的,但我希望ExtractText增加一个参数:filetype(文件类型),这样我可以用自己指定的格式读取文本,例如:
    我有一个text文件,文件名是a.text,但希望使用doc的方式来读取文件,目前我采用的措施是先重命名文件为a.doc,析取文本后再将文件改回a.text,操作比较麻烦,而如果接口添加关于文件类型的参数后,我就不用重命名了。
    不知道您能否提供这样的接口,我目前的一个项目正需要这样的接口,如能提供将不胜感激!!!

     

     

  23. Minidxer - 08/8/2009 at 8:20 am

    @pang
    增加这样的接口可以实现,不过由于个人时间等原因这个项目基本上处于停滞状态,实在抱歉。

     

     

  24. tyq - 10/12/2009 at 5:06 pm

    我想要一个VC Demo能给我发一个吗,谢谢

     

     

  25. tyq - 10/12/2009 at 5:07 pm

    我mail:tangyq169@sohu.com

     

     

  26. Minidxer - 10/12/2009 at 8:54 pm

    可以从 http://blog.minidx.com/2008/01/10/373.html 下载。

     

     

Trackbacks

  • 全文检索博客 » “全文检索(full-text search)”和“搜索引擎(search engine)”的区别和联系
  • 全文检索博客 » 利用Minidx Extract-Text Com组件从doc,Xls,Pdf……等读取文本内容VC Demo
  • 利用Minidx Extract-Text Com组件封装类的实现 |全文检索博客

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

这篇关于利用Minidx Extract-Text Com组件从Word,Xls,Pdf……等文件中读取文本内容的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/372800

相关文章

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

如何在页面调用utility bar并传递参数至lwc组件

1.在app的utility item中添加lwc组件: 2.调用utility bar api的方式有两种: 方法一,通过lwc调用: import {LightningElement,api ,wire } from 'lwc';import { publish, MessageContext } from 'lightning/messageService';import Ca

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma

两个月冲刺软考——访问位与修改位的题型(淘汰哪一页);内聚的类型;关于码制的知识点;地址映射的相关内容

1.访问位与修改位的题型(淘汰哪一页) 访问位:为1时表示在内存期间被访问过,为0时表示未被访问;修改位:为1时表示该页面自从被装入内存后被修改过,为0时表示未修改过。 置换页面时,最先置换访问位和修改位为00的,其次是01(没被访问但被修改过)的,之后是10(被访问了但没被修改过),最后是11。 2.内聚的类型 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。 顺序内聚:

vue2 组件通信

props + emits props:用于接收父组件传递给子组件的数据。可以定义期望从父组件接收的数据结构和类型。‘子组件不可更改该数据’emits:用于定义组件可以向父组件发出的事件。这允许父组件监听子组件的事件并作出响应。(比如数据更新) props检查属性 属性名类型描述默认值typeFunction指定 prop 应该是什么类型,如 String, Number, Boolean,

kubelet组件的启动流程源码分析

概述 摘要: 本文将总结kubelet的作用以及原理,在有一定基础认识的前提下,通过阅读kubelet源码,对kubelet组件的启动流程进行分析。 正文 kubelet的作用 这里对kubelet的作用做一个简单总结。 节点管理 节点的注册 节点状态更新 容器管理(pod生命周期管理) 监听apiserver的容器事件 容器的创建、删除(CRI) 容器的网络的创建与删除

matlab读取NC文件(含group)

matlab读取NC文件(含group): NC文件数据结构: 代码: % 打开 NetCDF 文件filename = 'your_file.nc'; % 替换为你的文件名% 使用 netcdf.open 函数打开文件ncid = netcdf.open(filename, 'NC_NOWRITE');% 查看文件中的组% 假设我们想读取名为 "group1" 的组groupName

消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法

消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法   消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法 [转载]原地址:http://blog.csdn.net/x605940745/article/details/17911115 消除SDK更新时的“

C - Word Ladder题解

C - Word Ladder 题解 解题思路: 先输入两个字符串S 和t 然后在S和T中寻找有多少个字符不同的个数(也就是需要变换多少次) 开始替换时: tips: 字符串下标以0开始 我们定义两个变量a和b,用于记录当前遍历到的字符 首先是判断:如果这时a已经==b了,那么就跳过,不用管; 如果a大于b的话:那么我们就让s中的第i项替换成b,接着就直接输出S就行了。 这样