В SQL Server (или любом другом языке SQL) вы можете группировать по вариантам Word? - PullRequest
0 голосов
/ 11 декабря 2019

Я полагаю, что ответ отрицательный, но, возможно, у кого-то есть блестящий обходной путь: могут (вы делаете) варианты SQL Group By Word?

Примеры вариантов Run: Run, Ran, Running, Runs или Goose: Goose, Geese

Я знаю, что есть ряд причин, по которым нельзя делать подобные вещи, я уверен, что некоторые из них будут здесь представлены, но у меня есть небольшой любимый проект, который поможет. Если не считать создания моей личной таблицы словарей, чего не происходит, или с абсурдным количеством операторов замены или падежа, у кого-нибудь есть практический способ сделать это? В настоящее время я работаю в SQL Server, но любой язык SQL будет приветствоваться.

Ответы [ 2 ]

0 голосов
/ 12 декабря 2019

@ YL заслуживает похвалы за этот, но так как ответ в комментарии, я не уверен, как пометить его как правильный ответ? В любом случае, вот основы кода:

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')
0 голосов
/ 11 декабря 2019

Вы группируете по СТЭМУ слова. Поищите в SQL: Запасовые слова в MySQL и Соответствие корня SQL-слова

Или вы можете использовать функцию soundex SQL, чтобы найти совпадения двух слов:

SELECT SOUNDEX(word), COUNT(*) FROM tbl GROUP BY SOUNDEX(word)
...