在 SQL 服务器(或任何 SQL 语言)中,您可以按单词变体分组吗?
In SQL Server (or any SQL Language), can you group by Word Variations?
我相信答案是否定的,但也许有人有一个绝妙的解决方法:
可以(你做)SQL Group By word variations?
变体示例 Run: Run, Ran, Running, Runs
或 Goose: Goose, Geese
我知道不做这类事情的原因有很多,我相信这里会分享一些,但我有一个小项目,这会有所帮助。如果没有创建我自己的个人字典 table,这并没有发生,或者没有大量的 replace 或 case 语句,有没有人有实用的 方法来做到这一点?我目前在 SQL 服务器上工作,但任何 SQL 语言都是一个受欢迎的答案。
您正在根据单词的 STEM 进行分组。寻找 SQL 词干:
and SQL word root matching
或者您可以使用 SQL soundex 函数来查找两个词是否相似:
SELECT SOUNDEX(word), COUNT(*) FROM tbl GROUP BY SOUNDEX(word)
@Y.L 在这个问题上值得称赞,但由于答案在评论中,我不确定如何将其标记为正确答案?不管怎样,下面是代码的基础知识:
drop table if exists dbo.attempt1
create table dbo.attempt1 ( tempid int IDENTITY(1,1) PRIMARY KEY, word varchar(50) )
CREATE UNIQUE INDEX cx_uid ON dbo.attempt1(tempid);
CREATE FULLTEXT INDEX ON dbo.attempt1(word)
KEY INDEX cx_uid
WITH STOPLIST = SYSTEM;
insert into dbo.attempt1 (word)
values ('Run'), ('Runs'), ('Running'), ('Ran'), ('Goose'), ('Geese')
最后
SELECT * FROM dbo.attempt1 WHERE contains(word,'FORMSOF(INFLECTIONAL, goose)')
或
SELECT * FROM dbo.attempt1 WHERE freetext(word,'run')
我相信答案是否定的,但也许有人有一个绝妙的解决方法: 可以(你做)SQL Group By word variations?
变体示例 Run: Run, Ran, Running, Runs
或 Goose: Goose, Geese
我知道不做这类事情的原因有很多,我相信这里会分享一些,但我有一个小项目,这会有所帮助。如果没有创建我自己的个人字典 table,这并没有发生,或者没有大量的 replace 或 case 语句,有没有人有实用的 方法来做到这一点?我目前在 SQL 服务器上工作,但任何 SQL 语言都是一个受欢迎的答案。
您正在根据单词的 STEM 进行分组。寻找 SQL 词干:
或者您可以使用 SQL soundex 函数来查找两个词是否相似:
SELECT SOUNDEX(word), COUNT(*) FROM tbl GROUP BY SOUNDEX(word)
@Y.L 在这个问题上值得称赞,但由于答案在评论中,我不确定如何将其标记为正确答案?不管怎样,下面是代码的基础知识:
drop table if exists dbo.attempt1
create table dbo.attempt1 ( tempid int IDENTITY(1,1) PRIMARY KEY, word varchar(50) )
CREATE UNIQUE INDEX cx_uid ON dbo.attempt1(tempid);
CREATE FULLTEXT INDEX ON dbo.attempt1(word)
KEY INDEX cx_uid
WITH STOPLIST = SYSTEM;
insert into dbo.attempt1 (word)
values ('Run'), ('Runs'), ('Running'), ('Ran'), ('Goose'), ('Geese')
最后
SELECT * FROM dbo.attempt1 WHERE contains(word,'FORMSOF(INFLECTIONAL, goose)')
或
SELECT * FROM dbo.attempt1 WHERE freetext(word,'run')