我怎么能选择所有的n-grams,即。使用 SQL 从字符串中提取长度为n 的子字符串?例如,3-克串的例子是EXA,XAM,安培,MPL,PLE。
为了更精确,我使用 PostgreSQL。
这是诀窍:
SELECT SUBSTRING('example' FROM n FOR 3)
FROM GENERATE_SERIES(1, LENGTH( 'example' )-2, 1) n;
exa
xam
amp
mpl
ple
Run Code Online (Sandbox Code Playgroud)
这是在一个函数中:
CREATE OR REPLACE FUNCTION ngrams(varchar, integer) RETURNS SETOF TEXT AS $$
SELECT SUBSTRING($1 FROM n FOR $2)::TEXT
FROM GENERATE_SERIES(1, LENGTH($1)-($2-1), 1) n;
$$ LANGUAGE SQL;
Run Code Online (Sandbox Code Playgroud)
像这样使用它:
SELECT ngrams('example', 3)
Run Code Online (Sandbox Code Playgroud)