Censor De Palabras, Sin Acabar


Ir a la página 1, 2  Siguiente

Objetivo: Censor De Palabras, Sin Acabar
Hola!.

Estaba haciendo un censor de palabras.

censor1

Tenemos un texto y queremos censurar palabras que se van añadiendo a la lista.
El total de las palabras censuradas se cuentan, ( he visto otro error, si censuro dos veces por que he añadido otra palabra a la lista, no cuenta bien).

censor2

Bien. He añadido en el código cosas que hay que solucionar y que tengo que hacer aun.
Problemas:

- Si quito una palabra de la lista, la palabra debe ser restaurada en el texto y que pueda verse. Un array global supongo.
- Problema con palabras que tengan al lado una coma o un punto. En el array se almacenaría el elemento todo junto.
( En realidad no debería perderse la coma o el punto ). Cuando el texto es algo más de una frase no se deben perder los puntos, las comas, etc.

Subo el código por si queréis mejorar o solucionar los problemas.

Saludos


CensorDePalabras.tar.gz
Descripción:  
Descargar
Nombre del archivo: CensorDePalabras.tar.gz
Tamaño: 8.56 KB
Descargado: 36 veces
CensorDePalabras.tar.gz
Descripción:  
Descargar
Nombre del archivo: CensorDePalabras.tar.gz
Tamaño: 8.56 KB
Descargado: 36 veces
CensorDePalabras.tar.gz
Descripción:  
Descargar
Nombre del archivo: CensorDePalabras.tar.gz
Tamaño: 8.56 KB
Descargado: 36 veces

Objetivo: Re: Censor De Palabras, Sin Acabar
Quién lo hubiera dicho, el amigo Shell abogando por la censura. Lo veo y no lo creo.

Objetivo: Re: Censor De Palabras, Sin Acabar
Hola Shell.
Si entiendo su problema, que desea ocultar una palabra de una frase o un texto ... ¿Es eso lo que quieres hacer?
En este caso creo que hay que tratar con el problema de una manera más general.
¿Por qué tratar a las palabras una tras otra si 'gambas' puede hacer por usted?
De hecho, usted puede encontrar la misma palabra varias veces en un texto y yo creo que hay que empezar por ahí ...
Haga doble clic en la palabra debe ser enviado de vuelta a la caja de texto y luego pulsar el botón, se tienen que buscar la palabra en todo el texto desde el principio del texto (por supuesto).
La palabra, una vez encontrado será reemplazado por dos estrellas (y la censura será más completa y mirando para poner la palabra más fácil.)
Si quiere censurar una segunda palabra para sustituirla con 3 estrellas y así sucesivamente ...
Como si usted quiere poner la palabra censurado # 3 usted sabrá que debe buscar en el texto de todas las secuencias de 4 estrellas ...
Que tengas un buen día.

Perfil MP  
Objetivo: Re: Censor De Palabras, Sin Acabar
Shell escribió: [Ver mensaje]
- Problema con palabras que tengan al lado una coma o un punto. En el array se almacenaría el elemento todo junto.
( En realidad no debería perderse la coma o el punto ). Cuando el texto es algo más de una frase no se deben perder los puntos, las comas, etc.


Una solución podría ser ésta.:
Public Function Censurar(untexto As String, palabras As String[]) As String

Dim cuentapalabras As Integer
Dim apalabras As New String[]
Dim palabra As String
Dim i As Integer

apalabras = Split(untexto, " ")
For Each palabra In palabras
For i = 0 To apalabras.Max

Select Case palabra
Case apalabras[i]
cuentapalabras += 1
apalabras[i] = String$(String.Len(apalabras[i]), "*")
Case String.Left(apalabras[i], String.Len(apalabras[i]) - 1)
If IsPunct(String.Right(apalabras[i], 1)) Then
cuentapalabras += 1
apalabras[i] = String$(String.Len(apalabras[i]), "*") & String.Right(apalabras[i], 1)
Endif
End Select

Next
Next
lbcuentapalabras.Text = cuentapalabras
Return apalabras.Join(" ")

End

última edición por vuott el Viernes, 03 Octobre 2014, 10:13; editado 2 veces
Perfil MP  
Objetivo: Re: Censor De Palabras, Sin Acabar
Dani:

Citar:

Quién lo hubiera dicho, el amigo Shell abogando por la censura. Lo veo y no lo creo.


Jajaja, es solo un ejemplo. En realidad , es una ampliación de un ejemplo de Python.

# Censor de palabras
def censor(text,word):
word_lst = text.split()
for i in range(len(word_lst)):
if word_lst[i] == word:
word_lst[i] = len(word_lst[i])* "*"
return " ".join(word_lst)

print (censor("Poderoso caballero es don Dinero", "Dinero"))


Didier:

Si, efectivamente. El ejemplo es capaz de buscar palabras repetidas.
Solo que hay que mejorarlo un poco. Siempre hay que mejorar.

Merci.

Vuott:

Esta tarde no creo que me ponga a mejorar el ejemplo, ( me voy de fiesta , pero no puedo beber mucho, tengo que volver al trabajo).
Asi que este fin de semana, veo mejor tu mejora.

Grazie mille!.

Objetivo: Re: Censor De Palabras, Sin Acabar
Shell escribió: [Ver mensaje]
me voy de fiesta , pero no puedo beber mucho, tengo que volver al trabajo).


uhmmmmm..... al final de la fiesta tu estaras asì:

(trad.: Borracho pasea con pitón al cuello.)
http://www.ansa.it/lombardia/notizi...f8846cb5ec.html

Perfil MP  
Objetivo: Re: Censor De Palabras, Sin Acabar
vuott escribió: [Ver mensaje]


