java sql相似度算法_相似度判定 – SQL – 关系型数据库

?

Structured Query Language? —— “结构化查询语言简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统, 可以使用相同的结构化查询语言作为数据输入与管理的接口。结构化查询语言语句可以嵌套,这使它具有极大的灵活性和强大的功能。”

?

SQL虽然其是主要针对关系型数据库的查询语言,也可以通过“CREATE?FUNCTION”自定义函数逻辑,在文本分析的领域发挥作用,如下是对于文字相似度的自定义函数:

?

考虑字符:

?

CREATE?FUNCTION?DBO.FN_Resemble

(@Cloumna?NVARCHAR(MAX),

@Cloumnb?NVARCHAR(MAX)

)

RETURNS?FLOAT

AS

BEGIN

DECLARE?@num?FLOAT,@len?int

SET?@Cloumna=ISNULL(@Cloumna,0)

SET?@Cloumnb=ISNULL(@Cloumnb,0)

SET?@len=1

SET?@num=0

WHILE(LEN(@Cloumna)<>0?AND?LEN(@CloumnB)<>0)

BEGIN

WHILE(@len<=LEN(@Cloumna))

BEGIN

DECLARE?@a?NVARCHAR(4)

SET?@a=''

SET?@a=SUBSTRING(@Cloumna,@len,1)

IF(CHARINDEX(@a,@CloumnB)>0)

BEGIN

SET?@num=@num+1

END

SET?@len=@len+1?

END

SET?@num=@num*1.0/LEN(@Cloumna)

BREAK

END

RETURN?@num

END

go

?

计算字符顺序

CREATE?FUNCTION?DBO.FN_Resemble_order

(@Cloumna?NVARCHAR(MAX),

@Cloumnb?NVARCHAR(MAX)

)

RETURNS?FLOAT

AS

BEGIN

DECLARE?@num?FLOAT,@len?int

SET?@Cloumna=ISNULL(@Cloumna,0)

SET?@Cloumnb=ISNULL(@Cloumnb,0)

SET?@len=1

SET?@num=0

WHILE(LEN(@Cloumna)<>0?AND?LEN(@CloumnB)<>0)

BEGIN

DECLARE?@a?NVARCHAR(4)

DECLARE?@b?NVARCHAR(4)

IF(LEN(@Cloumna)>=LEN(@CloumnB))

BEGIN

WHILE(@len<=LEN(@CloumnB))

BEGIN

SET?@a=''

SET?@a=SUBSTRING(@Cloumna,@len,1)

SET?@b=''

SET?@b=SUBSTRING(@CloumnB,@len,1)

IF(@a=@b)

BEGIN

SET?@num=@num+1

END

ELSE

BEGIN

break

END

SET?@len=@len+1?

END

END

ELSE?IF?(LEN(@Cloumna)

BEGIN

WHILE(@len<=LEN(@Cloumna))

BEGIN

SET?@a=''

SET?@a=SUBSTRING(@Cloumna,@len,1)

SET?@b=''

SET?@b=SUBSTRING(@CloumnB,@len,1)

IF(@a=@b)

BEGIN

SET?@num=@num+1

END

ELSE

BEGIN

break

END

SET?@len=@len+1?

END

END

SET?@num=@num*1.0/LEN(@Cloumna)

BREAK

END

RETURN?@num

END

go

既考虑所包含的字符,也考虑其出现的顺序

CREATE?FUNCTION?DBO.FN_Resemble_onebyone

(@Cloumna?NVARCHAR(MAX),

@Cloumnb?NVARCHAR(MAX)

)

RETURNS?FLOAT

AS

BEGIN

DECLARE?@num?FLOAT,@len?int

SET?@Cloumna=ISNULL(@Cloumna,0)

SET?@Cloumnb=ISNULL(@Cloumnb,0)

SET?@len=1

SET?@num=0

WHILE(LEN(@Cloumna)<>0?AND?LEN(@CloumnB)<>0)

BEGIN

DECLARE?@a?NVARCHAR(4)

DECLARE?@b?NVARCHAR(4)

IF(LEN(@Cloumna)>=LEN(@CloumnB))

BEGIN

WHILE(@len<=LEN(@CloumnB))

BEGIN

SET?@a=''

SET?@a=SUBSTRING(@Cloumna,@len,1)

SET?@b=''

SET?@b=SUBSTRING(@CloumnB,@len,1)

IF(@a=@b)

BEGIN

SET?@num=@num+1

END

SET?@len=@len+1?

END

END

ELSE?IF?(LEN(@Cloumna)

BEGIN

WHILE(@len<=LEN(@Cloumna))

BEGIN

SET?@a=''

SET?@a=SUBSTRING(@Cloumna,@len,1)

SET?@b=''

SET?@b=SUBSTRING(@CloumnB,@len,1)

IF(@a=@b)

BEGIN

SET?@num=@num+1

END

SET?@len=@len+1?

END

END

SET?@num=@num*1.0/LEN(@Cloumna)

BREAK

END

RETURN?@num

END

go

特别地,在关系型数据库中,运用SQL 自定义函数达到数据处理(数据治理)的目的是ETL的基本功能之一;也可以为数据分析的查询取数或者关键指标的换算打基础。

同时,在数据科学领域,数据分析大多数情况,R语言或者Python会主要来承担此类任务,在特殊情况下,这些语言也有包含有相应的函数以帮助分析师做前期的数据清理(类似于SQL的自定义功能)。

相比封装的函数,SQL的这种功能会相对灵活些,更能够根据具体的业务逻辑编写。

?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值