給定一個特定的單詞模式(比如說「氣球」),我想查找前後的n個單詞的數量,按他們分組,計數存在於我的表格的標題中使用TSQL,如何在給定的術語之前和之後查找單詞和分組?
對於,例如,如果數據集是:
- 紅氣球天空
- 黃色氣球的天空路
- 藍氣球椅
我想結果是這樣mething like:
- red balloon | 1
- yellow balloon | 1
- blue balloon | 1
- balloon sky | 2
- balloon chair | 1
我覺得最好的方法來完成這將是在我的sproc正則表達式。因此,我添加了列出的極大正則表達式函數here和FindWordsInContext
函數。
首先:
WITH Words_CTE (Title)
AS
-- Define the CTE query.
(
SELECT Title
FROM ItemData
WHERE Title LIKE '%balloon%'
)
-- Define the outer query referencing the CTE name.
SELECT Title
FROM Words_CTE
所以我想我會開始與和工作FindWordsInContext功能混進去,然後做一個分組上的文字/給定字之前。
- 更新 -
得益於以下阿德里安Iftode ......但代碼不正是做什麼我要找的。
declare @table table(Sentence varchar(250))
insert into @table(sentence)
values ('I have another red balloon in the car.'),
('Here is a new balloon for you.'),
('A red balloon is in the other room.'),
('Is there another balloon for me?')
select TOP(5) SentencePart, NumberOfWords
from @table
cross apply dbo.fnGetPartsFromSentence(Sentence, 'balloon') f
order by
NumberOfWords DESC,
case when f.Side = 'R' then 0
else 1 end
輸出:
balloon is in the other room. 5
I have another red balloon 4
Here is a new balloon 4
Is there another balloon 3
balloon in the car. 3
我希望能夠設置的「氣球」兩側的範圍內。在這種情況下,我們說一個字,輸出應該是:
red balloon 2
new balloon 1
another balloon 1
balloon in 1
balloon for 2
balloon is 1
不要使用一個CTE - 使用[全文搜索](http://msdn.microsoft.com/en-us/library/ms142571.aspx) – 2012-04-03 01:29:25
這樣做n需要在純sql中完成? – cctan 2012-04-03 01:29:53
優先考慮速度,是的,在SQL中。使用近或包含了這些功能都很好,如果我已經知道我在尋找,術語是附近的「氣球」一詞。我想在「氣球」之前/之後得到一個,兩個和三個單詞的計數(並分組)。 – ElHaix 2012-04-03 02:11:26