日期:2014-05-17  浏览次数:20448 次

字符串相似度比较
文件里面存有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

/*
id NAME 匹配字符数
1 我的 2
2 匹配度 3
3 我配度大 4
4 我1配2大3 3
*/

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

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