【问题标题】:Text with hyperlink returns "\xa0" when extracting text from a word file (python-docx)从 word 文件 (python-docx) 中提取文本时,带有超链接的文本返回“\xa0”
【发布时间】:2022-01-25 09:14:05
【问题描述】:

我一直在尝试使用 python-docx 从 word 文件中提取文本

示例文本: (其中文本“人工智能 (AI)”包含超链接)

为了得到这个文本,我这样做了:

from docx import Document

doc = Document(filename)

rawdata = []

for par in doc.paragraphs:
  rawdata.append(par.text)

print(rawdata)

但是,这会返回如下内容:

['What is machine learning?', 'Machine learning is a branch of\xa0\xa0and computer science which focuses on the use of data and algorithms to imitate the way that humans learn, gradually improving its accuracy.'...

在这里,文本“人工智能 (AI)”变成了 '\xa0\xa0',这是我不想要的。

我还是 python 的新手,尝试进行一些挖掘,发现 \xa0 是一个不间断的空间......(这与链接有什么关系?)

所以问题:如何使用 python-docx 获取包含超链接的原始文本?

(编辑:我不是要从字符串中删除 '\xa0',我需要的是原始文本)

最初的目标: 通过python取消word文件中的所有链接,但仍保持文本完整。

非常感谢任何帮助,谢谢!

【问题讨论】:

  • @scanny 我确实尝试过事先查找,并找到了一种收集所有超链接的方法,并且成功了。但是,在我的终端上打印时带有该精确超链接的文本返回“\xa0\xa0”,这主要是这里的问题..
  • 我没有得到你的问题。 python-docx 不支持在 paragraph.text 中包含超链接文本的 API。如果你找到了一种方法来做到这一点,那就太好了。 \xa0 是一个可以出现在文本中的合法字符,我希望它恰好出现在这表明的位置,“人工”之前的空格和“(AI)”之后的空格都是不间断的空格。如果您不喜欢那样,请将它们更改为其他内容。如果你澄清你的问题,我会看看我是否能提供帮助,但我不明白你在问什么。

标签: python python-docx


【解决方案1】:

\xa0 实际上是 Latin1 (ISO 8859-1) 中的不间断空格,也是 chr(160)。

您可以使用 unicode.normalize

将其替换为空格

    import unicodedata

    text = "Machine learning is a branch of\xa0\xa0and computer science..."
    text =  unicodedata.normalize("NFKD", text)

您可以使用 NFKD、NFC 和 NFD 参数,更多信息here

针对您的具体情况:

    import unicodedata
    from docx import Document
    
    doc = Document(filename)
    
    rawdata = []
    
    for par in doc.paragraphs:
      rawdata.append(unicodedata.normalize("NFKD", par.text))
    
    print(rawdata)

应该工作

【讨论】:

  • 虽然这是事实,但与他的问题没有任何关系。
  • 我认为你错过了重点。问题是他得到了"\xa0\xa0",他希望在其中找到超链接。他不想要不间断的空格,这不是字符翻译的问题。这是一个特定于 Word 的问题,应该有一个超链接的标记。
猜你喜欢
  • 2022-08-16
  • 2020-04-10
  • 2021-12-14
  • 2022-10-17
  • 2014-10-03
  • 2013-10-30
  • 2018-12-23
  • 2016-08-26
  • 2010-09-12
相关资源
最近更新 更多