目标 能够熟练把文件载入到系统中,生成Document 对象。
CSV 默认参数
1 2 3 4 5 6 7 loader = CSVLoader(file_path='./test/csv_test.csv' ) data = loader.load() [Document(page_content='姓名: 张三\n年龄: 23\n成绩: 优秀' , metadata={'source' : './test/csv_test.csv' , 'row' : 0 }), Document(page_content='姓名: 里斯\n年龄: 26\n成绩: 良' , metadata={'source' : './test/csv_test.csv' , 'row' : 1 }), Document(page_content='姓名: 王五\n年龄: 34\n成绩: 可' , metadata={'source' : './test/csv_test.csv' , 'row' : 2 })]
加上参数
1 2 3 4 5 6 7 loader = CSVLoader(file_path='./test/csv_test.csv' , csv_args={ 'delimiter' : ',' , 'quotechar' : '"' , 'fieldnames' : ['姓名' , '年龄' , '成绩' ] }) data = loader.load()
每列前面加上fieldname
1 2 3 4 5 6 [Document(page_content='姓名: 姓名\n年龄: 年龄\n成绩: 成绩' , metadata={'source' : './test/csv_test.csv' , 'row' : 0 }), Document(page_content='姓名: 张三\n年龄: 23\n成绩: 优秀' , metadata={'source' : './test/csv_test.csv' , 'row' : 1 }), Document(page_content='姓名: 里斯\n年龄: 26\n成绩: 良' , metadata={'source' : './test/csv_test.csv' , 'row' : 2 }), Document(page_content='姓名: 王五\n年龄: 34\n成绩: 可' , metadata={'source' : './test/csv_test.csv' , 'row' : 3 })]
指定一列来识别文档来源 使用source_column参数为每行创建的文档指定一个来源。否则,file_path将用作从CSV文件创建的所有文档的来源。当使用从CSV文件加载的文档来回答问题时,这很有用,这样可以在链条中使用来源。
1 2 3 4 5 6 7 loader = CSVLoader(file_path='./test/csv_test.csv' , source_column="姓名" ) [Document(page_content='姓名: 张三\n年龄: 23\n成绩: 优秀' , metadata={'source' : '张三\t' , 'row' : 0 }), Document(page_content='姓名: 里斯\n年龄: 26\n成绩: 良' , metadata={'source' : '里斯' , 'row' : 1 }), Document(page_content='姓名: 王五\n年龄: 34\n成绩: 可' , metadata={'source' : '王五' , 'row' : 2 })]
从文件夹载入
安装
1 2 3 4 5 pip install unstructured pip install "unstructured[md]" loader = DirectoryLoader('./test' , glob="**/*.md" ) docs = loader.load()
显示进度条 show_progress=True
1 loader = DirectoryLoader('../' , glob="**/*.md" , show_progress=True )
使用多线程 use_multithreading=True 默认情况下,加载操作是在单个线程中进行的。为了利用多个线程,请将use_multithreading标志设置为true。
1 loader = DirectoryLoader('../' , glob="**/*.md" , use_multithreading=True )
修改loader类, 自动检测编码格式 ‘autodetect_encoding’: True
TXT 1 2 loader = DirectoryLoader('./test/' , glob="**/*.txt" , loader_cls=TextLoader,loader_kwargs={'autodetect_encoding' : True }) docs = loader.load()
出错忽略,不打断整个载入过程 silent_errors=True
1 2 3 4 5 loader = DirectoryLoader('./test/' , glob="**/*.txt" , silent_errors=True , loader_cls=TextLoader, loader_kwargs={'autodetect_encoding' : True }) docs = loader.load()
Html 1 2 3 4 5 loader = UnstructuredHTMLLoader("./test/Langchain.html" ) data = loader.load() print (data)[Document(page_content='\n\nModules\n\nRetrieval\...ulSoup4' , metadata={'source' : './test/Langchain.html' })]
用BeautifulSoup4载入html 注意:需要设置 open_encoding=’utf-8’ 来应对gpk 解码错误
1 2 3 4 5 6 7 8 loader = BSHTMLLoader("./test/Langchain.html" ,open_encoding='utf-8' ) data = loader.load() print (data)pass [Document(page_content='\n\nHTML | 🦜️🔗 Langchain... mepageBlogYouTubeCopyright © 2024 LangChain, Inc.\n\n\n' , metadata={'source' : './test/Langchain.html' , 'title' : 'HTML | 🦜️🔗 Langchain' })]
Markdown 1 2 3 4 5 6 7 8 9 loader = UnstructuredMarkdownLoader('D:\\LLM\\my_projects\\leanr_django_rag\\day_try\\test\\md-test.md' ) data = loader.load() print (data)pass [Document(page_content='CSV\n\n默认参数\n\nPython\nl...' , metadata={'source' : 'D:\\LLM\\my_projects\\leanr_django_rag\\day_try\\test\\md-test.md' })]
细颗粒度文本收集 mode=”elements”
1 2 3 4 5 6 loader = UnstructuredMarkdownLoader('D:\\LLM\\my_projects\\leanr_django_rag\\day_try\\test\\md-test.md' ,mode="elements" ) [Document(page_content='CSV' , ... Document(page_content='默认参数' , .. Document(page_content="Python\nloader ..loader.load()" ,.. Document(page_content="Python\n[D... " Document(page_content='加上参数' , metadata={'source' :
PDF 安装(虚拟环境)
1 2 3 4 5 pip install pypdf loader = PyPDFLoader("test/pdf_带图带文字.pdf" ) pages = loader.load_and_split() print (pages[0 ]) pass
输出: 只解析了文字,没有识别图片中的文字
1 [Document(page_content="test pdf loader\n图⽚\x00闻\n午\x00时间\x00\x00吗\x00\n快\x00连锁\x00温\x00( Wendy's )否认\x00有\x00其\x00对其菜单实\x00\x00\x00\x00\x00的报\x00。\x00\x00\x00\x00是 Uber 和其\n他\x00业采⽤的⼀种策略,\x00在需\x00\x00加的任何时\x00提\x00\x00格。这\x00味\x00,\x00果温\x00的 Pretzel\nBaconators 需\x00\x00\x00,顾\x00可\x00需\x00\x00付更\x00的\x00格。\x00⽽,该\x00司\x00\x00说,\x00\x00实\x00的不是\x00\n\x00\x00\x00,⽽是\x00过其\x00的\x00\x00菜单\x00实⾏ “ 动态\x00\x00 ” 。这种动态\x00\x00策略\x00许温\x00在⼀\x00中较\x00的" , metadata={'source' : 'test/pdf_带图带文字.pdf' , 'page' : 0 }), Document(page_content='时\x00显⽰\x00扣。需\x00\x00\x00的是,动态\x00\x00\x00\x00\x00\x00\x00不同,\x00不\x00\x00基于需\x00的涨\x00。相\x00,\x00使\n\x00业\x00\x00\x00据需\x00变\x00实时调\x00\x00格。这种\x00技术的\x00⽤\x00映\x00\x00\x00\x00业\x00据顾\x00需\x00优\x00\x00\x00策\n略的⽇\x00\x00⻓的趋势。' , metadata={'source' : 'test/pdf_带图带文字.pdf' , 'page' : 1 })]
咋办 ?安装
1 pip install rapidocr-onnxruntime
带参数 extract_images=True
1 2 loader = PyPDFLoader("test/pdf_带图带文字.pdf" ,extract_images=True ) [Document(page_content='test pdf loader\n图⽚\x00闻\n午\x00时间\x00\x00吗\x00\n快\x00连锁\x00温\x00( Wendy\'s )否认\x00有\x00其\x00对其菜单实\x00\x00\x00\x00\x00的报\x00。\x00\x00\x00\x00是 Uber 和其\n他\x00业采⽤的⼀种策略,\x00在需\x00\x00加的任何时\x00提\x00\x00格。这\x00味\x00,\x00果温\x00的 Pretzel\nBaconators 需\x00\x00\x00,顾\x00可\x00需\x00\x00付更\x00的\x00格。\x00⽽,该\x00司\x00\x00说,\x00\x00实\x00的不是\x00\n\x00\x00\x00,⽽是\x00过其\x00的\x00\x00菜单\x00实⾏ “ 动态\x00\x00 ” 。这种动态\x00\x00策略\x00许温\x00在⼀\x00中较\x00的Timedforlunch?\nWendy\'s,afast-foodchain\ndeniedreportsthatitwould\nintroducesurgepricingforits\nmenu.Surgepricingisusedby\nUberandotherbusinessesto\nraisepriceswhendemand\nincreasesatanygiventime,so\ncustomersatWendy\'swould\npaymoreiftherewasasurge\nindemandforitsPretzel\nBaconators.Thecompanysaid\nthatinsteaditsnewdigital\nmenuboardswouldbringin\n"dynamicpricing”,whichis\nnotsurgepricing,itinsisted,\nbutallowsittodisplaydis-\ncounts“particularlyinthe\nslowertimesofday"New\ntechnologyisincreasingly\nallowingmanybusinessesto\nadjusttheirpricesinrealtime\ntochangesindemand.' , metadata={'source' : 'test/pdf_带图带文字.pdf' , 'page' : 0 }), Document(page_content='时\x00显⽰\x00扣。需\x00\x00\x00的是,动态\x00\x00\x00\x00\x00\x00\x00不同,\x00不\x00\x00基于需\x00的涨\x00。相\x00,\x00使\n\x00业\x00\x00\x00据需\x00变\x00实时调\x00\x00格。这种\x00技术的\x00⽤\x00映\x00\x00\x00\x00业\x00据顾\x00需\x00优\x00\x00\x00策\n略的⽇\x00\x00⻓的趋势。' , metadata={'source' : 'test/pdf_带图带文字.pdf' , 'page' : 1 })]
完整代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 import osimport uuidfrom langchain.memory import ConversationBufferMemoryfrom langchain_community.chat_models.azure_openai import AzureChatOpenAIfrom langchain_community.chat_models.baidu_qianfan_endpoint import QianfanChatEndpointfrom langchain_community.document_loaders.csv_loader import CSVLoaderfrom langchain_community.document_loaders.directory import DirectoryLoaderfrom langchain_community.document_loaders.html import UnstructuredHTMLLoaderfrom langchain_community.document_loaders.html_bs import BSHTMLLoaderfrom langchain_community.document_loaders.markdown import UnstructuredMarkdownLoaderfrom langchain_community.document_loaders import PyPDFLoaderfrom langchain_community.document_loaders.pdf import MathpixPDFLoaderfrom langchain_community.document_loaders.text import TextLoaderfrom langchain_community.embeddings import QianfanEmbeddingsEndpointfrom langchain_community.llms.baidu_qianfan_endpoint import QianfanLLMEndpointfrom langchain_community.vectorstores.chroma import Chromafrom langchain_core.messages import HumanMessage, SystemMessagefrom langchain_core.output_parsers import StrOutputParser, CommaSeparatedListOutputParserfrom langchain_core.prompt_values import ChatPromptValuefrom langchain_core.prompts import ChatPromptTemplate, PromptTemplate, MessagesPlaceholderfrom langchain_core.runnables import RunnablePassthrough, RunnableParallel, RunnableLambda, ConfigurableFieldfrom operator import itemgetterfrom langchain_core.pydantic_v1 import BaseModel, Fieldif __name__ == '__main__' : loader = CSVLoader(file_path='./test/csv_test.csv' ) data = loader.load() loader = CSVLoader(file_path='./test/csv_test.csv' , csv_args={ 'delimiter' : ',' , 'quotechar' : '"' , 'fieldnames' : ['姓名' , '年龄' , '成绩' ] }) data = loader.load() print (data) loader = CSVLoader(file_path='./test/csv_test.csv' , source_column="姓名" ) data = loader.load() print (data) pass loader = DirectoryLoader('./test' , glob="**/*.md" ) docs = loader.load() len (docs) pass loader = DirectoryLoader('../' , glob="**/*.md" , show_progress=True ) docs = loader.load() pass loader = DirectoryLoader('../' , glob="**/*.md" , use_multithreading=True ) docs = loader.load() pass loader = DirectoryLoader('./test/' , glob="**/*.txt" , loader_cls=TextLoader,loader_kwargs={'autodetect_encoding' : True }) docs = loader.load() pass loader = UnstructuredHTMLLoader("./test/Langchain.html" ) data = loader.load() print (data) pass loader = BSHTMLLoader("./test/Langchain.html" ,open_encoding='utf-8' ) data = loader.load() print (data) pass loader = UnstructuredMarkdownLoader('D:\\LLM\\my_projects\\leanr_django_rag\\day_try\\test\\md-test.md' ) data = loader.load() print (data) pass loader = UnstructuredMarkdownLoader('D:\\LLM\\my_projects\\leanr_django_rag\\day_try\\test\\md-test.md' ,mode="elements" ) data = loader.load() print (data) pass loader = PyPDFLoader("test/pdf_带图带文字.pdf" ) pages = loader.load_and_split() print (pages[0 ]) pass loader = PyPDFLoader("test/pdf_带图带文字.pdf" ,extract_images=True ) pages = loader.load_and_split() print (pages[0 ])
Langchain系列[10]文档加载 Document loader
转载前请阅读本站 版权协议 ,文章著作权归 粥余 所有,转载请注明出处。