首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

字符串相像度比较

2013-09-13 
字符串相似度比较文件里面存有1000条字符串,输入一段字符串,要求找出其中最匹配的一条字符串,请大家给个思

字符串相似度比较
文件里面存有1000条字符串,输入一段字符串,要求找出其中最匹配的一条字符串,

请大家给个思路, 要求代码尽可能有效率,有100分哟~~
大家多提点子,分都有,谢谢!
[解决办法]
循环里面套个循环
[解决办法]
我觉得用全文索引里面的SOUNDEX函数更加高效
[解决办法]
这个最好还是通过程序来实现吧,读文件,然后记录每一个字符串和要匹配的字符中的匹配程度,然后选择匹配度最高的。
[解决办法]
--相似度取决于你的相似算法。
--效率的话,呵呵。用数据库实现这种对比算法,本身就没效率。

IF object_id('tempdb..#temp') IS NOT NULL DROP TABLE #temp
go
CREATE TABLE #temp(id INT IDENTITY PRIMARY KEY, [name] NVARCHAR(MAX))
INSERT #temp([name])
SELECT '我的' UNION ALL
SELECT '匹配度' UNION ALL
SELECT '我配度大' UNION ALL
SELECT '我1配2大3'
go

DECLARE @str NVARCHAR(100)
SET @str = N'我的匹配度最大'

SELECT m.id,n.NAME, m.匹配字符数
FROM
(
SELECT id, 匹配字符数 = SUM(是否匹配) FROM
(
SELECT 
a.id,
name=SUBSTRING(a.[name], b.number, 1),
是否匹配=(CASE WHEN CHARINDEX(SUBSTRING(a.[name], b.number, 1), @str) > 0 THEN 1 ELSE 0 END)
FROM #temp a
INNER JOIN master..spt_values b
ON b.type = 'p' AND b.number BETWEEN 1 AND LEN(a.[name])
) t
GROUP BY id
) m
INNER JOIN #temp n
ON m.id = n.id

/*
idNAME匹配字符数
1我的2
2匹配度3
3我配度大4
4我1配2大33
*/

[解决办法]
引用:
谢谢,忘了说了, 我没有用数据库,准备直接把文件读到内存里再作处理,感觉1000条字符串也不是很多啊·· 发在这个板块是感觉这个板块处理这类问题的朋友应该比较多吧

原来哪些啊。参考下面这个算法(我以前用过),优点:逻辑相对比较简单,效果确实是具有最大匹配率。
http://www.blogjava.net/phyeas/archive/2009/01/10/250807.html

热点排行