kunpeng的aarch64架构cpu、openeuler系统、昇腾服务器适配文档转换功能(doc转docx、ppt转pptx)

一、安装flatpak

sudo yum install flatpak  
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

二、安装libreoffice

flatpak install flathub org.libreoffice.LibreOffice

三、使用

对于使用 flatpak 安装的 LibreOffice,不需要手动启动或设置任何环境变量。flatpak 提供了一个沙箱化的运行环境,确保应用程序可以正常运行。
flatpak 应用程序的可执行文件通常位于类似

/var/lib/flatpak/app/org.libreoffice.LibreOffice/aarch64/stable/active/export/bin/org.libreoffice.LibreOffice

只要在代码中正确指定了这个完整路径,就可以直接运行和调用 LibreOffice,而无需进行任何其他设置。

四、示例代码-doc

import tqdm
import subprocess
import os
from dotenv import load_dotenv
from docx.table import _Cell, Table
from docx.oxml.table import CT_Tbl
from docx.oxml.text.paragraph import CT_P
from docx.text.paragraph import Paragraph
from docx import Document
import reload_dotenv()
libreoffice_path = "/var/lib/flatpak/app/org.libreoffice.LibreOffice/aarch64/stable/active/export/bin/org.libreoffice.LibreOffice"
def convert_doc_to_docx(doc_file_path):if os.path.basename(doc_file_path).split(".")[1] == "docx":return doc_file_pathelif os.path.basename(doc_file_path).split(".")[1] == "doc":# Define the command to run LibreOffice in headless modecommand = [libreoffice_path,'--headless','--convert-to', 'docx','--outdir', os.path.dirname(doc_file_path),doc_file_path]# Run the commandresult = subprocess.run(command, capture_output=True, text=True)if result.returncode != 0:raise RuntimeError(f"Failed to convert '{doc_file_path}' to DOCX.\nError: {result.stderr}")return doc_file_path.replace('.doc', '.docx')else:return Falsedef doc2text(filepath):filepath = convert_doc_to_docx(filepath)doc = Document(filepath)resp = ""def iter_block_items(parent):from docx.document import Documentif isinstance(parent, Document):parent_elm = parent.element.bodyelif isinstance(parent, _Cell):parent_elm = parent._tcelse:raise ValueError("parse fail")for child in parent_elm.iterchildren():if isinstance(child, CT_P):yield Paragraph(child, parent)elif isinstance(child, CT_Tbl):yield Table(child, parent)for block in iter_block_items(doc):if isinstance(block, Paragraph):resp += block.text.strip() + "\n"elif isinstance(block, Table):for row in block.rows:for cell in row.cells:for paragraph in cell.paragraphs:resp += paragraph.text.strip() + "\n"resp = re.sub(r'\n+', '\n', resp)resp = re.sub(r'(.)\1{4,}', r'\1', resp)return {'document':resp,'metadata':filepath,'format':"docx_text"}if __name__ == '__main__':import jsonfile_path="/opt/rag/data/xxx.doc"loader = doc2text(file_path)output_path = os.path.join(os.path.dirname(file_path), os.path.basename(file_path).split(".")[0] + "_docx"+ ".json")with open(output_path, 'w', encoding='utf-8') as f:json.dump(loader, f, ensure_ascii=False, indent=4)

五、示例代码-ppt

