首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用烯烃从Word .doc中提取文本

使用烯烃从Word .doc中提取文本
EN

Stack Overflow用户
提问于 2018-08-21 06:51:13
回答 1查看 2.2K关注 0票数 2

我只关心从.doc文件中获取文本。我在windows 10上使用python3.6,所以textract/antiword就不在桌面上了。我查看了来自这个问题的其他引用,但它们都是旧的,并且与windows 10和/或python3.6不兼容。

我的文档是一个.doc文件,中英混合。我不熟悉Word是如何存储它的文件的,我的机器上也没有字。使用olefile,我能够获得文档的字节,但我不知道如何正确遍历标题和布局来提取文本。如果我天真地尝试

代码语言:javascript
运行
复制
from olefile import OleFileIO as ofio
ole = ofio('d.doc')
stream = ole.openstream('WordDocument')
data = stream.read()
data.decode('utf-16')
>>>UnicodeDecodeError: 'utf-16-le' codec can't decode bytes in position 9884-9885: illegal encoding
data[9884:9885]
>>>b'\xfa'
data[:9884].decode('utf-16')

最后一行给出了大约一半的文档,以大量垃圾字符开头和结尾。我怀疑我可以继续尝试这个方法来一片片地获取文本,但是我最终需要对很多文件这样做。即使我是这样做的,我也想不出一个好的方法来实现它的自动化。如何使用烯烃文件可靠地从.doc中获取文本?

(如果你知道有一种方法适用于我的规范,那么也可以在你的答案中加入烯烃的替代品)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-21 11:57:03

我不确定,但我认为问题在于烯烃对Word文档没有理解,只有OLE "streams“。因此,我想,您提取的数据中包含的不只是纯文本,而是某种类型的控制字符。所以我想这就是为什么你不能把你得到的数据解码为UTF-16。

有一些Python模块可以从文档文件中转换,但是它们倾向于只在Linux上工作,在那里它们使用命令行实用程序antiwordcatdoc

我尝试了其他解决方案--如果问题是您没有Word许可,但可以安装软件,LibreOffice可能是一条前进的道路。使用此命令,我将一个包含中文字母的Word测试文件从doc格式转换为HTML

代码语言:javascript
运行
复制
"c:\Program Files\LibreOffice\program\swriter.exe" --convert-to html d.doc

LibreOffice也可以转换成许多其他格式,但是HTML应该足够简单,可以进一步处理。我也试过转到Windows,但我无法用它来处理中文信件。

不幸的是,你没有安装Word,或者你可以让它为你做工作。将该解决方案留在这里,以防其他人使用该解决方案:

代码语言:javascript
运行
复制
import win32com.client

app = win32com.client.Dispatch("Word.Application")

try:
    app.visible = False
    wb = app.Documents.Open('c:/temp/d.doc')
    doc = app.ActiveDocument

    with open('out.txt', 'w', encoding = 'utf-16') as f:
        f.write(doc.Content.Text)

except Exception as e:
    print(e)

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

https://stackoverflow.com/questions/51943121

复制
相关文章

相似问题

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