成都山而网站建设公司建筑图纸字母代表大全图解
2026/2/20 1:16:58 网站建设 项目流程
成都山而网站建设公司,建筑图纸字母代表大全图解,嵌入式项目外包平台,公司部门解散员工赔偿一、前言在大模型和RAG#xff08;检索增强生成#xff09;技术飞速发展的今天#xff0c;企业AI知识库建设已成为AI落地的核心战场。而文件解析是所有参与做企业AI知识库开发者所避免不了的难题。 本文将结合我在开发TorchV AIS企业级AI知识库产品中碰到的解析Word的问题检索增强生成技术飞速发展的今天企业AI知识库建设已成为AI落地的核心战场。而文件解析是所有参与做企业AI知识库开发者所避免不了的难题。本文将结合我在开发TorchV AIS企业级AI知识库产品中碰到的解析Word的问题将Word文档.doc及.docx高效、准确地转换为Web友好格式Markdown/HTML优化目标的方案进行分享。结合目前的实际解决方案依靠Apache Tika/POI,详细阐述一种创新的、具备行业领先水平的解决方案。通过实现一套完全基于表格结构、无需硬编码的通用算法完美解决了.doc和.docx格式中的复杂表格解析问题确保转换后的HTML与源文件在视觉和结构上高度一致。二、Word文档解析企业AI知识库的隐形瓶颈据我们的调研和实践经验1、两种文件格式两种世界•.docx格式基于Office Open XML (OOXML) 标准本质是一个ZIP压缩包内部包含描述文档结构的XML文件。表格的合并信息如gridSpan、vMerge在XML中有明确定义解析相对规范。•.doc格式是微软私有的二进制格式内部结构复杂、缺乏公开的完整文档。通过POI的HWPFDocument模块进行解析时获取到的表格信息非常原始几乎不直接提供合并单元格的完整信息。2、传统工具的局限• 大多数转换工具在处理.doc格式时无法准确还原rowspan和colspan• 它们通常会把合并单元格下的空单元格渲染成独立的td导致表格散架• 为了绕过难题一些方案采取扁平化策略即复制合并单元格的内容来填充所有被合并的单元格但这破坏了表格的原始结构3、企业现状• 90%的企业仍然有大量的Word格式需要导入企业AI知识库特别是金融、政府领域的客户对于doc老文件格式的诉求。•传统解析方案的表格准确率普遍较低特别是在处理合并单元格时•表格信息的丢失或错误直接导致企业AI知识库系统对业务关键信息的理解偏差导致大模型回答准确度大大降低•现有开源工具要么功能简陋要么商业化程度高开发者缺乏可控的解决方案三、企业AI知识库的诉求对于做企业AI知识库的服务商而言Word的解析是一个全面综合去考虑分析的一个问题。对于我们而言我们考虑的主要方向包括1、解析格式需要支持doc\docx两种格式我知道现有的很多开源工具、商业产品在处理Word格式上对于解析doc格式都倍感恼火。感觉这么一个上世纪微软留下的产物让开发者恨的牙痒痒不亚于10年前开发者去解决IE6的各种兼容性问题。然而在我们的客户里面特别是金融、政府领域的客户,依然存在着大量的老的doc的格式文件这些文件依然是企业的数字资产在AI时代都需要坐上这趟高速列车把数据装载进入企业AI知识库里面发挥知识的价值。2、Word文档能够解析提取成Markdown格式,提取的元素包括(文档Header、表格、图片企业AI知识库最关心的是“知识的结构化”。解析文档的目标不只是转换文本更是为了“识别并提取有价值的知识结构”。因此• 文档头信息如标题、章节、层级结构需准确提取并转化为 Markdown 标题#、##等• 段落、列表、加粗/斜体等格式也应保留确保语义清晰、上下文连贯• 引用和脚注等内容建议标准化处理支持企业在QA和文档搜索场景中进行深度挖掘。3、表格的内容需要用Html呈现解决合并(rowspan/colspan)单元格的问题Markdown 表格天生不支持合并单元格rowspan/colspan而这正是企业文档中极为常见的复杂表格结构如绩效考核表、组织结构、流程图表等• 采用 HTML 格式解析表格内容能完整保留表格的合并信息• 这样在知识回显、检索结果展示以及大模型上下文学习时能确保原貌还原• 可为后续编辑器的“所见即所得”功能打下良好基础。TorchV AIS企业AI知识库提供了强大的富文本编辑器对于Word的格式内容对于表格内容就需要解析成标准的Html格式进行展现,丰富企业的知识二次加工创作。4、图片正确提取并且图片的和文档内容上下位置正确。Word 中的图文混排结构例如图解流程、插图说明等是许多专业知识文档的重要组成• 图片应以URL链接保留确保知识库中可以复现图文内容• 同时还要保持图片在文档中的原始顺序和上下文位置不能打乱段落与图片的对应关系• 若有 Alt 文本或说明文字也需提取出来作为附加语义数据。• 必要情况下可以灵活利用外部工具OCR/多模态等对图片进行深度理解能够扩展当前的图片语义提升问答精准度5、性能以及成本考虑不同企业对解析能力的投入存在差异因此服务端需提供灵活选择• GPU/CPU的双重选择有钱的可以无脑上GPU模型版本驱动解析Word文档。• 解析的性能效率,高效转换以及向量嵌入的转化。在不同的成本下的考虑以及解析的效果综合评估四、TorchV技术实现路径预处理注入策略TorchV目前采用Java语言开发在底层技术栈上对于Word的解析目前恰好有2个非常好的开源软件可以利用• Apache Tika提供了多种文档解析的统一封装开发者无需关心底层的细节只需要统一调用就可以。• Apache POI能够处理Office套件的文件解析包括doc、docx格式的解析。虽然在底层技术支持上这2个组件已经可以做的非常好了但是对于上面我们第二点(企业AI知识库)的诉求,我们还是需要手工干预一下才能解析得到我们想要的结果。1、这2个工具在表格的处理、图片的处理提取上面默认的策略都不太能满足我们的诉求因此需要做更深层次的定制改动。2、我们依赖上面这两个组件做优化这2个组件在CPU环境下能够快速的解析处理所依赖的服务资源非常少的1. FileMagic差异化处理策略对于doc/docx我们需要从底层做差异处理两种格式是完全不一样的解析策略针对不同格式采用不同的解析方案// 检测文件格式 FileMagicfileMagic FileMagicUtils.checkMagic(wordFile); if (fileMagic FileMagic.UNKNOWN) { Stringsuffix FileUtil.getSuffix(wordFile.getName()); if (StrUtil.equalsIgnoreCase(suffix, docx)) { fileMagic FileMagic.OOXML; } elseif (StrUtil.equalsIgnoreCase(suffix, doc)) { fileMagic FileMagic.OLE2; } } log.info(检测到文件格式: {}, 文件: {}, fileMagic, wordFile.getAbsolutePath()); // 根据文件格式选择不同的处理方式 switch (fileMagic) { case OOXML - { // DOCX 格式 - 使用自定义表格解析器 log.info(DOCX格式使用自定义表格解析器); transfer processDocxWithHtmlTable(wordFile, target); } case OLE2 - { // DOC 格式 - 使用新的HTML表格支持 transfer processDocWithHtmlTable(wordFile, target); } default - { log.warn(不支持的文件格式: {}, 使用默认处理方式, fileMagic); // 回退到原始转换 target toMarkdown(wordFile, pictures); transfer true; } }2. DOCX格式处理策略核心思路利用DOCX格式的标准化特性采用预处理替换模式利用WordTableParser类单独精准解析docx格式中的所有表格。然后在Tika处理完的Content内容上做replace替换。private staticbooleanprocessDocxWithHtmlTable(File docxFile, File target) { // 1. 预处理阶段使用WordTableParser精准解析表格 XWPFDocumentdocumentnewXWPFDocument(inputStream); WordTableParserwordTableParsernewWordTableParser(); ListString customTablesHtmlList wordTableParser.parseToHtmlList(document); // 2. 常规解析使用Tika进行流式解析 AutoDetectParserparsernewAutoDetectParser(); parser.parse(parseStream, textHandler, metadata, parseContext); // 3. 智能替换用精准的表格HTML替换Tika的粗糙输出 StringfinalContent replaceTablesWithCustomHtmlList(tikaContent, customTablesHtmlList); }因为docx格式是相对标准的格式POI在底层上给我们封装了非常强大的上层API供开发者调用能够拿到docx中的所有table元素对象这样让我们在处理表格合并时更方便。public classWordTableParser { privatefinal CellMergeAnalyzer cellMergeAnalyzer; privatefinal HtmlTableBuilder htmlTableBuilder; publicWordTableParser() { this.cellMergeAnalyzer newCellMergeAnalyzer(); this.htmlTableBuilder newHtmlTableBuilder(); } publicWordTableParser(CellMergeAnalyzer cellMergeAnalyzer, HtmlTableBuilder htmlTableBuilder) { this.cellMergeAnalyzer cellMergeAnalyzer; this.htmlTableBuilder htmlTableBuilder; } /** * 解析 Word 文档中的所有表格为 HTML */ public String parseToHtml(XWPFDocument document) { // 拿到所有table ListXWPFTable tables document.getTables(); log.info(开始解析Word表格共 {} 个表格, tables.size()); StringBuilderhtmlnewStringBuilder(); for (inti0; i tables.size(); i) { XWPFTabletable tables.get(i); log.info(解析第 {} 个表格包含 {} 行, i 1, table.getRows().size()); html.append(parseTableToHtml(table)); if (i tables.size() - 1) { html.append(br/br/\n); } } return html.toString(); } // more.... }我们在处理docx格式时抽象一个CellMergeAnalyzer的来处理表格合并的情况。3. DOC格式处理策略核心思路直接在解析过程中注入我们的表格处理逻辑扩写Tika下的Handler模块单独处理doc格式的文件。private staticbooleanprocessDocWithHtmlTable(File docFile, File target) { // 使用专门的DOC内容处理器 DocMarkdownWithHtmlTableContentHandlerhandlernewDocMarkdownWithHtmlTableContentHandler(); handler.setCurrentDocument(document); // 在解析过程中实时应用我们的表格算法 DocXMarkdownWithHtmlTableContentHandlertextHandler newDocXMarkdownWithHtmlTableContentHandler(handler, metadata); }doc格式和docx天然差异可以算是一个新文件类型也不为过对于表格的解析合并内容会有明显的不同。主要体现在提取的Table元素并不能很好的获取单元格合并信息需要有一套通用的合并单元格识别算法我们的在DocumentTableParser实现了完全基于表格结构特征的通用算法不依赖任何具体内容1. 数据结构构建// 构建表格数据矩阵 String[][] cellContents new String[numRows][]; int[] rowCellCounts new int[numRows];2. 列合并检测算法private staticintdetectColspanByStructure(int rowIndex, int cellIndex, String[][] cellContents, int[] rowCellCounts, int maxCols) { intcurrentRowCells rowCellCounts[rowIndex]; // 如果当前行只有1个单元格占满整行 if (currentRowCells 1) { return maxCols; } // 智能分配列数 intaverageColspan maxCols / currentRowCells; intremainingCols maxCols % currentRowCells; // 最后一个单元格处理剩余空间 if (cellIndex currentRowCells - 1 remainingCols 0) { return averageColspan remainingCols; } return averageColspan 0 ? averageColspan : 1; }3. 行合并检测算法private staticintdetectRowspanByStructure(int rowIndex, int cellIndex, String cellText, String[][] cellContents, int[] rowCellCounts) { // 检查向下相邻行的对应位置 introwspan1; for (intnextRow rowIndex 1; nextRow cellContents.length; nextRow) { StringnextCellText cellContents[nextRow][cellIndex]; if (nextCellText.trim().isEmpty()) { // 进一步验证检查该行是否有其他内容 booleanhasContentInRowfalse; for (inti0; i rowCellCounts[nextRow]; i) { if (!cellContents[nextRow][i].trim().isEmpty()) { hasContentInRow true; break; } } if (hasContentInRow) { rowspan; } else { break; // 整行为空不是rowspan } } else { break; // 遇到非空单元格rowspan结束 } } return rowspan; }4. 智能跳过算法private staticbooleanshouldSkipCellByStructure(int rowIndex, int cellIndex, String cellText, String[][] cellContents, int[] rowCellCounts) { // 向上查找可能的rowspan源 for (intprevRow rowIndex - 1; prevRow 0; prevRow--) { if (cellIndex rowCellCounts[prevRow]) { StringprevCellText cellContents[prevRow][cellIndex]; if (!prevCellText.trim().isEmpty()) { // 重新计算该单元格的rowspan intcalculatedRowspan calculateRowspanFromPosition( prevRow, cellIndex, cellContents, rowCellCounts); // 判断是否覆盖到当前行 if (prevRow calculatedRowspan rowIndex) { returntrue; // 跳过被占用的单元格 } } } } returnfalse; }五、解析效果验证我让大语言模型帮我创建了30种不同格式的复杂表格类型包括上下单元格合并、跨页表格、左右单元格合并等多种复杂的情况验证了doc/docx两种格式。主要表现如下• ✅ 完美识别rowspan和colspan合并单元格• ✅ 准确保留所有表格内容无丢失现象• ✅ 正确处理跨页表格和复杂嵌套结构• ✅ 支持任意语言和字符集的表格内容• ✅ 在.doc和.docx格式上表现一致(目前doc格式无法提取markdown的header标题)• ✅ 正确提取图片以及图片位置正确在31个复杂表格情况下对于表格的合并情况• ✅ 数据无错误,表格内容没错误的情况比例:30/3196.8%包含数据完全正确目前出现6个表格会出现数据没异常的情况但是表格在纵向合并的情况并没有表现一致的情况• ✅ 数据解析异常错误比率1/313.23%在31个复杂表格数据的情况下出现了解析还原错误的情况表格数据错位了的情况这种情况在做知识库场景下送给大模型时会导致数据异常、回答幻觉的情况发生• ✅ 表格完全正确colspan/rowspan完全无错误的情况25/3180.6%数据完全一致、表格完全一致100%还原出来的比例。1、简单的上下合并情况图1-简单的上下合并情况2、跨页上下单元格合并单元格的情况图2-跨页上下单元格合并单元格的情况3、上下左右单元格合并的情况图3-上下左右单元格合并的情况4、翻页单元格上下左右合并的情况图4-翻页单元格上下左右合并的情况5、更复杂的纵向横向表格合并情况图5-更复杂的纵向横向表格合并情况普通人如何抓住AI大模型的风口领取方式在文末为什么要学习大模型目前AI大模型的技术岗位与能力培养随着人工智能技术的迅速发展和应用 大模型作为其中的重要组成部分 正逐渐成为推动人工智能发展的重要引擎 。大模型以其强大的数据处理和模式识别能力 广泛应用于自然语言处理 、计算机视觉 、 智能推荐等领域 为各行各业带来了革命性的改变和机遇 。目前开源人工智能大模型已应用于医疗、政务、法律、汽车、娱乐、金融、互联网、教育、制造业、企业服务等多个场景其中应用于金融、企业服务、制造业和法律领域的大模型在本次调研中占比超过30%。随着AI大模型技术的迅速发展相关岗位的需求也日益增加。大模型产业链催生了一批高薪新职业人工智能大潮已来不加入就可能被淘汰。如果你是技术人尤其是互联网从业者现在就开始学习AI大模型技术真的是给你的人生一个重要建议最后只要你真心想学习AI大模型技术这份精心整理的学习资料我愿意无偿分享给你但是想学技术去乱搞的人别来找我在当前这个人工智能高速发展的时代AI大模型正在深刻改变各行各业。我国对高水平AI人才的需求也日益增长真正懂技术、能落地的人才依旧紧缺。我也希望通过这份资料能够帮助更多有志于AI领域的朋友入门并深入学习。真诚无偿分享vx扫描下方二维码即可加上后会一个个给大家发【附赠一节免费的直播讲座技术大佬带你学习大模型的相关知识、学习思路、就业前景以及怎么结合当前的工作发展方向等欢迎大家~】大模型全套学习资料展示自我们与MoPaaS魔泊云合作以来我们不断打磨课程体系与技术内容在细节上精益求精同时在技术层面也新增了许多前沿且实用的内容力求为大家带来更系统、更实战、更落地的大模型学习体验。希望这份系统、实用的大模型学习路径能够帮助你从零入门进阶到实战真正掌握AI时代的核心技能01教学内容从零到精通完整闭环【基础理论 →RAG开发 → Agent设计 → 模型微调与私有化部署调→热门技术】5大模块内容比传统教材更贴近企业实战大量真实项目案例带你亲自上手搞数据清洗、模型调优这些硬核操作把课本知识变成真本事‌02适学人群应届毕业生‌无工作经验但想要系统学习AI大模型技术期待通过实战项目掌握核心技术。零基础转型‌非技术背景但关注AI应用场景计划通过低代码工具实现“AI行业”跨界‌。业务赋能突破瓶颈传统开发者Java/前端等学习Transformer架构与LangChain框架向AI全栈工程师转型‌。vx扫描下方二维码即可【附赠一节免费的直播讲座技术大佬带你学习大模型的相关知识、学习思路、就业前景以及怎么结合当前的工作发展方向等欢迎大家~】本教程比较珍贵仅限大家自行学习不要传播更严禁商用03入门到进阶学习路线图大模型学习路线图整体分为5个大的阶段04视频和书籍PDF合集从0到掌握主流大模型技术视频教程涵盖模型训练、微调、RAG、LangChain、Agent开发等实战方向新手必备的大模型学习PDF书单来了全是硬核知识帮你少走弯路不吹牛真有用05行业报告白皮书合集收集70报告与白皮书了解行业最新动态0690份面试题/经验AI大模型岗位面试经验总结谁学技术不是为了赚$呢找个好的岗位很重要07 deepseek部署包技巧大全由于篇幅有限只展示部分资料并且还在持续更新中…真诚无偿分享vx扫描下方二维码即可加上后会一个个给大家发【附赠一节免费的直播讲座技术大佬带你学习大模型的相关知识、学习思路、就业前景以及怎么结合当前的工作发展方向等欢迎大家~】

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询