import os
import subprocess
from dotenv import load_dotenv
from unstructured.chunking.title import chunk_by_title
from unstructured.documents.elements import CompositeElement, Table
from unstructured.partition.pptx import partition_pptx
import jsonload_dotenv()
libreoffice_path = "/var/lib/flatpak/app/org.libreoffice.LibreOffice/aarch64/stable/active/export/bin/org.libreoffice.LibreOffice"def remove_duplicates(lst):res = []seen = {}for i in lst:if i not in seen:seen[i] = 1res.append(i)return resdef ppt2text(file_name: str):file_name = convert_ppt_to_pptx(file_name)elements = partition_pptx(filename=file_name,multipage_sections=True,infer_table_structure=True,include_page_breaks=False,)chunks = chunk_by_title(elements=elements,multipage_sections=True,combine_text_under_n_chars=0,new_after_n_chars=None,max_characters=4096,)data = dict()text_list = []for chunk in chunks:if isinstance(chunk, CompositeElement):text = chunk.texttext_list.append(text)elif isinstance(chunk, Table):if text_list:text_list[-1] = text_list[-1] + "\n" + chunk.metadata.text_as_htmlelse:text_list.append(chunk.hunk.metadata.text_as_html)data['document'] = remove_duplicates(text_list)data['metadata'] =  file_namedata['format'] =  "pptx_text"return datadef convert_ppt_to_pptx(ppt_file_path):if os.path.basename(ppt_file_path).split(".")[1] == "pptx":return ppt_file_pathelif os.path.basename(ppt_file_path).split(".")[1] == "ppt":# Define the command to run LibreOffice in headless modecommand = [libreoffice_path,'--headless','--convert-to', 'pptx','--outdir', os.path.dirname(ppt_file_path),ppt_file_path]# Run the commandresult = subprocess.run(command, capture_output=True, text=True)if result.returncode != 0:raise RuntimeError(f"Failed to convert '{ppt_file_path}' to PPTX.\nError: {result.stderr}")return ppt_file_path.replace('.ppt', '.pptx')else:return Falseif __name__ == "__main__":pptx_file_path = "/opt/data/xxx.ppt"contents = ppt2text(pptx_file_path)# print(contents)output_path = os.path.join(os.path.dirname(pptx_file_path), os.path.basename(pptx_file_path).split(".")[0] + "_ppt" + ".json")with open(output_path, 'w', encoding='utf-8') as f:json.dump(contents, f, ensure_ascii=False, indent=4)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/852503.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

科普那些199的天坑篇

科普篇。 关于199 299的小程序开发的天坑。 首先咱别太天真了,程序员可都是高薪酬,算算成本你觉得299真的现实嘛?以身入局我也试了试… 他们通过199 299的价格来吸引客户然后告诉我交300认证费然后说需要服务器,配置不同&#xf…

C语言 | Leetcode C语言题解之第148题排序链表

