Sql-Server-2005

哪些字元是 SQL Server 2005 和 2008 R2 的英語分詞符?

  • June 25, 2018

我可以通過使用找到哪些 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 中處理/包含

引用自:https://dba.stackexchange.com/questions/25823