Filtrado de información

03/03/2004 - 20:13 por Isaías | Informe spam
Amigos todos, ahora que los veo muy activos, expongo esta
duda.

Muchos de ustedes ya saben que la empresa para la cual
presto mis servicios se dedica al procesamiento de
llamadas TELEFONICAS, pues bien.

Existe un proyecto de recibir SMS (Short Message Service)
y pasarlos en forma de ROLLUP (scroll en pantalla) en
algunos programas de television, pues bien, me estan
pidiendo que dichos mesnajes sean FILTRADO, eliminando
(descartando) todos aquellos que contengan palabras
obscenas (groserias, en mi pais).

Mi idea, crear una tabla donde se localicen todas estas
palabras NO PERMITIDAS y crear un trigger de INSTEAD OFF
de inserccion para FILTRAR conta dicha tabla.

El comentario que quiero de ustedes es ¿cual seria el
codigo eficiente para realizar dicho filtrado?, espero que
alguno de ustedes haya resuelto dicha problematica.

Ejemplo:

Una palabra obscena en mi pais es "PENDEJO", bien si yo
recibo en mi string, cualesquiera de las siguientes frases:

"ESPERO QUE ESTE BIEN PENDEJO"
"POR ESO ME CAES MALPENDEJO"
"PENDEJOINUTIL QUE TE VAYA BIEN"

Descartarlas y que no aparezcan en la television abierta.

Gracias por todo su apoyo, como siempre.

Preguntas similare

Leer las respuestas

#16 Javier Loria
04/03/2004 - 04:44 | Informe spam
Hola Isaias:
Siempre tienes problemas bien interesantes y aun cuando temprano iba a
escribir sobre la funcionalidad que requieres, es claro que ya han cubierto
con las respuestas la mayoria de los problemas.
Basado en la sintaxis de Ulises, podrias considerar algo como:
/* Crea las Tablas */
CREATE TABLE Mensajes(
MensajeID INT NOT NULL PRIMARY KEY,
Mensaje VARCHAR(80) NOT NULL,
EsGroseria TINYINT NOT NULL
DEFAULT (0)
CHECK (EsGroseria IN (0,1))
)

CREATE TABLE Groserias(
Groseria VARCHAR(30) NOT NULL PRIMARY KEY
)
/* Inserta un par de Groserias */
INSERT INTO Groserias
SELECT 'PENDEJO'
UNION ALL
SELECT 'PENDEJA'

/* Codigo de Trigger */
CREATE TRIGGER TrInsMensajes ON Mensajes
INSTEAD OF INSERT
AS
SET ANSI_WARNINGS OFF
INSERT Mensajes
SELECT Inserted.MensajeID
, Inserted.Mensaje
, CASE WHEN MAX(Groserias.Groseria) IS NULL THEN 0
ELSE 1
END
FROM Inserted
LEFT JOIN Groserias
ON Inserted.Mensaje LIKE '%'+Groserias.Groseria+'%'
GROUP BY Inserted.MensajeID, Inserted.Mensaje
GO

/* Prueba */
INSERT into Mensajes(MensajeID, Mensaje)
SELECT 1, 'HOLA COMO ESTAN' UNION ALL
SELECT 2, 'HOLA PENDEJO' UNION ALL
SELECT 3, 'HOLA PENDEJO, PENDEJA'

SELECT * FROM Mensajes
/* Fin */

En este caso siempre insertas la fila pero marcas el mensaje como
Groseria si parece que lo es pero permite a un usuario cambiar el status en
cualquiera via.

Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

ulises escribio:
Lo primero que se me ocurre es que sigas manejando la
inserción total en la tabla de manera que si luego te
piden información sobre lo que filtras o te pidan que
reemplaces las "groserias" por asteriscos tengas esos
datos a la mano.

De esa manera tendría una inserción clásica con un trigger
que verifique lo insertado contra una tabla de no
permitidos y si es correcta lo grabe en otra tabla de la
cual se obtiene la información para ser mostrada en la
pantalla, asumo que tu tabla de groserias no es grande
entonces podría hacerse algo como :

