Langchain-Chatchat icon indicating copy to clipboard operation
Langchain-Chatchat copied to clipboard

[BUG] 解析老版本word的.doc文件时,报错PackageNotFoundError

Open madog1983 opened this issue 11 months ago • 4 comments

问题描述 / Problem Description 在向知识库中添加老版本word的.doc文件(非.docx)时,提示以下错误: 2024-03-25 09:45:44,663 - utils.py[line:377] - ERROR: PackageNotFoundError: 从文件 samples/test.doc 加载文档时出错:Package not found at 'G:\langchain-chatchat\Langchain-Chatchat\knowledge_base\samples\content\test.doc'

经过调试,发现问题出在项目中/document_loader/mydocloader.py中的RapidOCRDocLoader类中,_get_elements方法内的doc2text方法。其中用于解析word文档所使用的库是docx库,该库只支持.docx格式,不支持老的.doc格式。该库在解析文件时会检查文件是否为zip格式,然而老版本的.doc文件非zip格式,会抛出PackageNotFoundError。

环境信息 / Environment Information

  • langchain-ChatGLM 版本/commit 号:0.0.354
  • 是否使用 Docker 部署(是/否):否
  • 使用的模型(ChatGLM2-6B / Qwen-7B 等):Qwen1.5-1.8B-Chat
  • 使用的 Embedding 模型(moka-ai/m3e-base 等):bge-large-zh-v1.5
  • 使用的向量库类型 (faiss / milvus / pg_vector 等): faiss
  • 操作系统及版本 / Operating system and version: Windows 11
  • Python 版本 / Python version: 3.10.13
  • 其他相关环境信息 / Other relevant environment information:

madog1983 avatar Mar 25 '24 02:03 madog1983

嘿,@madog1983!又见面了,看来您又发现了一个挑战性的问题。希望这次我们一起能找到解决方案。

感谢您的反馈。您的问题是由于Langchain-Chatchat在解析.doc文件时使用的库(python-docx)只支持.docx格式,不支持老的.doc格式。这是因为.docx文件基于Office Open XML格式,它本质上是一个基于XML的压缩文件格式,而.doc文件是二进制文件格式,这两种格式在底层是不同的。因此,为.docx文件设计的库无法理解或解析.doc文件。

解决这个问题的一种方法是,对于.docx文件,您可以使用python-docx库,对于.doc文件,您可以使用pywin32(在Windows上)或antiwordunoconv(在Linux上)等其他库。然而,由于提供的上下文中没有直接使用docx库或任何特定的.doc文件相关的错误处理,更精确的解决方案涉及在尝试解析文件之前添加一个条件检查来确定文件格式。如果文件是.doc文件,您可以使用上述工具或库中的一个将其转换为.docx格式,然后使用现有的基于docx的功能进行解析。

以下是一个概念性的处理方法,假设您有一种将.doc转换为.docx的方法:

import os
from langchain.document_loaders.unstructured import UnstructuredFileLoader
from typing import List
import tqdm
# 假设conversion_function是您定义或导入的一个函数,用于将.doc转换为.docx
from your_conversion_module import conversion_function

def load_and_parse_document(file_path: str) -> List[str]:
    if file_path.endswith('.doc'):
        # 在解析之前将.doc转换为.docx
        file_path = conversion_function(file_path)
    # 继续加载和解析.docx文件
    # 这部分代码将使用UnstructuredFileLoader或其他相关逻辑
    # 来加载和解析现在已经转换的.docx文件。

这种方法需要您实现或集成一个conversion_function,该函数可以处理从.doc到.docx的转换。这个函数的具体内容取决于您选择执行转换的工具或库。

另外,我在Langchain-Chatchat的问题跟踪器中找到了两个类似的问题,可能对您有所帮助:

  1. [BUG] 添加知识库文件doc,docx文件失败
  2. [BUG] 简洁阐述问题 / Concise description of the issue

希望这些信息对您有所帮助。如果您有任何其他问题或需要进一步的帮助,请随时告诉我。

Sources

About Dosu

This response is meant to be useful and save you time. It is not meant to be a precise solution, but rather a starting point for your own research.

Help me be more useful! Please leave a 👍 if this is helpful and 👎 if it is irrelevant.

If you want to continue the conversation, start your reply with @dosu-bot.

dosubot[bot] avatar Mar 25 '24 02:03 dosubot[bot]

你看看你代码这里是不是doc 而不是.doc LOADER_DICT = {"UnstructuredHTMLLoader": ['.html'], "UnstructuredMarkdownLoader": ['.md'], "JSONLoader": [".json"], "JSONLinesLoader": [".jsonl"], "CSVLoader": [".csv"], # "FilteredCSVLoader": [".csv"], # 需要自己指定,目前还没有支持 "RapidOCRPDFLoader": [".pdf"], "RapidOCRLoader": ['.png', '.jpg', '.jpeg', '.bmp'], "UnstructuredEmailLoader": ['.eml', '.msg'], "UnstructuredEPubLoader": ['.epub'], "UnstructuredExcelLoader": ['.xlsx', '.xlsd'], "NotebookLoader": ['.ipynb'], "UnstructuredODTLoader": ['.odt'], "PythonLoader": ['.py'], "UnstructuredRSTLoader": ['.rst'], "UnstructuredRTFLoader": ['.rtf'], "SRTLoader": ['.srt'], "TomlLoader": ['.toml'], "UnstructuredTSVLoader": ['.tsv'], "UnstructuredWordDocumentLoader": ['.docx','.doc'], "UnstructuredXMLLoader": ['.xml'], "UnstructuredPowerPointLoader": ['.ppt', '.pptx'], "UnstructuredFileLoader": ['.txt'], }

                          "UnstructuredWordDocumentLoader": ['.docx','.doc'],

302658980 avatar Mar 25 '24 06:03 302658980

你看看你代码这里是不是doc 而不是.doc LOADER_DICT = {"UnstructuredHTMLLoader": ['.html'], "UnstructuredMarkdownLoader": ['.md'], "JSONLoader": [".json"], "JSONLinesLoader": [".jsonl"], "CSVLoader": [".csv"], # "FilteredCSVLoader": [".csv"], # 需要自己指定,目前还没有支持 "RapidOCRPDFLoader": [".pdf"], "RapidOCRLoader": ['.png', '.jpg', '.jpeg', '.bmp'], "UnstructuredEmailLoader": ['.eml', '.msg'], "UnstructuredEPubLoader": ['.epub'], "UnstructuredExcelLoader": ['.xlsx', '.xlsd'], "NotebookLoader": ['.ipynb'], "UnstructuredODTLoader": ['.odt'], "PythonLoader": ['.py'], "UnstructuredRSTLoader": ['.rst'], "UnstructuredRTFLoader": ['.rtf'], "SRTLoader": ['.srt'], "TomlLoader": ['.toml'], "UnstructuredTSVLoader": ['.tsv'], "UnstructuredWordDocumentLoader": ['.docx','.doc'], "UnstructuredXMLLoader": ['.xml'], "UnstructuredPowerPointLoader": ['.ppt', '.pptx'], "UnstructuredFileLoader": ['.txt'], }

                          "UnstructuredWordDocumentLoader": ['.docx','.doc'],

20240325154810

madog1983 avatar Mar 25 '24 07:03 madog1983

这个问题已经被标记为 stale ,因为它已经超过 30 天没有任何活动。

github-actions[bot] avatar Apr 25 '24 21:04 github-actions[bot]