由于编码问题,无法使用 TextLoader 从 langchain.document_loaders 库读取文本数据文件

Rit*_*ito 1 file-format langchain py-langchain

我是 Langchain 的新手,我遇到了一个问题。我的最终目标是读取文件的内容并创建数据的矢量存储,以便稍后查询。

from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.text_splitter import CharacterTextSplitter
from langchain.vectorstores import FAISS
from langchain.document_loaders import TextLoader


loader = TextLoader("elon_musk.txt")
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)
Run Code Online (Sandbox Code Playgroud)

我的数据文件似乎存在一些问题,因此它无法读取我的文件的内容。是否可以加载 utf-8 格式的文件?我的假设是使用 utf-8 编码我不应该遇到这个问题。

以下是我在代码中遇到的错误:

---------------------------------------------------------------------------
UnicodeDecodeError                        Traceback (most recent call last)
File ~\anaconda3\envs\langchain-test\lib\site-packages\langchain\document_loaders\text.py:41, in TextLoader.load(self)
     40     with open(self.file_path, encoding=self.encoding) as f:
---> 41         text = f.read()
     42 except UnicodeDecodeError as e:

File ~\anaconda3\envs\langchain-test\lib\encodings\cp1252.py:23, in IncrementalDecoder.decode(self, input, final)
     22 def decode(self, input, final=False):
---> 23     return codecs.charmap_decode(input,self.errors,decoding_table)[0]

UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 1897: character maps to <undefined>

The above exception was the direct cause of the following exception:

RuntimeError                              Traceback (most recent call last)
Cell In[1], line 8
      4 from langchain.document_loaders import TextLoader
      7 loader = TextLoader("elon_musk.txt")
----> 8 documents = loader.load()
      9 text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
     10 docs = text_splitter.split_documents(documents)

File ~\anaconda3\envs\langchain-test\lib\site-packages\langchain\document_loaders\text.py:54, in TextLoader.load(self)
     52                 continue
     53     else:
---> 54         raise RuntimeError(f"Error loading {self.file_path}") from e
     55 except Exception as e:
     56     raise RuntimeError(f"Error loading {self.file_path}") from e

RuntimeError: Error loading elon_musk.txt
Run Code Online (Sandbox Code Playgroud)

感谢任何可以帮助我解锁的建议。

小智 6

我刚刚遇到了同样的问题。代码在 Colab (Unix) 中运行良好,但在 VS code 中则不然。尝试了马克的建议,但没有成功。检查 VSCode 的编码首选项是否为 UTF-8。已验证两台计算机上的文件完全相同。甚至确保他们有相同的 python 版本!

这对我有用。使用TextLoader时,这样做:

loader = TextLoader("elon_musk.txt", encoding = 'UTF-8')
Run Code Online (Sandbox Code Playgroud)

当使用 DirectoryLoader 时,而不是这样:

loader = DirectoryLoader("./new_articles/", glob="./*.txt",   loader_cls=TextLoader)
Run Code Online (Sandbox Code Playgroud)

做这个:

text_loader_kwargs={'autodetect_encoding': True}
loader = DirectoryLoader("./new_articles/", glob="./*.txt", loader_cls=TextLoader, loader_kwargs=text_loader_kwargs)
Run Code Online (Sandbox Code Playgroud)