Welche Zeichen sind Wortbrecher in Englisch für SQL Server 2005 und 2008 R2?


7

Ich kann finden , was DLL englische Wortbrecher unter Verwendung unterstützt , sp_help_fulltext_system_componentsaber ich habe keine Zeichen für Englisch in der Lage eine aktuelle Liste des Wortes finden brechen (wie leer, ., %, etc.).

Kennt jemand eine Quelle für diese Informationen?


Was bedeutet "nn3d14"? Der Volltextindex sucht also nach etwas vor und 3.14? Wie interpretiere ich das? ähnlich in "nn1", wonach sucht es
heidi c

Antworten:


10

Dies ist keine offizielle Liste, sondern Sie verwenden eine Schleife, um eine Liste von Zeichen zu bearbeiten, und verwenden Sie sys.dm_fts_parserFolgendes:


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 

Ich kann eine Liste von Zeichen sys.dm_fts_parsererstellen, die die Wörter brechen. ( sys.dm_fts_parserGibt eine Zeile für jedes im Import gefundene 'Wort' zurück. Wenn also mehr als eine Zeile zurückgegeben wird, hatten wir einen Wortunterbrecher.)

Dies könnte auf erweiterte / nicht englische Zeichensätze erweitert werden, indem nchar()anstelle von char()(und einem größeren Wert für @i) und Ändern von Parameter 2 (lcid) im Aufruf von verwendet wirdsys.dm_fts_parser


3

SQL Server (jede Version) betrachtet jedes nicht alphanumerische Zeichen als potenziellen Wortunterbrecher. Dies bedeutet, dass es Situationen gibt, in denen Zeichen, von denen erwartet wird, dass sie Wörter brechen, vom Server auf andere Weise (direkt oder erweitert) behandelt werden.

Ein typischer Wortbrecher ist der Punkt ('.')

Dies sind einige Variationen der Punktbehandlung (AICI).

select display_term from sys.dm_fts_parser('"The great .NET."', 1033, 0, 0);

gibt "the", "great" und ".net" zurück

select display_term from sys.dm_fts_parser('"The great ASP.NET."', 1033, 0, 0);

gibt "the", "great", "asp.net", "asp" und "net" zurück

select display_term from sys.dm_fts_parser('"G.I.S."', 1033, 0, 0);

gibt "gis" und "gis" zurück

select display_term from sys.dm_fts_parser('"3.14"', 1033, 0, 0);

gibt "3.14" und "nn3d14" zurück

Und es ist nicht nur der Punkt.

Wählen Sie display_term aus sys.dm_fts_parser ("datengesteuerte Apps", 1033, 0, 0).

gibt "datengesteuert", "Daten", "gesteuert" und "Apps" zurück

select display_term from sys.dm_fts_parser('"1-0"', 1033, 0, 0);

gibt "1-0", "1", "nn1", "0" und "nn0" zurück

select display_term from sys.dm_fts_parser('"c# j# f# a#"', 1033, 0, 0);

gibt "c #", "j #", "f" und "a" zurück (f # fehlt in der Regel)

select display_term, * from sys.dm_fts_parser('"c c+ c++"', 1033, 0, 0);

gibt "c", "c" und "c ++" zurück

Die Liste der (potenziellen) Wortbrecher (Stuart zeigt den Weg, um sie in seiner Antwort zu erhalten) ist der einfache Teil. Der schwierige Teil besteht darin, die Liste der verwendeten internen Regeln zu erhalten. Sie werden in MSWB7 * .dll, NaturalLanguage6.dll und NL7 * .dll unter DRIVE: \ Programme \ Microsoft SQL Server \ INSTANCENAME \ MSSQL \ Binn behandelt / enthalten

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.