Lanchain提供了加载多种文档的能力,Lanchain初了能加载txt,csv等格式文档外,还支持加载网页,音频,pdf等。本篇博客将介绍如何通过Langchain完成PDF文档,音频文档,网页文档的加载。

   加载PDF文档

  通过使用Langchain提供的PyPDFLoader,可以非常容易的加载一个已有的pdf文档,需要注意一点:使用PyPDFLoader需要安装pip3 install pypdf。

from langchain.document_loaders import PyPDFLoader

loader = PyPDFLoader(
    './chat-with-data/data/cs229_lectures/MachineLearning-Lecture01.pdf')
result = loader.load()
print(type(result))
print(len(result))
print(result[0])
page = result[0]
print(page.page_content)
print(page.metadata)

  加载完成后,打印加载的信息,可以看到结果信息类型是一个List,List的长度是22,这个pdf的页数也是22。所以,存放PDF文档内容是按页来存储的。每一个List中的值,包含page_content和metadata信息。

可以单独获取每一页的page_content和metadata信息,结果如下所示:

当然,上面只是介绍了如何加载PDF文档,实际langchain还支持加载html,csv,txt,json,markdown等格式的文档。更多信息可参考官网

  

加载Youtube的音频信息

  除了支持加载上面提到的,不同格式的本地文档外,Langchain也支持与很多第三方工具集成。如下图所示,langchain支持加载WhatsApp chat中的信息,加载Wikipedia的信息,也支持通过YouTube的url加载文档信息。除了截图显示的上方内容外,实际支持的第三方工具的集成还有很多,具体可查看官网

  下面来看看如何通过youtube的url加载音频文件。对于给定的 YouTube 视频链接 (URL),使用 LangChain 加载器将视频的音频下载到本地,然后使用 OpenAIWhisperPaser 解析器,将音频转化为文本。

from langchain.document_loaders.blob_loaders.youtube_audio import YoutubeAudioLoader
from langchain.document_loaders.generic import GenericLoader
from langchain.document_loaders.parsers import OpenAIWhisperParser

url = "https://www.youtube.com/watch?v=jGwO_UgTS7I"
save_dir = "./chat-with-data/data/youtube"
loader = GenericLoader(
    YoutubeAudioLoader([url], save_dir),
    OpenAIWhisperParser())
result = loader.load()
print(result)
print(type(result))
print(len(result))
print(result[0])

  执行上面的代码,会看到从url中下载audio文件到本地存储目录,然后通过OpenAIWhisperParser() 将音频文件转换成文字。

  查看result的类型,会看到result的长度是1,类型是List,List中值的类型是<class 'langchain.schema.document.Document'>, 文档变量类型包含两个属性,这个和前面加载PDF一样,有一个List,List中每个值类型也是langchain.schema.document.Document,每个Document对象包含page_content和meta_data两个字段。

  • page_content 包含该文档的内容。
  • meta_data 为文档相关的描述性数据。

加载Web Page

  除了通过url加载youtube的audio文件外,也支持通过url加载web page中的内容,这里加载的是一个markdown格式的文档。

from langchain.document_loaders import WebBaseLoader
import json

url = "https://github.com/basecamp/handbook/blob/master/README.md"
header = {'User-Agent': 'python-requests/3.9.6',
          'Accept-Encoding': 'gzip,deflate,br',
          'Accept': '*/*',
          'Connection': 'keep-alive'}
loader = WebBaseLoader(web_path=url, header_template=header)
result = loader.load()
print(type(result))
print(len(result))
# print(result[0])
# print(result[0].page_content)
print(result[0].metadata)
convert_to_json = json.loads(result[0].page_content)
print(convert_to_json)
print(convert_to_json['payload']['blob']['richText'])

  加载后生成的result类型也是List,List的长度是1,result[0]中的数据类型也是‘langchain.schema.document.Document',包含page_content和metadata信息,对于markdown格式的内容,可以看到page_content中除了真正的文档内容,还有很多其他信息。

查看page_content的详细类型,会看到“richText"字段后面才是真正的文档内容信息

 所以,对于有些load过来的内容,可以通过json进行内容格式转换,获取真正的文档内容信息。

print(convert_to_json['payload']['blob']['richText'])获取到的信息就是真正的markdown文本内容信息。

以上,就是对Langchain提供的集中loader的介绍,更多敢于langchain提供的加载文档的能力,可查看官网具体的例子

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