在前面的文章中,我们已经介绍了以chatpdf,langchain为代表的文档大模型问答方案。
其中一个很重要的部分就是对文档进行切割个组织。
不过,在很多场景中,包括PDF、excel,doc中有有很多的表格数据,如何对表格数据进行组织,并为大模型所认识,显得尤为重要。
因此,带着这个话题,本文主要从PDF提取表格的几种开源方法以及表格的几种不同表示方法两个方面进行介绍,并对今日大模型最新动向进行速递
一、PDF提取表格的几种开源方法
1、pdfplumber
地址:
#extract_tables()用法
with pdfplumber.open(r'test.pdf') as pdf_info: # 打开pdf文件
page_one = pdf_info.pages[0] # 选择第一页
page_one_table =page_one.extract_tables() # 获取pdf文档第一页的所有表格数据
for row in page_one_table:
print('第一页的表格数据:', row)
2、camelot
地址:camelot-dev/camelot
import camelot
tables = camelot.read_pdf('foo.pdf') #类似于Pandas打开CSV文件的形式
tables.export('foo.csv', f='csv', compress=True) # json, excel, html, sqlite,可指定输出格式
tables[0].to_csv('foo.csv') # to_json, to_excel, to_html, to_sqlite, 导出数据为文件
3、ppstructure
和前几个不同,ppstruture可以提取图片版本的pdf。
地址:
二、表格的几种不同表示方法
1、text表示
+------+------+------+----------+----------+
| 班级 | 姓名 | 性别 | 语文成绩 | 数学成绩 |
+------+------+------+----------+----------+
| 1 | 张三 | 男 | 88 | 88 |
+------+------+------+----------+----------+
| 1 | 李四 | 女 | 78 | |
+------+------+------+----------+----------+
2、latext表示
表达方式:
\begin{table}[]
\begin{tabular}{lllll}
班级 & 姓名 & 性别 & 语文成绩 & 数学成绩 \\
1 & 张三 & 男 & 88 & 88 \\
1 & 李四 & 女 & 78 &
\end{tabular}
\end{table}
3、HTML表示
HTML表示表格,使用table\thead\tr\td标签来表示具体的单元数据。
"tg">
"tg-0pky">班级
"tg-0pky">姓名
"tg-0pky">性别
"tg-0pky">语文成绩
"tg-0pky">数学成绩
"tg-0pky">1
"tg-0pky">张三
"tg-0pky">男
"tg-0pky">88
"tg-0pky">88
"tg-0pky">1
"tg-0pky">李四
"tg-0pky">女
"tg-0pky">78
"tg-0pky">
4、markdown表示
Markdown表语法非常简单。
它不允许行或单元格跨越以及将多行文本放在单元格中。第一行总是标题,后跟一条带有破折号“-”和可选冒号“:”的额外行,用于强制对齐列。
| 班级 | 姓名 | 性别 | 语文成绩 | 数学成绩 |
|------|------|------|----------|----------|
| 1 | 张三 | 男 | 88 | 88 |
| 1 | 李四 | 女 | 78 | |
5、Mediawiki
MediaWiki是一款免费的开源软件,用于为维基百科和许多其他维基等网站提供表格表示方法。
{| class="wikitable"
|-
! 班级
! 姓名
! 性别
! 语文成绩
! 数学成绩
|-
| 1
| 张三
| 男
| 88
| 88
|-
| 1
| 李四
| 女
| 78
|
|}
三、今日大模型速递
1、大模型测试Zoo
文生图开源模型试炼场,可根据输入文字同时用stable-diffusion 1.5、stable-diffusion 2.1、DALL-E、kandinsky-2等模型生成图像,统一比较。
地址:
2、大模型微调lora-ImageBind
使用lora,来Fine-tuning Meta的多模态向量化论文"ImageBind One Embedding Space to Bind Them All"。
其中,ImageBind 可以学习 a joint embedding across six different modalities - images, text, audio, depth, thermal, and IMU data
地址:github.com/fabawi/ImageBind-LoRA
3、大模型课程LLM University
大型语言模型(LLM)课程,涵盖了建立和使用文本表示和文本生成模型的内容。其中,理论部分包括实例讲解,实践部分包含代码示例。
地址:
参考文献
1、
2、camelot-dev/camelot
关于我们
老刘,刘焕勇,NLP开源爱好者与践行者,主页:。
老刘说NLP,将定期发布语言资源、工程实践、技术总结等内容,欢迎关注。
对于想加入更优质的知识图谱、事件图谱实践、相关分享的,可关注公众号,在后台菜单栏中点击会员社区->会员入群加入。
BeautifulSoup,一个解析HTML与XML文档无敌的 Python 库!
#小伙伴们,今天我们要一起探索一个超级强大的Python库——**BeautifulSoup**!
它可是解析HTML和XML文档的利器,无论是网页爬虫还是数据处理,BeautifulSoup都能帮我们轻松搞定。
接下来,就让我们一起踏上BeautifulSoup的学习之旅吧!
## 一、BeautifulSoup初相识
### 安装BeautifulSoup
首先,我们需要安装BeautifulSoup库。打开你的命令行工具,输入以下命令:
```bash
pip install beautifulsoup4
同时,BeautifulSoup通常需要配合解析器一起使用,比如lxml或html.parser。这里我们推荐安装lxml,因为它速度更快,功能更强。
pip install lxml
安装完成后,我们就可以开始使用BeautifulSoup来解析HTML文档了。
解析HTML文档
from bs4 import BeautifulSoup
# 一个简单的HTML文档字符串
html_doc = """
猿梦家的BeautifulSoup教程
欢迎来到BeautifulSoup的世界!
这是一个解析HTML与XML文档的无敌Python库。
"""
# 使用BeautifulSoup解析HTML文档
soup = BeautifulSoup(html_doc, 'lxml') # 也可以使用'html.parser'作为解析器
# 打印解析后的文档树
print(soup.prettify())
上面的代码会输出格式化后的HTML文档,让我们可以清晰地看到文档的结构。
小贴士二、BeautifulSoup的基本用法查找标签
BeautifulSoup提供了多种查找标签的方法,让我们可以轻松地定位到文档中的特定元素。
# 查找标题标签
title_tag = soup.title
print(title_tag.string) # 输出标题内容
# 查找所有的段落标签
p_tags = soup.find_all('p')
for p in p_tags:
print(p.get_text()) # 输出段落内容
上面的代码演示了如何查找标题标签和所有的段落标签,并输出它们的内容。
小贴士查找带属性的标签
有时候,我们需要查找带有特定属性的标签。BeautifulSoup也提供了相应的方法。
# 假设有一个带有id属性的div标签
html_doc = """
这是主要内容。
"""
soup = BeautifulSoup(html_doc, 'lxml')
# 查找带有id属性的div标签
div_tag = soup.find('div', id='main-content')
print(div_tag.get_text()) # 输出div标签中的内容
上面的代码演示了如何查找带有id属性的div标签,并输出它的内容。
小贴士三、BeautifulSoup的高级用法CSS选择器
BeautifulSoup还支持使用CSS选择器来查找标签,这让我们可以更灵活地定位到文档中的元素。
# 使用CSS选择器查找标签
html_doc = """
这是引言。
这是正文。
"""
soup = BeautifulSoup(html_doc, 'lxml')
# 查找所有带有'content'类的div标签中的p标签
p_tags = soup.select('div.content p')
for p in p_tags:
print(p.get_text()) # 输出p标签中的内容
上面的代码演示了如何使用CSS选择器查找带有特定类的标签,并输出它们的内容。
小贴士修改文档树
BeautifulSoup不仅可以用来解析文档,还可以用来修改文档树。
# 修改文档树
html_doc = """
这是一个段落。
"""
soup = BeautifulSoup(html_doc, 'lxml')
# 查找段落标签并添加一个新的标签
p_tag = soup.p
new_tag = soup.new_tag('a', href='https://www.yuandreamer.com')
new_tag.string = '点击这里访问猿梦家的网站'
p_tag.append(new_tag)
# 打印修改后的文档树
print(soup.prettify())
上面的代码演示了如何查找一个标签,并向其中添加一个新的标签。
小贴士四、BeautifulSoup的实战应用网页爬虫
BeautifulSoup是网页爬虫的得力助手。我们可以使用它来解析网页,并提取出我们感兴趣的信息。
import requests
from bs4 import BeautifulSoup
# 发送HTTP请求获取网页内容
url = 'https://example.com'
response = requests.get(url)
html_doc = response.text
# 使用BeautifulSoup解析网页内容
soup = BeautifulSoup(html_doc, 'lxml')
# 查找并打印网页的标题
title_tag = soup.title
print(title_tag.string)
上面的代码演示了如何使用BeautifulSoup和requests库来爬取一个网页,并提取出网页的标题。
数据处理
BeautifulSoup也可以用于数据处理,比如从HTML格式的报告中提取数据。
# 假设有一个HTML格式的报告
html_report = """
姓名
成绩
小明
90
小红
85
"""
soup = BeautifulSoup(html_report, 'lxml')
# 提取表格中的数据
rows = soup.find_all('tr')
for row in rows:
cols = row.find_all('td')
if cols:
name = cols[0].get_text()
score = cols[1].get_text()
print(f'姓名:{name},成绩:{score}')
上面的代码演示了如何使用BeautifulSoup来解析一个HTML格式的报告,并提取出表格中的数据。
五、总结与实践
小伙伴们,今天我们一起学习了BeautifulSoup库的基础知识,包括如何安装和导入BeautifulSoup,如何解析HTML文档,如何查找和修改标签,以及BeautifulSoup在网页爬虫和数据处理中的实际应用。BeautifulSoup是一个非常强大的库,它还有很多高级特性等待我们去探索,比如如何处理复杂的文档结构,如何使用正则表达式进行高级搜索等。
现在,是时候动手实践了!你可以尝试使用BeautifulSoup来爬取一个你感兴趣的网页,并提取出其中的一些信息。或者,你也可以尝试解析一个你熟悉的HTML格式的报告,并提取出其中的数据。
记得动手敲代码,有问题随时在评论区问猿小哥哦。祝大家学习愉快,Python学习节节高!