gpt4 book ai didi

Python中docx2txt库的使用说明

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 27 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Python中docx2txt库的使用说明由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

docx2txt的Github地址 。

docx2txt是基于python的从docx文件中提取文本和图片的库.

代码是从python-docx中获取的。它也可以从页眉,页脚和超链接中提取文本。它现在也可以提取图像.

安装

?
1
pip install docx2txt

运行

1、命令行运行

?
1
2
3
4
# extract text
docx2txt file .docx
# extract text and images
docx2txt - i / tmp / img_dir file .docx

2、在python中调用

?
1
2
3
4
# extract text
docx2txt file .docx
# extract text and images
docx2txt - i / tmp / img_dir file .docx

补充:python docx提取word中的目录及文本框中的文本 。

问题描述

python docx提取word中的目录及文本框中的文本 。

解决方案

因未在docx库找到直接识别word中目录及文本框中文本的方法,所以采用了一个“笨”方法,docx库可以把word文档解析成xml格式,以解析xml的方式查找目录及文本框中文本,具体做法:

迭代出文档的所有element,其中目录的tag为“std”,找到它后提出他的所有文本即为目录文本;文本框的tag 为“textbox”,找到它后还要继续下钻寻找tag为 'r'的element,提取其文本则为文本框中文本.

?
1
2
3
4
5
6
7
8
9
10
11
# 提取word目录
file = docx.Document(file_path)
children = file .element.body. iter ()
child_iters = []
for child in children:
  # 通过类型判断目录
  if child.tag.endswith( 'main}sdt' ):
   for ci in child. iter ():
    if ci.text and ci.text.strip():
     child_iters.append(ci)
catalog = [ci.text for ci in child_iters]
?
1
2
3
4
5
6
7
8
9
10
11
# 提取word文本框中文本
file = docx.Document(file_path)
children = file .element.body. iter ()
child_iters = []
for child in children:
  # 通过类型判断目录
  if child.tag.endswith( 'textbox' ):
   for ci in child. iter ():
    if ci.tag.endswith( 'main}r' ):
     child_iters.append(ci)
textbox = [ci.text for ci in child_iters]

文本域的标签,第一次找的是AlternateContent,后来发现对有些文本域失效;第二次又找到了pict,基本覆盖了测试的所有文本域;第三次把word文档的标签都找出来看了一下,发现textbox这个标签看着更靠谱,用它测试了一下,也能覆盖所有的测试文本域,决定就选择这个标签.

提取文本后,又有了新需求,提取的文本很多都不成句,呈短语或单词的形式,需要把提取的文本还原成段落形式:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
file = docx.Document(file_path)
children = file .element.body. iter ()
child_iters = []
tags = []
for child in children:
  # 通过类型判断目录
  if child.tag.endswith(( 'AlternateContent' , 'textbox' )):
   for ci in child. iter ():
    tags.append(ci.tag)
    if ci.tag.endswith(( 'main}r' , 'main}pPr' )):
     child_iters.append(ci)
text = ['']
for ci in child_iters :
  if ci.tag.endswith( 'main}pPr' ):
   text.append('')
  else :
   text[ - 1 ] + = ci.text
  ci.text = ''
trans_text = [ '***' + t + '***' for t in text]
print (trans_text)
i, k = 0 , 0
for ci in child_iters :
  if ci.tag.endswith( 'main}pPr' ):
   i + = 1
   k = 0
  elif k = = 0 :
   ci.text = trans_text[i]
   k = 1
file .save( 'E:/***/test.docx' )

把标签pPr当做换行标志, 把提取的文本每段前后都加了“***”后又写回文档中.

注:这里又发现AlternateContent这个标签必须要带上,否则可以提取文本域内的文字,但改变文字写回去保存word不显示更改后的文字.

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我。如有错误或未考虑完全的地方,望不吝赐教.

原文链接:https://blog.csdn.net/angus_monroe/article/details/79292837 。

最后此篇关于Python中docx2txt库的使用说明的文章就讲到这里了,如果你想了解更多关于Python中docx2txt库的使用说明的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com