如何获取我的全文目录中使用的停用词列表?

Posted

技术标签:

【中文标题】如何获取我的全文目录中使用的停用词列表?【英文标题】:How to get a list of StopWords used in my FullText Catalog? 【发布时间】:2011-06-25 18:31:02 【问题描述】:

有没有办法获取我的 SQL Server 2008 全文目录正在使用的 StopWord 列表? 并在我的 C# 代码隐藏中使用它?

我想在 ASP.NET 页面中使用它来搜索术语并突出显示它们。

搜索页面和突出显示已经正常工作,但我想改进突出显示。我不想突出显示我的 StopWord 列表中的单词。

【问题讨论】:

【参考方案1】:

在 sql server management studio 中,如果您从全文索引中询问属性,您可以看到它使用哪个停止列表。见here。

然后您可以使用系统视图sys.fulltext_stoplists 和sys.fulltext_stopwords 来获取停用词列表。

【讨论】:

谢谢,现在我可以创建另一个返回 StopWords 的过程,然后在我的 C# 代码中使用它。 对我来说停用词隐藏在 sys.fulltext_system_stopwords 中。 sys.fulltext_system_stopwords 中也有默认值。见mssqltipsandtricks.blogspot.com/2012/07/…【参考方案2】:

SELECT * FROM sys.fulltext_stopwords | SELECT * FROM sys.fulltext_system_stopwords

您可以通过在 where 子句中包含语言代码来过滤您返回的停止列表

例如SELECT * FROM sys.fulltext_system_stopwords WHERE language_id=1033

(id 1033 对应 syslanguages 'English')

或者,这些可以在标准 SQL 数据库的“存储”组内的“全文停止列表”类别下找到

【讨论】:

【参考方案3】:

在更高版本的 SQL 中,使用中的活动停止列表似乎已从 GUI 中删除 - 因此 Sem 的正确答案现在已过时。在 SQL Server Management Studio 中,我无法找到用于特定全文目录的停止列表。

经过大量挖掘,以下查询将很容易地提供每个全文目录使用哪个停止列表:

select so.name as tableName, sfc.name as fullTextCatalogName, sfi.is_enabled, sfi.stoplist_id, sfs.name as stoplistName
from sys.fulltext_indexes as sfi
         left join sys.objects as so on so.object_id = sfi.object_id
         left join sys.fulltext_catalogs as sfc on sfc.fulltext_catalog_id = sfi.fulltext_catalog_id
         left join sys.fulltext_stoplists as sfs on sfi.stoplist_id = sfs.stoplist_id

因此,如果 stoplist_id 为 0 - 这表示此目录正在使用“默认”系统停止列表。如果 stoplist_id 为 NULL,则表示没有使用停止列表(即 ALTER FULLTEXT INDEX ON TABLENAME SET STOPLIST = OFF)。

如另一个答案所示 - 如果您想另外列出给定语言的默认系统停用词列表中包含哪些停用词(假设此处为英语),您可以:

SELECT * FROM sys.fulltext_system_stopwords WHERE language_id=1033

...查看带有用户定义的停止列表 ID 的列表:

SELECT * from sys.fulltext_stoplists

...如果您想查看用户定义的停用词列表中的停用词:

SELECT * from sys.fulltext_stopwords where language_id = 1033 and stoplist_id = a_valid_stoplist_id

我希望这会有所帮助,因为我必须在我的应用程序中修复其中的一些问题 - 并开始真正挠头试图找到索引的活动停止列表所在的位置 - 因为我习惯于右键单击 -> 属性在旧版本的 MSSQL 中工作...

【讨论】:

以上是关于如何获取我的全文目录中使用的停用词列表?的主要内容,如果未能解决你的问题,请参考以下文章

忽略查询中的mysql全文停用词

如何使用 nltk 或 python 删除停用词

SQL 2008:关闭全文搜索查询的停用词

我可以以编程方式配置 PostgreSQL 以不消除全文搜索中的停用词吗?

如何从 R 中的 ngram 标记列表中有效地删除停用词

elasticsearch中如何获取全文搜索的词频