【发布时间】:2014-02-28 12:45:11
【问题描述】:
我是 SQL 新手,所以这个问题可能是相当基本的,但我花了相当多的时间在它上面没有成功。
给了我一个需要修改的 SQL 代码块。此块当前从文本索引中提取所有标记(“单词”)。我需要做的是遍历每个令牌并(1)从中提取给定长度N的所有字符N-gram,然后(2)将它们插入表中。
所以如果一个令牌是abcdf和N=3,那么我需要提取abc、bcd和cdf
我正在努力解决 (1)。
我在 Oracle 的 PL/SQL 中执行此操作:版本 11.2.0.3.0
我现在拥有的是这样的:
CREATE OR REPLACE PROCEDURE extract_ngrams
AS
tokens ctx_doc.token_tab;
w VARCHAR2(255);
NgramLen NUMBER;
ngr VARCHAR(10);
BEGIN
-- extract all tokens ("words")
CTX_DOC.TOKENS(myindex,textkey,tokens);
NgramLen := 3;
FOR i IN tokens.FIRST..tokens.LAST LOOP
w := tokens(i).token;
dbms_output.put_line(w);
-- Use SUBSTRING + LEN or some other approach to extract Ngrams of length=NgramLen
-- insert each Ngram into a table
end loop;
END;
/
将FOR 循环与SUBSTRING、LEN 和/或任何其他适当的函数结合起来以在循环中将ngrams 提取到ngr 中的正确方法是什么? 987654332@?
谢谢!
【问题讨论】:
标签: sql oracle plsql substring