【文本相似度】在数据库中如何查找相似的记录

在面临数据库中存在大量重复但不完全相同的名称时,可以通过两种方法来查找并去除重复记录。一种是简单地按名称排序删除,但这无法处理差异较大的名称。另一种方法是利用Oracle数据库提供的UTL_MATCH包,尤其是edit_distance_similarity函数,来计算记录间的相似度,从而找出相似度较高的记录对,并进行修改。通过创建CTE,将名称替换和相似度计算结合,可以有效地找出高相似度的名称进行处理。
摘要由CSDN通过智能技术生成
【问题】业务系统上因为前期设计原因,录入的数据存在大量重复,现在需要去除重复录入的名称。但这些名称不尽相同,都存在几个字的差别。
【分析】1、根据名称排序,然后逐个删除,结果就是删除得都是前几个字符一样的,如“山东青岛XX公司”和“山东青岛XX有限公司”,但对“青岛XX公司”就无能为力了。
2、逐条记录与其他记录进行名称比对,根据相似度查找,然后筛选出相似对较高的记录
【结论】 
1、根据基本SQL查询即可。
2、主要说第二种方法。oracle 存在 UTL_MATCH包,其中有函数.edit_distance_similarity用来查找相似度。查找到相似度高的进行修改
with dc  as
(
  select id,
         Xname,
         replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(dcname,
                                                                                    
在Python,我们可以使用一些库如`sklearn`来进行文本相似度分析,并通过`requests`库调用Web Services来处理数据库操作。下面是一个简单的示例,展示如何创建一个模拟的Web服务客户端,用于将文本相似度分析结果插入到数据库: 首先,确保已经安装了所需的库: ```bash pip install requests sklearn pandas ``` 然后,编写一个函数来计算文本相似度(这里用余弦相似度为例,实际应用可以使用TF-IDF或词嵌入模型如BERT): ```python from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.metrics.pairwise import cosine_similarity def calculate_similarity(texts): vectorizer = TfidfVectorizer() vectors = vectorizer.fit_transform(texts) # 假设我们有两个文本字符串 text1 = "这是第一个文本" text2 = "这是第二个文本" similarity_score = cosine_similarity(vectors[[0]], vectors).flatten()[0] return similarity_score ``` 接下来,假设有一个Web服务接口(例如RESTful API),用于接收相似度分数和相关的表名、键值对数据: ```python import json import requests def add_to_db(similarity_score, table_name, data): url = 'http://your-web-service-url.com/add_record' # 替换为实际的Web服务URL payload = { 'similarity': similarity_score, 'table': table_name, 'data': data, } headers = {'Content-Type': 'application/json'} # 根据实际情况设置请求头 response = requests.post(url, json=payload, headers=headers) if response.status_code == 200: print(f"成功添加到 {table_name} 表: {response.json()}") else: print(f"请求失败,状态码 {response.status_code}: {response.text}") # 示例数据和相似度分数 text_data = [{'text': '测试文本1'}, {'text': '测试文本2'}] similarity = calculate_similarity([item['text'] for item in text_data]) # 添加到数据库 add_to_db(similarity, 'text_similarity', text_data[0]) ``` 这个例子,你需要替换`http://your-web-service-url.com/add_record`为实际的Web服务URL。同时,根据服务端的具体要求,可能需要调整JSON数据的结构。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值