题目: 题解: struct ListNode* merge(struct ListNode* head1, struct ListNode* head2) {struct ListNode* dummyHead malloc(sizeof(struct ListNode));dummyHead->val 0;struct ListNode *temp dummyHead, *temp1 head1, *temp2 head2;while…

推流工具OBS的下载使用

一、下载安装 OBS,windows版本官网下载地址 二、推流步骤 安装好之后,打开软件 1、右下角,打开设置 2、输入推流地址,一般为rtmp格式开头的推流地址 输入完成后,应用并确定关闭窗口 3、“来源”里面新建媒体源、新…

Git分支打包的详细教程

以下是关于Git分支打包的详细教程,包括在本地和远程仓库中打包分支的步骤和常用命令。 在本地仓库中打包分支: a. 首先,确保你正在所需的分支上工作。使用 git branch 命令可以查看当前分支。 b. 执行命令 git archive 来打包分支。语法如下&…

《别让“想太多”挡了你的骑行路,对比一下更丝滑》

在探索骑行的世界时,我们往往会被一些先入为主的想法所束缚。本文将带你对比骑行与其他运动和生活方式,揭示那些阻碍你爱上骑行的认知误区。 一、年龄不是界限:骑行与跑步的比较与跑步相比,骑行同样适合所有年龄段,但它…

从“数据孤岛”、Data Fabric(数据编织)谈逻辑数据平台

提到逻辑数据平台,其核心在于“逻辑”,与之相对的便是“物理”。在过去,为了更好地利用和管理数据,我们通常会选择搭建数据仓库和数据湖,将所有数据物理集中起来。但随着数据量、用数需求和用数人员的持续激增&#xf…

单链表经典算法题 1

前言 学习了单链表,我们就做一些题来巩固一下。还有就是解题方法不唯一,我就只讲述为自己的方法。 目录 前言 1.移除链表元素 思路 代码 2.反转链表 思路 代码 3.链表的中间节点 思路 代码 总结 1.移除链表元素 思路 我们创建一个新的表…

docker-compose安装freeradius

freeradius docker 安装记录 docker安装freeradius #拉取镜像 docker pull freeradius/freeradius-server:latest #启动Freeradius容器 docker run -d --name freeradius-server -p 1812-1813:1812-1813/udp freeradius/freeradius-server #查看容器是否正常启动 docker ps -…

自学Java到找工作,最强学习路线,2024年最新版

本人是2024届的毕业生,自学Java的路上,也踩了不少的坑,希望在这里给小伙伴一些帮助,避免无效学习,一起进大厂! ✔学习顺序: Java基础 ➡ Java进阶 ➡ Java并发 ➡ 数据结构 ➡ MySQL ➡ JavaW…

Shell中( ),(( ))的区别

在Shell编程中,() 和 (( )) 是两种常见的操作符,它们在不同的上下文中起到不同的作用。理解这两者的区别及其应用场景,有助于编写更加高效和灵活的Shell脚本。本文将详细介绍 () 和 (( )) 的功能及其使用方法。 1. 子Shell (()) 括号 () 用于…

接口幂等性问题

接口幂等性问题 描述 接口幂等性是软件开发时常见的问题,其目的是要求确保当同一个接口被重复调用时其状态不会发生变化 示例 当前一个支付页面,不管用户在同一时间内点击多少次支付按钮,最终接口也只会生成一个支付订单,这就…

AWS 网络

Here is a more detailed explanation of AWS networking in Chinese: VPC(虚拟私有云) VPC 是一个专门为您的 AWS 账户分配的虚拟网络。您可以将 VPC 视为云端的一个虚拟数据中心。在创建 VPC 时,您可以指定以下内容: IP 地址…

长连接的钟表程序

实验要求 实现1个钟表程序(服务),多个用户可以从该程序获得时间并在本地显示,用户也可以修改时间。 (1)用户程序可以在计算机上运行,也可以在手机上运行; (2&#xff…

Java 18 的一些主要新特性

以下是 Java 18 的一些主要新特性: 简单 Web 服务器(JEP 408): Java 18 引入了一个简单的 Web 服务器,旨在帮助开发者更方便地测试和原型化。在命令行中使用 jwebserver 命令即可启动这个 Web 服务器。主要用于快速测试…

程序员如何挖掘项目开发出工具?(4)

如何利用最小的MVP(最小可行产品)模型找到第一个用户? 对许多人来说,找到第一个用户可能是整个过程中最具挑战性的部分,但在我看来,这其实是最简单的。 下面分享几个小技巧,如果你还是找不到第…

使用Kube-Bench对Kubernetes进行安全检测

使用Kube-Bench对Kubernetes进行安全检测 1. 工具介绍 Kube-Bench是一个开源的Go语言工具,用于自动化检查Kubernetes集群是否符合CIS Kubernetes基准。这些基准包括一系列关于Kubernetes配置和部署安全性的建议和最佳实践。 Kube-Bench执行了一系列针对Kubernete…

【Android】Android系统性学习——Android系统架构

前言 部分内容参考《Android进阶解密》 – 刘望舒 1. Android版本 官方链接:https://developer.android.com/studio/releases/platforms 里面有各个版本的官方文档,有些新功能的用法在这里面。 现在做安卓11,有时候需要向下兼容 2. AOSP …

【Python】在运行中使用warnings.filterwarnings,可以忽略测试中遇到的问题

在 Python 中,warnings 是一个内置模块,用于发出有关程序执行的警告信息,这些警告信息通常是关于程序行为的潜在问题。 不过,这些问题通常不是致命的错误,只不过是展示我们代码中潜在的问题,或不推荐的做法…

软件架构搞好了,还用担心代码可读性差?

目录 一、架构的概念及由来 二、小系统也需要架构思想 三、实现架构的思路 一、架构的概念及由来 嵌入式软件架构是指在嵌入式系统中用于组织和管理软件组件的结构和设计。嵌入式软件架构的出现是为了解决嵌入式系统中软件复杂度和系统要求不断增加的挑战。以下是嵌入式软件架…

【STM32进阶笔记】GPIO端口

前段时间由于其他原因,专栏暂停更新了较长一段时间,现在恢复更新,争取继续为大家创造有价值的内容,期待大家的订阅关注,欢迎互相学习交流。 在STM32速成笔记系列专栏中其实已经对GPIO的一些必要知识进行了介绍&#xf…