用目录读取器加载中文 txt,索引里全是问号和方块,问什么都是无关答案。

一开始怀疑是「递归读取把二进制文件也当成文本」,查了一圈,方向不对。

原因不止一个,得分开看。读取器默认按 UTF-8 打开,文件实际是 GBK。也可能是文件带 BOM,首个文档混入不可见字符。

少数情况下是分词器对中文支持差,切分粒度太粗。

第一件事是检测文件编码再读取

python -c "import chardet;print(chardet.detect(open('a.txt','rb').read(10000)))"

然后按检测结果转成统一编码

python -c "open('a.txt',encoding='gb18030').read()[:50]"

接着读取时限定扩展名,跳过二进制

docs = SimpleDirectoryReader('./data', required_exts=['.txt','.md']).load_data()

末了抽查索引里的文本内容

python -c "print(docs[0].text[:80])"

这台环境是别人交接的,不少默认值被动过,只能一项项核。

改完先别撤,确认这几项。加载出来的文本中文正常,索引里能检索到关键词,问答结果与文档内容对应。

这里还有个坑。乱码不会让流程中断,只会让检索彻底失效,接入新数据源时先抽查几条文本比直接建索引更省时间。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189