基于Ifilter接口的文档解析

本文介绍Windows中的IFilter接口,用于全文检索的文档解析,如Windows Search和Share Point。通过C++实现IFilter接口的示例代码展示了如何解析Office文件,PDF和ZIP。解析Office2007需要对应的IFilter组件。在64位系统中,需注意编译环境与IFilter接口位宽匹配的问题,否则可能导致DLL加载失败。理解LoadFilter函数的工作原理有助于解决此类问题。
摘要由CSDN通过智能技术生成
Ifilter接口是Windows自带的文档解析的接口,Windows Search, SQL 检索, Share Point等使用的都是该接口,目前该接口在Win7 和 XP系统中都可使用。
Ifilter接口派生于Iunknow, 所以自带函数QueryInterface, AddEef, Release, 其主要使用以下几个函数:Init, GetChunk, GetText, Getvalue; 各函数具体情况见MSDN。


以下是实现解析的函数:
(源码来自http://ifilter.codeplex.com/, 源码其实比较简单的使用了ifilter接口的函数,直接使用源码会使得解析出来的中文标点符号出现错误,所以要去掉ValidUnicode()和CleanUpCharacters()函数.
HRESULT CIfilter::ExtractText(BSTR fileName, long maxLength, BSTR * fileText)
{
    //CoInitialize(NULL);
    if (NULL == fileName)
        return E_POINTER;

    if (0 == ::SysStringLen(fileName))
        return E_INVALIDARG;

    if (NULL == fileText)
        return E_POINTER;

    *fileText = NULL;

    HRESULT hr = E_UNEXPECTED;

    try
    {

        CComPtr<IUnknown> spIUnk;

        hr = LoadIFilter(fileName, NULL, reinterpret_cast<void**>(&spIUnk));

        if(SUCCEEDED(hr))
        {
            CComQIPtr<IFilter> spIFilter = spIUnk;

            if (spIFilter)
            {
                DWORD dwFlags = 0;
                hr = spIFilter->Init(IFILTER_INIT_CANON_PARAGRAPHS |
                    IFILTER_INIT_CANON_HYPHENS |
                    IFILTER_INIT_CANON_SPACES |
                    IFILTER_INIT_APPLY_INDEX_ATTRIBUTES |
                    IFILTER_INIT_INDEXING_ONLY|
                    IFILTER_INIT_FILTER_OWNED_VALUE_OK ,
                    0, NULL,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值