当前位置: 首页 > java >正文

利用jieba分词交集运算,挑选出相同身份证

#创作灵感#因为感兴趣和身边有一些资料,我开发了一个程序,把几百G的多个PDF文件里面的身份证照片提取出来,再提取里面的文字,也就是身份证正面的文字信息,储存在sql2017数据库中,大概有5万行,因为为了方便,直接把身份证的所有文字转为字符串,写在每一行中。

但这样就出现一个问题,就是文件里面的身份证是有很多重复的,即5万行数据,里面可能只有1-2万张身份证,那么怎么把相同的身份证挑选出来呢。我想到了jieba分词。所以有下面的代码:

数据库的一行是这样的,sfzid是考虑循环找出这个表中相同的身份证,填第一个找到的身份证行的id号。

# -*- coding: utf-8 -*-
"""
Created on Mon Apr 28 14:59:39 2025@author: Yang
"""
import pymssql
import jiebaif __name__ == '__main__':# 连接到SQL Server数据库conn = pymssql.connect(server='127.0.0.1', user='sa', password='1', database='gr',charset='utf8')cursor = conn.cursor()sqlget = "select id,sfz from sfz where sfzid is null"cursor.execute(sqlget)rows = cursor.fetchall()# print(len(rows)) #所有的行数for row in rows:sfzxx = row[1]sfzid = row[0]sqlget0 = f"select count(id) from sfz where id = {sfzid} and sfzid is not null"cursor.execute(sqlget0)row0 = cursor.fetchone()print(row0[0],sfzid)if row0[0] == 0:sfzjb = set(jieba.lcut(sfzxx))sqlget1 = f"select id,sfz from sfz where id <> {sfzid} and sfzid is null" # sfzid is null andcursor.execute(sqlget1)rows1 = cursor.fetchall()for row1 in rows1:sfzxx1 = row1[1]sfzid1 = row1[0]sfzjb1 = set(jieba.lcut(sfzxx1))jt = sfzjb1 & sfzjbif len(jt)/len(sfzjb) > len(jt)/len(sfzjb1):jjl = len(jt)/len(sfzjb) else:jjl = len(jt)/len(sfzjb1)if jjl > 0.9:print(jjl,sfzid,sfzid1) print(sfzxx,sfzxx1)sql = "UPDATE sfz SET sfzid = %s WHERE id = %s"cursor.execute(sql, (sfzid,sfzid1, ))conn.commit()cursor.close()conn.close

原理是用ocr文字识别,可能存在一些差异,用jieba分词,交集运算,能够找出文字相同比例高的身份证信息,可以判断出2张身份证是否相同。

在for循环中,加上判断这一行是否有sfzid能避免重复判断相同身份证,提高效率。

这个程序好像要运行很久。。。

http://www.xdnf.cn/news/7069.html

相关文章:

  • 华为云Astro轻应用创建业务对象(BO)的概念梳理
  • 如何用mockito+junit测试代码
  • [LevelDB]LevelDB版本管理的黑魔法-为什么能在不锁表的情况下管理数据?
  • muduo库TcpServer模块详解
  • 设备预测性维护的停机时间革命:中讯烛龙如何用AI重构工业设备管理范式
  • Linux梦开始的地方
  • 面试题总结一
  • 2025.05.17得物机考笔试真题第一题
  • iOS 工厂模式
  • 【图像生成大模型】Step-Video-T2V:下一代文本到视频生成技术
  • 数据结构与算法学习笔记(Acwing提高课)----动态规划·背包模型(四)
  • 人工智能100问☞第26问:什么是贝叶斯网络?
  • 第三章:UI 系统架构拆解与动态界面管理实录
  • PyQt5基本窗口控件(对话框类控件)
  • 配置代理服务器访问github、google
  • golang 安装gin包、创建路由基本总结
  • 定期更新Let‘s Encrypt SSL证书遇到的问题
  • 代码随想录算法训练营第六十五天| 图论10—卡码网94. 城市间货物运输 I,95. 城市间货物运输 II
  • C++11-(2)
  • 从零启动 Elasticsearch
  • C#接口(Interface)全方位讲解:定义、特性、应用与实践
  • Manus 全面开放注册,OpenAI 发布 Codex,ChatGPT 上线 GPT-4.1!| AI Weekly 5.12-18
  • 【Linux高级全栈开发】2.1.2 事件驱动reactor的原理与实现
  • FTP协议
  • elasticsearch kibana ik 各版本下载
  • 医疗信息系统安全防护体系的深度构建与理论实践融合
  • CSS- 4.4 固定定位(fixed) 咖啡售卖官网实例
  • 多指标组合策略思路
  • PopSQL:一个支持团队协作的SQL开发工具
  • 第9章 组件及事件处理