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()函数.
(源码来自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, &dwFlags);

本文介绍Windows中的IFilter接口,用于全文检索的文档解析,如Windows Search和Share Point。通过C++实现IFilter接口的示例代码展示了如何解析Office文件,PDF和ZIP。解析Office2007需要对应的IFilter组件。在64位系统中,需注意编译环境与IFilter接口位宽匹配的问题,否则可能导致DLL加载失败。理解LoadFilter函数的工作原理有助于解决此类问题。

1425

被折叠的 条评论
为什么被折叠?



