哪些字元是 SQL Server 2005 和 2008 R2 的英語分詞符?
我可以通過使用找到哪些 DLL 支持英語分詞器,
sp_help_fulltext_system_components
但我無法找到英語分詞字元的實際列表(如空白、、、.
等%
)。有人知道此資訊的來源嗎?
這不是官方列表,而是使用循環來處理字元列表,並
sys.dm_fts_parser
像這樣使用:declare @i integer declare @cnt integer set @i=0 while @i<255 begin set @cnt=0 select @cnt=COUNT(1) FROM sys.dm_fts_parser ('"word1'+REPLACE(CHAR(@i),'"','""')+'word2"', 1033, 0, 0) if @cnt>1 begin print 'this char - '+CASE WHEN @i > 31 THEN char(@i) ELSE '' END+' - char('+convert(varchar(3),@i)+') is a word breaker' end set @i=@i+1 end
我可以生成一個
sys.dm_fts_parser
估計會破壞單詞的字元列表。(sys.dm_fts_parser
為導入中找到的每個“單詞”返回一行,所以如果它返回多於 1 行,我們就有了一個斷詞器)
nchar()
這可以通過使用而不是char()
(以及更大的@i 值)擴展到擴展/非英語字元集,並將呼叫中的參數 2 (lcid) 更改為sys.dm_fts_parser
SQL Server(任何版本)將任何非字母數字字元視為潛在的分詞器。比意味著在某些情況下,預期會破壞單詞的字元由伺服器以不同的方式(直接或擴展)處理。
一個典型的分詞器是點 (’.')
這些是點處理 (AICI) 的一些變體。
select display_term from sys.dm_fts_parser('"The great .NET."', 1033, 0, 0);
返回“the”、“great”和“.net”
select display_term from sys.dm_fts_parser('"The great ASP.NET."', 1033, 0, 0);
返回“the”、“great”、“asp.net”、“asp”和“net”
select display_term from sys.dm_fts_parser('"G.I.S."', 1033, 0, 0);
返回“gis”和“gis”
select display_term from sys.dm_fts_parser('"3.14"', 1033, 0, 0);
返回“3.14”和“nn3d14”
這不僅僅是點。
select display_term from sys.dm_fts_parser(’“data-driven apps”’, 1033, 0, 0);
返回“數據驅動”、“數據”、“驅動”和“應用”
select display_term from sys.dm_fts_parser('"1-0"', 1033, 0, 0);
返回“1-0”、“1”、“nn1”、“0”和“nn0”
select display_term from sys.dm_fts_parser('"c# j# f# a#"', 1033, 0, 0);
返回“c#”、“j#”、“f”和“a”(通常缺少 f#)
select display_term, * from sys.dm_fts_parser('"c c+ c++"', 1033, 0, 0);
返回“c”、“c”和“c++”
(潛在的)斷字列表(斯圖爾特在他的答案中展示了獲得它的方法)是簡單的部分。困難的部分是獲取正在使用的內部規則列表;它們在位於 DRIVE:\Program Files\Microsoft SQL Server\INSTANCENAME\MSSQL\Binn 的 MSWB7*.dll、NaturalLanguage6.dll 和 NL7*.dll 中處理/包含