create table tempo ( mensaje varchar(80) )
create table tempodos ( mensaje varchar(80) )
create table groseria ( palabra varchar(80) )
go
insert into groseria values ('PENDEJO' )
go
create trigger trInserta on tempo for insert
as
if not exists ( select mensaje
from inserted cross join groseria
where len(inserted.mensaje) >
len( replace (inserted.mensaje,palabra,'')) )
insert into tempodos select * from inserted

go
INSERT into tempo VALUES ('HOLA COMO ESTAN')
INSERT into tempo VALUES ('HOLA PENDEJO')
go
select * from tempo
select * from tempodos



mensaje

HOLA COMO ESTAN
HOLA PENDEJO

(2 row(s) affected)

mensaje

HOLA COMO ESTAN

(1 row(s) affected)

revisa el rendimiento que obtienes y ve si puedes mejorar
el CROSS JOIN que no me termina de gustar.

Saludos,
Ulises

Amigos todos, ahora que los veo muy activos, expongo esta
duda.

Muchos de ustedes ya saben que la empresa para la cual
presto mis servicios se dedica al procesamiento de
llamadas TELEFONICAS, pues bien.

Existe un proyecto de recibir SMS (Short Message Service)
y pasarlos en forma de ROLLUP (scroll en pantalla) en
algunos programas de television, pues bien, me estan
pidiendo que dichos mesnajes sean FILTRADO, eliminando
(descartando) todos aquellos que contengan palabras
obscenas (groserias, en mi pais).

Mi idea, crear una tabla donde se localicen todas estas
palabras NO PERMITIDAS y crear un trigger de INSTEAD OFF
de inserccion para FILTRAR conta dicha tabla.

El comentario que quiero de ustedes es ¿cual seria el
codigo eficiente para realizar dicho filtrado?, espero que
alguno de ustedes haya resuelto dicha problematica.

Ejemplo:

Una palabra obscena en mi pais es "PENDEJO", bien si yo
recibo en mi string, cualesquiera de las siguientes frases:

"ESPERO QUE ESTE BIEN PENDEJO"
"POR ESO ME CAES MALPENDEJO"
"PENDEJOINUTIL QUE TE VAYA BIEN"

Descartarlas y que no aparezcan en la television abierta.

Gracias por todo su apoyo, como siempre.
.
Respuesta Responder a este mensaje
#17 ulises
04/03/2004 - 16:37 | Informe spam
Sí, también fuincionaría, creo que es cuestión de ver
rendimientos, revisa también la solución que plantea
Javier :)

Saludos,
Ulises

ok... pero y eso que tiene que ver???? :s igual funciona.


"Maximiliano D. A." <maxi_accotto[arroba]speedy[.]com[.]


