gpt4 book ai didi

sql - 计算SQL中两个字符串之间相似词的个数

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:38:07 27 4
gpt4 key购买 nike

我打算编写一个 TSQL 函数,将两个输入字符串和一定比例的单词相似度作为输出,例如:

SELECT [dbo].[FN_CalcSimilarWords]('Golden horses hotel','Hotel Golden Horses')

返回:

3/3

SELECT [dbo].[FN_CalcSimilarWords]('Golden horses','Golden horses Malaysia')

返回:

2/3

我正在考虑在将字符串解析为 This split function 之后循环和比较单词, 还有其他更好的想法吗?

最佳答案

对于此解决方案,我假设您希望删除重复项。切换第一个和第二个参数对结果没有影响。

它返回一个值,而不是百分比,因为函数只能返回 1 个值或一个表。我假设您想要 0 到 1 之间的值,如果乘以 100,则 2/3 = 0.67 或 67%。

CREATE function f_functionx
(
@str1 varchar(2000),
@str2 varchar(2000)
)
returns decimal(5,2)
as
BEGIN
DECLARE @returnvalue decimal(5,2)
DECLARE @list1 table(value varchar(50))
INSERT @list1
SELECT t.c.value('.', 'VARCHAR(2000)')
FROM (
SELECT x = CAST('<t>' +
REPLACE(@str1, ' ', '</t><t>') + '</t>' AS XML)
) a
CROSS APPLY x.nodes('/t') t(c)

DECLARE @list2 table(value varchar(50))
INSERT @list2
SELECT t.c.value('.', 'VARCHAR(2000)')
FROM (
SELECT x = CAST('<t>' +
REPLACE(@str2, ' ', '</t><t>') + '</t>' AS XML)
) a
CROSS APPLY x.nodes('/t') t(c)


;WITH isect as
(
SELECT count(*) match FROM
(
SELECT value FROM @list1
INTERSECT
SELECT value FROM @list2
) x
), total as
(
SELECT max(cnt) cnt
FROM
(
SELECT count(distinct value) cnt FROM @list1
UNION ALL
SELECT count(distinct value) FROM @list2
) x
)
SELECT
@returnvalue = cast(isect.match as decimal(9,2)) / total.cnt
FROM total
CROSS JOIN isect

RETURN @returnvalue
END

GO

你可以这样调用函数:

SELECT dbo.f_functionx('Golden horses', 'Golden horses')
SELECT dbo.f_functionx('Golden horses', 'Golden horses XX')

返回:

1
0.67

关于sql - 计算SQL中两个字符串之间相似词的个数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25762544/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com