Extraer palabras de un texto ó párrafo
--El siguiente procedimiento permite extraer las palabras
desde un texto largo ó un párrafo utilizando como fin de cada palabra el carácter
de espacio en blanco, puede guardar estas palabras en una tabla para realizar
diferentes aplicaciones.
--Puede reescribir el procedimiento como una función para
realizar diferentes implementaciones según la necesidad.
Utilidad:
--Muchos casos requieren analizar automáticamente las
palabras que se encuentran en un texto largo, por ejemplo el texto digitado por
un agente de call-center que ingresa quejas ó reclamaciones sobre un artículo,
con un registro de palabras claves se puede analizar el producto con más
problemas, la queja más repetida, las respuestas dadas etc.
Notas:
--Se utiliza un cursor para cargar todas las líneas de un
campo memo tipo CLOB que almacena texto de gran tamaño.
-- REGEXP_SUBSTR: Función Oracle para extraer de una cadena
una subcadena de caracteres que coincidan con un patrón especificado en una
expresión regular Oracle en este caso extrae únicamente palabras con caracteres alfabéticos:
[a-z]*
create or replace procedure pr_docword(p_document_id in number)
as
cursor c_documento
is
select text
from docdet
where document_id=p_document_id;
v_cantidad number;
v_palabra varchar2(80);
v_inicio number:=1;
v_final number:=1;
begin
--limpiar tabla
delete from doctemp;
for doc in c_documento
loop
v_cantidad:=length(doc.text)-length(replace(doc.text,' '));
for x in 1..v_cantidad
loop
v_final:=instr(doc.text,' ',1,x);
v_palabra:=substr(doc.text,v_inicio,(v_final-v_inicio));
v_inicio:=v_final+1;
insert into doctemp values (v_palabra);
end loop;
--insertar la ultima palabra
v_palabra:=substr(doc.text,v_inicio,(length(doc.text)-v_inicio)+1);
insert into doctemp values (v_palabra);
end loop;
--limpiar caracteres no alfabéticos
update doctemp
set word=initcap(REGEXP_SUBSTR(word,'[a-z]*'));
delete from doctemp where word is null;
commit;
end pr_docword;
Comentarios