搜索不出结果,问题出在哪?
#pip install PyPDF2import os
import re
from PyPDF2 import PdfReader
def search_keywords_in_pdf_directory(directory, keyword):
# 获取目录下的所有PDF文件路径
pdf_files =
results = []
for pdf_file in pdf_files:
with open(pdf_file, 'rb') as file:
pdf = PdfReader(file)
for page_num, page in enumerate(pdf.pages, start=1):
text = page.extract_text()
# 使用正则表达式在文本中搜索关键字
pattern = re.compile(r'\b{}\b'.format(keyword), flags=re.IGNORECASE)
matches = re.finditer(pattern, text)
for match in matches:
match_text = match.group(0)
match_page = page_num + 1
# 获取关键字所在的行及其上下行内容
lines = text.split('\n')
start_line = max(match.start() - 1, 0)
end_line = min(match.end() + 1, len(lines))
context_lines = lines
# 在关键字所在行将关键字标记为红色
highlighted_lines = []
for line in context_lines:
highlighted_line = line.replace(match_text, '\033[91m{}\033[0m'.format(match_text))
highlighted_lines.append(highlighted_line)
result = {
'file': pdf_file,
'page': match_page,
'context': highlighted_lines
}
results.append(result)
return results
# 示例用法
directory_path = 'e:\\'# 修改为实际的目录路径
search_keyword = input('请输入要查询的内容')
search_results = search_keywords_in_pdf_directory(directory_path, search_keyword)
for result in search_results:
print('文件名:', result['file'])
print('页数:', result['page'])
print('上下文:')
for line in result['context']:
print(line)
print() 问题分析:
根据您提供的代码和错误信息,发现了以下问题:
1. 缩进错误:在for pdf_file in pdf_files:循环和其后的代码中,缺少了必要的缩进。请确保在with open(pdf_file, 'rb') as file:和其后的代码块之前正确缩进。
2. 路径问题:您提供的示例代码中,将目录路径设置为'e:\\'。请确保这个目录路径存在,并且其中包含PDF文件以供搜索。
解决方案:
请尝试进行以下修改:
# 示例用法
directory_path = r'e:\'# 修改为实际的目录路径,注意添加原始字符串前缀r
search_keyword = input('请输入要查询的内容')
search_results = search_keywords_in_pdf_directory(directory_path, search_keyword)
for result in search_results:
print('文件名:', result['file'])
print('页数:', result['page'])
print('上下文:')
for line in result['context']:
print(line)
print()
请注意,修改后的目录路径应该是实际存在的,并且包含您想要搜索的PDF文件。另外,确保在关键字输入时使用合适的语法。
希望以上解决方案能够帮助您解决问题。如果还有其他疑问,请随时提出。
球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
从你的代码来看,主要在PDF文件中搜索关键字并高亮显示关键字。如果你的代码不能产生期望的结果,那么可能的问题有以下几种:
1. PDF文件内容的提取问题:PyPDF2并不是最好的库来提取PDF中的文本。PyPDF2有时不能正确地解析PDF中的文本。如果你试图在无法正确解析的PDF文件中搜索关键字,那么很有可能搜索不到。你可以尝试使用别的库来提取PDF中的文本,比如PDFMiner。
2. 正则表达式的问题:你用的正则表达式\b{}\b能够确保你搜到的词是一个完整的词,而不是某个词的一部分。然而,它可能会错过一些特殊情况。比如,如果你的关键字是 "open",那么 "opened" 和 "opening" 就会被错过。你需要根据你的实际需求修改你的正则表达式。
3. 字符编码问题:如果你的PDF文件包含非ASCII字符,PyPDF2可能不能正确地解码这些字符。这可能会导致你的搜索失败。你可以尝试使用别的库来解决这个问题,比如PDFMiner。
以下是你的代码改用PDFMiner的版本:
#pip install pdfminer.six
import os
import re
from pdfminer.high_level import extract_text
def search_keywords_in_pdf_directory(directory, keyword):
# 获取目录下的所有PDF文件路径
pdf_files =
results = []
for pdf_file in pdf_files:
text = extract_text(pdf_file)
# 使用正则表达式在文本中搜索关键字
pattern = re.compile(r'\b{}\b'.format(keyword), flags=re.IGNORECASE)
matches = re.finditer(pattern, text)
for match in matches:
match_text = match.group(0)
# 获取关键字所在的行及其上下行内容
lines = text.split('\n')
start_line = max(match.start() - 1, 0)
end_line = min(match.end() + 1, len(lines))
context_lines = lines
# 在关键字所在行将关键字标记为红色
highlighted_lines = []
for line in context_lines:
highlighted_line = line.replace(match_text, '\033[91m{}\033[0m'.format(match_text))
highlighted_lines.append(highlighted_line)
result = {
'file': pdf_file,
'context': highlighted_lines
}
results.append(result)
return results
# 示例用法
directory_path = 'e:\\'# 修改为实际的目录路径
search_keyword = input('请输入要查询的内容')
search_results = search_keywords_in_pdf_directory(directory_path, search_keyword)
for result in search_results:
print('文件名:', result['file'])
print('上下文:')
for line in result['context']:
print(line)
print()
注意:此段代码不再提供页码信息,因为PDFMiner的 extract_text 方法会返回整个PDF文件的文本,而不是单个页面的文本。如果需要在找到关键字的同时提供关键字所在的页码,你可能需要使用PDFMiner的更底层的API。
请注意,在使用新的PDF库时,你可能需要对代码进行一些调整以确保其能够正常工作。 isdkz 发表于 2023-7-22 00:35
从你的代码来看,主要在PDF文件中搜索关键字并高亮显示关键字。如果你的代码不能产生期望的结果,那么可能 ...
这个比我那个更费时,但是还是找不出
我原来代码能找出
import os
from PyPDF2 import PdfReader
def search_keywords_in_pdf(directory, keyword):
files = os.listdir(directory)
for file in files:
if file.endswith('.pdf'):
file_path = os.path.join(directory, file)
with open(file_path, 'rb') as f:
pdf = PdfReader(f)
for page_num, page in enumerate(pdf.pages, start=1):
text = page.extract_text()
if keyword in text:
print(f"found '{keyword}' in {file} (Page {page_num})")
# 指定要搜索的目录和关键字
directory = 'e:\\'
keyword = input('请输入要查询的内容')
search_keywords_in_pdf(directory, keyword)
print('搜索结束!') 从给出的代码来看,问题可能出在以下几个方面:
目录路径错误:确保directory_path变量中存储的是正确的目录路径。如果找不到目录或者没有权限访问该目录,就无法搜索到文件。
PDF文件格式错误:代码使用PyPDF2库来解析PDF文件,但并不是所有的PDF文件都可以被成功解析。请确保要搜索的PDF文件是有效的、可读取的文件,并且使用的是支持的PDF版本。
关键字匹配问题:正则表达式中的\b用于匹配单词边界,以确保只匹配完整单词而不是单词的一部分。如果关键字包含特殊字符或者连续的空格,可能会导致匹配失败。请确保输入的关键字符合预期并且存在于PDF文本中。
编码问题:有些PDF文件使用非标准编码或特殊字符集,可能会导致提取文本时出现乱码或异常结果。这可能需要进行额外的处理或使用其他库来解决。
代码逻辑错误:上述代码基本上是正确的,但仍然可能存在某些逻辑错误。例如,获取关键字所在行及其上下行内容时,起始行和结束行的计算是否正确等。你可以检查代码中的每个步骤,以确定哪个步骤导致了问题。
请对以上方面进行检查,并确保代码中的每个部分都按预期工作。如果问题仍然存在,请提供更多详细信息,以便我能够帮助你解决问题。 陶远航 发表于 2023-7-22 20:39
从给出的代码来看,问题可能出在以下几个方面:
目录路径错误:确保directory_path变量中存储的是正确的 ...
修改之前的代码能运行
import os
from PyPDF2 import PdfReader
def search_keywords_in_pdf(directory, keyword):
files = os.listdir(directory)
for file in files:
if file.endswith('.pdf'):
file_path = os.path.join(directory, file)
with open(file_path, 'rb') as f:
pdf = PdfReader(f)
for page_num, page in enumerate(pdf.pages, start=1):
text = page.extract_text()
if keyword in text:
print(f"found '{keyword}' in {file} (Page {page_num})")
# 指定要搜索的目录和关键字
directory = 'e:\\'
keyword = input('请输入要查询的内容')
search_keywords_in_pdf(directory, keyword)
print('搜索结束!')
页:
[1]