gpt4 book ai didi

python - 在新的 pandas 列中附加 pdf 中的迭代匹配模式

转载 作者:行者123 更新时间:2023-12-01 06:49:02 25 4
gpt4 key购买 nike

我有一个包含物种名称的数据集。我想从 pdf 文件中检索每个物种的作者身份,并在新列中添加新名称(带有作者身份)。

我很难在我的数据集中迭代地附加每个新名称。我尝试了 appendconcat 但没有成功。

表格如下所示:

>>> pandas.read_csv('data.csv')[0:10]
id_ref id_sp species
0 20053 60645 Species Subspecies
1 20053 61094 Acantholimon lycopodioides
2 20053 61095 Achillea millefolium
3 20053 61096 Aconitum chasmanthum
4 20053 61097 Aconitum heterophyllum
5 20053 61098 Aconitum laeve
6 20053 61099 Aconitum rotundifolium
7 20053 61100 Aconitum violaceum
8 20053 61101 Aconogonon alpinum
9 20053 61102 Aconogonon rumicifolium

这是迄今为止我的代码:

from PyPDF2 import PdfFileReader
import pandas
import regex

table = pandas.read_csv('mydata.csv')
table['full_name'] = ''

tmp = []

pdf = 'myfile.pdf'
pdf_r = PdfFileReader(pdf)
page_rg = range(29, 225)
for p in page_rg:
page = pdf_r.getPage(p)
text = page.extractText()
tmp.append(text)

full_text = ''.join(tmp)

for sp in table.species:
sp_re = sp + r'\s+[(A-Z][^:(\/]+(?=\s)'
if regex.search(sp_re, full_text):
full_name = regex.findall(sp_re, full_text)
else:
full_name = ''
# line of code to add the matched string in the 'full_name' column

在循环中打印 full_name 给出以下结果:


['Acantholimon lycopodioides (Girard) Boiss.']
['Achillea millefolium L.']
['Aconitum chasmanthum Stapf ex Holmes']
['Aconitum heterophyllum Wall. ex Royle']
['Aconitum laeve Royle']
['Aconitum rotundifolium Kar. & Kir.']
['Aconitum violaceum Jacquem. ex Stapf']
['Aconogonon alpinum (All.) Schur']
['Aconogonon rumicifolium (Royle ex Bab.) Hara']

所需的输出是:

   id_ref  id_sp                     species                                     full_name
0 20053 60645 Species Subspecies
1 20053 61094 Acantholimon lycopodioides Acantholimon lycopodioides (Girard) Boiss.
2 20053 61095 Achillea millefolium Achillea millefolium L.
3 20053 61096 Aconitum chasmanthum Aconitum chasmanthum Stapf ex Holmes
4 20053 61097 Aconitum heterophyllum Aconitum heterophyllum Wall. ex Royle
5 20053 61098 Aconitum laeve Aconitum laeve Royle
6 20053 61099 Aconitum rotundifolium Aconitum rotundifolium Kar. & Kir.
7 20053 61100 Aconitum violaceum Aconitum violaceum Jacquem. ex Stapf
8 20053 61101 Aconogonon alpinum Aconogonon alpinum (All.) Schur
9 20053 61102 Aconogonon rumicifolium Aconogonon rumicifolium (Royle ex Bab.) Hara

最佳答案

您可以使用 enumerate 和 pandas iloc 来修改循环并随时填充全名列。我修改了下面代码中的循环,以便您可以执行此操作:

for i, sp in enumerate(table.species):
sp_re = sp + r'\s+[(A-Z][^:(\/]+(?=\s)'
if regex.search(sp_re, full_text):
full_name = regex.findall(sp_re, full_text)
else:
full_name = ''
table.full_name.iloc[i] = full_name

从您的问题来看,full_name 可能采用列表格式。在这种情况下,您可以在将其分配给表数据帧时将 full_name 更改为 full_name[0],以仅获取列表中的字符串。

关于python - 在新的 pandas 列中附加 pdf 中的迭代匹配模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59107287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com