首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >urllib3 -使用tika服务器从docx获取文本

urllib3 -使用tika服务器从docx获取文本
EN

Stack Overflow用户
提问于 2016-08-01 14:04:08
回答 2查看 659关注 0票数 0

我使用python3urllib3tika-server-1.13从不同类型的文件中获取文本。这是我的python代码:

代码语言:javascript
复制
def get_text(self, input_file_path, text_output_path, content_type):
    global config

    headers = util.make_headers()
    mime_type = ContentType.get_mime_type(content_type)
    if mime_type != '':
        headers['Content-Type'] = mime_type

    with open(input_file_path, "rb") as input_file:
        fields = {
            'file': (os.path.basename(input_file_path), input_file.read(), mime_type)
        }

    retry_count = 0
    while retry_count < int(config.get("Tika", "RetriesCount")):
        response = self.pool.request('PUT', '/tika', headers=headers, fields=fields)
        if response.status == 200:
            data = response.data.decode('utf-8')
            text = re.sub("[\[][^\]]+[\]]", "", data)
            final_text = re.sub("(\n(\t\r )*\n)+", "\n\n", text)
            with open(text_output_path, "w+") as output_file:
                output_file.write(final_text)
            break
        else:
            if retry_count == (int(config.get("Tika", "RetriesCount")) - 1):
                return False
            retry_count += 1
    return True

此代码适用于html文件,但当我试图解析docx文件中的文本时,它不起作用。

我从服务器Http错误代码422: Unprocessable Entity返回

使用tika-server 文档,我尝试使用curl来检查它是否与它一起工作:

代码语言:javascript
复制
curl -X PUT --data-binary @test.docx http://localhost:9998/tika --header "Content-type: application/vnd.openxmlformats-officedocument.wordprocessingml.document"

而且起作用了。

tika服务器文档

422个不可处理实体-不支持的mime类型,加密文档等

这是正确的mime类型(也使用tika的检测系统检查它),它是支持的,并且文件没有加密。

我相信这与我如何上传文件到tika服务器有关,我做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-02 11:37:48

你不能以同样的方式上传数据。curl中的--data-binary只是简单地上传二进制数据。没有编码。在urllib3中,使用fields会导致urllib3生成multipart/form-encoded消息。最重要的是,您阻止urllib3正确地设置请求的标题,以便Tika能够理解它。要么停止更新headers['Content-Type'],要么直接传递body=input_file.read()

票数 3
EN

Stack Overflow用户

发布于 2018-01-25 18:39:37

我相信您可以通过只使用客户端模式使用蒂卡-蟒蛇模块来简化这一点。

如果您仍然坚持滚动您自己的客户端,也许这个模块的源代码中有一些线索可以显示他是如何处理所有这些不同的mime类型的.如果您对*.docx有问题,您可能会与其他人发生问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38700924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档