Я пытаюсь извлечь каждую ссылку из PDF. Я могу получить каждую гиперссылку, используя этот код:
folder = "test_folder"
folder_data = [os.path.join(dp, f) for dp, dn, filenames in os.walk(folder) for f in filenames if os.path.splitext(f)[1] == '.pdf']
data = [loc.replace("\\", "/") for loc in folder_data]
for loc in data:
doc = fitz.open(loc)
#color_check(doc, count)
file_name = loc.split("/")[-1]
print (f"INFO: Crawling over file {file_name}, number {count} of {len(data)}")
count += 1
for page in doc:
links = page.getLinks()
print(links)
for link in links:
uri_rect = []
uri_rect.append([round(link['from'][0], 2), round(link['from'][1], 2), round(link['from'][2], 2), round(link['from'][3], 2)])
words_in_document = page.getTextWords()
#print(links)
for word in words_in_document:
word_rect = []
word_rect.append([round(word[0], 2), round(word[1], 2), round(word[2], 2), round(word[3], 2)])
rect_dif_percentage = len(set(uri_rect[0])&set(word_rect[0])) / float(len(set(uri_rect[0]) | set(word_rect[0]))) * 100
if rect_dif_percentage >= 60:
#If link links to a file
try:
referenced_file_name = link['file'].split("/")[1]
referenced_file_path = link['file'].split("/")[0]
for file_loc in range(len(data)):
if referenced_file_name in data[file_loc]:
referenced_file_path = data[file_loc]
output.append([loc, word[4], referenced_file_path])
#If link links to a website
except:
referenced_file_name = "N/A"
referenced_file_path = link['uri']
output.append([loc, word[4], referenced_file_path])
with open("output.csv", "a", newline="") as f:
writer = csv.writer(f)
writer.writerows(output)
print("INFO: Crawling completed, you can close this window and check output.csv")
Проблема заключается в следующем. Если гиперссылка содержит более одного слова, я не смогу получить второе слово, так как я использую прямоугольник, найденный в page.getLinks (), и этот метод находит только первое слово гиперссылки.
Так, например, следующая гиперссылка: Click me!
Мой код сможет получить только строку '' Click ''.
Что может Я делаю, чтобы решить эту проблему? Я застрял и не могу думать ни о чем. Кроме того, если у вас есть другое решение без использования PyMuPDF, они приветствуются!