PDF关键字命中测试脚本

admin 2025年5月30日13:27:53评论35 views字数 2266阅读7分33秒阅读模式
近期做调研的时候,遇到了很多pdf,总数多、页数多,不可能一个一个搜关键字。今天写了个脚本,可以直接判断是否命中关键字。脚本如下:
import PyPDF2import csvimport osfrom tqdm import tqdmfrom typing import Callabledef match_pdf(pdf_path: str, match_func: Callable[[str], tuple[boolstr]]) -> list[str]:    """    从指定的 PDF 文件中提取所有文本内容。    :param pdf_path: PDF 文件的路径    :param match_func: 匹配函数    :return: 包含 PDF 文件中所有文本的字符串    """    result = []    # 打开 PDF 文件    with open(pdf_path, 'rb'as file:        # 创建 PDF 阅读器对象        reader = PyPDF2.PdfReader(file)        # 遍历每一页并提取文本        for page in reader.pages:            match = match_func(page.extract_text())            if match[0]:                result.append(match[1])    return resultdef read_cities_from_csv(csv_path: str) -> list[str]:    """    从 CSV 文件中读取城市列表。    :param csv_path: CSV 文件的路径    :return: 包含城市列表的列表    """    with open(csv_path, 'r'as file:        reader = csv.reader(file)        return [row[0for row in reader]def read_province_from_csv(csv_path: str) -> str:    """    从 CSV 文件中读取省份。    :param csv_path: CSV 文件的路径    :return: 省份    """    with open(csv_path, 'r'as file:        reader = csv.reader(file)        return [row[2for row in reader]def match_keyword_in_pdf(pdf_path: str, keywords: list[str]) -> list[str]:    """    在 PDF 文件中匹配城市列表。    :param pdf_path: PDF 文件的路径    :param keywords: 关键词列表    :return: 包含匹配到的关键词的列表    """    def match_func(text: str) -> tuple[boolstr]:        for keyword in keywords:            if keyword in text:                return True, keyword        return False""    return match_pdf(pdf_path, match_func)if __name__ == "__main__":    input_dir = "./input"    cities_csv_path = "./cities.csv"    cities = read_cities_from_csv(cities_csv_path)    provinces = read_province_from_csv(cities_csv_path)    for file in tqdm(os.listdir(input_dir), desc="Processing files"):        # 遍历输入目录中的所有 PDF 文件        if file.endswith(".pdf"):            pdf_path = os.path.join(input_dir, file)            matched_cities = match_keyword_in_pdf(pdf_path, cities)            print(f"File {file} has {len(matched_cities)} cities, {matched_cities}")            matched_provinces = match_keyword_in_pdf(pdf_path, provinces)            print(f"File {file} has {len(matched_provinces)} provinces, {matched_provinces}")
所有地级市的csv格式如下:
PDF关键字命中测试脚本
可以直接在GitHub上下载:https://github.com/boeboe/china-cities/blob/master/china_cities/cities.csv
运行脚本后,就可以判断出包含关键字的pdf了。但是需要注意的是:
1.有时候识别还是出问题,最好直接将pdf中的关键字(如果有)加入进csv。
2.使用ai修改代码,输出命中字段的前后10个词语(255个字符)。

原文始发于微信公众号(WeeklyFeed):PDF关键字命中测试脚本

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年5月30日13:27:53
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   PDF关键字命中测试脚本https://cn-sec.com/archives/3873823.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息