2010-09-30 10 views

Répondre

1

Je ne sais pas encore quel n-gramme est, mais basée sur la réponse de Ed est ce que vous avoir besoin?

declare @string varchar(max) = 'hello' 
declare @n int = 3 

set @string = @string + REPLICATE('-',@n - (len(@string) % @n)) 

;with n as 
(
SELECT 1 AS i 
UNION ALL 
SELECT i+1 
FROM n 
WHERE i <= (LEN(@string)[email protected]) 
) 
select SUBSTRING(@string, i, @n), COUNT(*) 
from n 
group by SUBSTRING(@string, i, @n) 
option (maxrecursion 0) 
+0

lo- doit faire partie de la sortie – jozi

+0

Ma question était "pourquoi est-ce"? c'est-à-dire que vous pouvez mieux expliquer les choses aux personnes qui ne savent pas ce que sont les trigrammes. –

+0

http://en.wikipedia.org/wiki/Trigram – jozi

2

Sur la base de la réponse de Martin Smith - logique ajouté à bloc la chaîne avec - à un certain nombre de caractères divisibles par 3

declare @string varchar(max) = 'hello' 

SET @string = (SELECT CASE LEN(@string) % 3 
          WHEN 1 THEN @string + '--' 
          WHEN 2 THEN @string + '-' 
          ELSE @string 
         END) 
;with n as 
(
SELECT 1 AS i 
UNION ALL 
SELECT i+1 
FROM n 
WHERE i < (LEN(@string)-2) 
) 
select SUBSTRING(@string, i, 3) AS Trigram, COUNT(*) AS Count 
from n 
group by SUBSTRING(@string, i, 3) 
option (maxrecursion 0) 
3

emprunt de Ed et Martin, je pense que cela est une bonne mise en œuvre :

declare @string varchar(max) = 'here kitty kitty' 

SET @string = replace(@string, ' ', '-') --Wikipedia says this should be underscore, not dash 
;with n as 
( 
    SELECT 1 AS i 
    UNION ALL 
    SELECT i + 1 
    FROM n 
    WHERE i < (LEN(@string)-2) 
) 
select SUBSTRING(@string, i, 3) AS Trigram, COUNT(*) AS Count 
from n 
group by SUBSTRING(@string, i, 3) 
option (maxrecursion 0) 
+0

Je ne sais pas si c'est correct mais +1. Avez-vous lu l'article Wikipedia? Edit: Je vois que vous avez fait! –

+1

J'ai lu la page de trigramme concis (http://en.wikipedia.org/wiki/Trigram). Cet algorithme donne la même sortie que cette page. – RedFilter

Questions connexes