uhmmmmm..... al final de la fiesta tu estaras asì:

(trad.: Borracho pasea con pitón al cuello.)
http://www.ansa.it/lombardia/notizi...f8846cb5ec.html


Je, pues no. Alguna copa, pero nada mas. Hay que ser responsable.
Como dice el compañero didier17, gambas da mejores posibilidades para sustituir las palabras.

Uno de los errores habituales es querer hacer las cosas de la misma forma que
el código original, cuando es posible usar las funciones internas que nos da el propio lenguaje, gambas o Python.
Cuando no la conocemos o no la recordamos usamos otros métodos mas "artesanales"

Por algún motivo en el ejemplo de Python no usó la función Replace. ( Y la tiene disponible )
Si vemos el código en Python es mejor hacerlo de esta forma para la función:

# Censor de palabras
def censor(texto,lista):
for palabra in lista:
texto = texto.replace(palabra,"*" * len(palabra))
return texto


lista_de_palabras =['caballero','Dinero']
print (censor("Poderoso caballero es don Dinero.",lista_de_palabras))


Quedando la función para censurar en gambas de esta forma:

Public Function Censurar(untexto As String, palabras As String[]) As String

Dim cuentapalabras As Integer
Dim palabra As String

For Each palabra In palabras
untexto = Replace(untexto, palabra, String(String.Len(palabra), "*"))
cuentapalabras += 1
Next
lbcuentapalabras.Text = cuentapalabras
Return untexto

End


Ahora solo me queda crear una variable global o pasada a la función que recuerde la frase y no se pierda usando solamente la propiedad .text del TextArea.
¿ Qué opinas Vuott ?.

Saludos

Objetivo: Re: Censor De Palabras, Sin Acabar
Hola.

Aquí os dejo el código con la función mejorada. Merci didier18.
Y gracias a ti Vuott. El código de tu función era un poco más largo.

Queda por solucionar el problema de recuperar la palabra en caso de borrar una palabra de la lista y que se restaure en el texto.
Eso parece fácil, pero ahora ya no son horas.

¿ Debí sustituir el anterior ?. Oh oh.

Saludos

última edición por Shell el Sabado, 04 Octobre 2014, 00:27; editado 1 vez

CensorDePalabras.tar.gz
Descripción:  
Descargar
Nombre del archivo: CensorDePalabras.tar.gz
Tamaño: 8.47 KB
Descargado: 29 veces
CensorDePalabras.tar.gz
Descripción:  
Descargar
Nombre del archivo: CensorDePalabras.tar.gz
Tamaño: 8.47 KB
Descargado: 29 veces
CensorDePalabras.tar.gz
Descripción:  
Descargar
Nombre del archivo: CensorDePalabras.tar.gz
Tamaño: 8.47 KB
Descargado: 29 veces

Objetivo: Re: Censor De Palabras, Sin Acabar
Shell escribió: [Ver mensaje]
Quedando la función para censurar en gambas de esta forma:

Sì, bravo, es muy breve.

Perfil MP  
Objetivo: Re: Censor De Palabras, Sin Acabar
Hola amigos.

Creo que para que (todavía) una pequeña mejora de su proyecto, podría usar un 'PopMenu' en el 'TextArea ...
Usted bien podría ser el código más flexible para una inversión mínima.
Por supuesto, es necesario adaptar las rutinas 'PopMenu' de acuerdo a sus necesidades, pero de esta manera que su aplicación tendrá un aspecto más profesional.
Esto es lo que puede dar (por su ejemplo).
Como usted va a trabajar en "Los mensajes de texto" He utilizado el apoyo del ratón ...

Public Sub Texto_MouseDown()
Dim Popmenu, pmnu As Menu
If Mouse.Right Then 'si on a cliqué avec le bouton droit de la souris
Popmenu = New Menu(FMain) 'création du pop up menu
pmnu = New Menu(Popmenu) As "pmnuCensurar" 'création de l'item 0 dans le pop up menu
pmnu.Text = ("Censurar") & Vtxt 'texte de l'item 0
pmnu = New Menu(Popmenu) As "pmnu2" 'création de l'item 1 dans le pop up menu
pmnu.Text = ("pmnu2") 'texte de l'item 1
pmnu = New Menu(Popmenu) As "pmnu3" 'création de l'item 2 dans le pop up menu
pmnu.Text = ("pmnu3") 'texte de l'item 2
pmnu = New Menu(Popmenu) As "pmnu4" 'création de l'item 3 dans le pop up menu
pmnu.Text = ("pmnu4") 'texte de l'item 3
If Popmenu Then Popmenu.Popup() 'si on clique sur pop up menu on affiche les items
Endif 'fin de si on a cliqué avec le bouton droit de la souris
End

Public Sub pmnuCensurar_Click() 'menu pop up Censurar las palabras

End

Public Sub pmnu2_Click()

End

Public Sub pmnu3_Click()

End

Public Sub pmnu4_Click()

End

No dudo que el 'PopMenu' no tiene un secreto para usted, pero me puso este ejemplo 'hackeado' para toda la comunidad (si puede ayudar o dar ideas .. .;-)
Para que este ejemplo funcione, debe hacer un doble "clic" en la palabra que desea ver y luego un clic derecho del ratón se abre el menú PopMenu ...
Salí de comentarios en francés, pero el código es tan simple que trasladase ...
que tengas un buen día

Perfil MP  
Ir a la página 1, 2  Siguiente

Página 1 de 2


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.1367s (PHP: -3% SQL: 103%)
Consultas SQL: 27 - Debug off - GZIP Activado