ar> escribió en el
mensaje news:%
si pero hay una lista de palabras :(


Salu2

Maxi
Buenos Aires Argentina
Desarrollador Microsoft 3 Estrellas .NET
[Maxi_accotto[arroba]speedy[punto]com[punto]ar
MSN:



"Víctor Rafael Bocanegra Arias"




escribió en
el mensaje news:%





> porque no usar algo asi:
>
> if not exists (
> select mensaje
> from inserted
> inner join groseria on mensaje like '%'+palabra+'%')
>
> Espero sus comentarios xq yo tengo algo similar




corriendo...:P
>
> Salu2
>
> Victor Rafael Bocanegra Arias
> Lima, Peru
>
>
> "ulises" escribió en




el mensaje
> news:649c01c40163$db5271e0$
> Ni tan bueno, en el caso de inserciones multiples




rechaza
> todas si es que alguno tiene las palabras




prohibidas ...
> pero creo que Isaias sabrá corregir las falencias :)
>
> Saludos,
> Ulises
>
> >Muy bueno!! lo ques saber ;-)
> >
> >
> >
> >
> >Salu2
> -
> >Maxi
> >Buenos Aires Argentina
> >Desarrollador Microsoft 3 Estrellas .NET
> >[Maxi_accotto[arroba]speedy[punto]com[punto]ar
> >MSN:
> -
> >
> >
> >"ulises" escribió




en el
> mensaje
> >news:647401c40161$642e2de0$
> >Lo primero que se me ocurre es que sigas manejando la
> >inserción total en la tabla de manera que si luego te
> >piden información sobre lo que filtras o te pidan que
> >reemplaces las "groserias" por asteriscos tengas esos
> >datos a la mano.
> >
> >De esa manera tendría una inserción clásica con un




trigger
> >que verifique lo insertado contra una tabla de no
> >permitidos y si es correcta lo grabe en otra tabla




de la
> >cual se obtiene la información para ser mostrada en




la
> >pantalla, asumo que tu tabla de groserias no es




grande
> >entonces podría hacerse algo como :
> >
> >create table tempo ( mensaje varchar(80) )
> >create table tempodos ( mensaje varchar(80) )
> >create table groseria ( palabra varchar(80) )
> >go
> >insert into groseria values ('PENDEJO' )
> >go
> >create trigger trInserta on tempo for insert
> >as
> >if not exists ( select mensaje
> > from inserted cross join groseria
> > where len(inserted.mensaje) >
> > len( replace
> (inserted.mensaje,palabra,'')) )
> > insert into tempodos select * from inserted
> >
> >go
> >INSERT into tempo VALUES ('HOLA COMO ESTAN')
> >INSERT into tempo VALUES ('HOLA PENDEJO')
> >go
> >select * from tempo
> >select * from tempodos
> >
> >
> >
> >mensaje
> >
> >HOLA COMO ESTAN
> >HOLA PENDEJO
> >
> >(2 row(s) affected)
> >
> >mensaje
> >
> >HOLA COMO ESTAN
> >
> >(1 row(s) affected)
> >
> >revisa el rendimiento que obtienes y ve si puedes




mejorar
> >el CROSS JOIN que no me termina de gustar.
> >
> >Saludos,
> >Ulises
> >
> >>Amigos todos, ahora que los veo muy activos,




expongo esta
> >>duda.
> >>
> >>Muchos de ustedes ya saben que la empresa para la




cual
> >>presto mis servicios se dedica al procesamiento de
> >>llamadas TELEFONICAS, pues bien.
> >>
> >>Existe un proyecto de recibir SMS (Short Message




Service)
> >>y pasarlos en forma de ROLLUP (scroll en pantalla)




en
> >>algunos programas de television, pues bien, me estan
> >>pidiendo que dichos mesnajes sean FILTRADO,




eliminando
> >>(descartando) todos aquellos que contengan palabras
> >>obscenas (groserias, en mi pais).
> >>
> >>Mi idea, crear una tabla donde se localicen todas




estas
> >>palabras NO PERMITIDAS y crear un trigger de




INSTEAD OFF
> >>de inserccion para FILTRAR conta dicha tabla.
> >>
> >>El comentario que quiero de ustedes es ¿cual seria




el
> >>codigo eficiente para realizar dicho filtrado?,




espero
> >que
> >>alguno de ustedes haya resuelto dicha problematica.
> >>
> >>Ejemplo:
> >>
> >>Una palabra obscena en mi pais es "PENDEJO", bien




si yo
> >>recibo en mi string, cualesquiera de las siguientes
> >frases:
> >>
> >>"ESPERO QUE ESTE BIEN PENDEJO"
> >>"POR ESO ME CAES MALPENDEJO"
> >>"PENDEJOINUTIL QUE TE VAYA BIEN"
> >>
> >>Descartarlas y que no aparezcan en la television




abierta.
> >>
> >>Gracias por todo su apoyo, como siempre.
> >>.
> >>
> >
> >
> >
> >Outgoing mail is certified Virus Free.
> >Checked by AVG anti-virus system




(http://www.grisoft.com).
> >Version: 6.0.593 / Virus Database: 376 - Release




Date:
> 21/02/2004
> >
> >
> >.
> >
>
>



Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system




(http://www.grisoft.com).
Version: 6.0.593 / Virus Database: 376 - Release Date:




21/02/2004






.

Respuesta Responder a este mensaje
#18 Isaias
04/03/2004 - 17:59 | Informe spam
Como siempre Javier, muchas gracias por tu comentario,
hare las pruebas necesarias para ver su funcionamiento.

Un saludo.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida