Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 2
Ir a la página 1, 2  Siguiente
 
Censor De Palabras, Sin Acabar
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje 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: 33 veces
CensorDePalabras.tar.gz
Descripción:  
Descargar
Nombre del archivo: CensorDePalabras.tar.gz
Tamaño: 8.56 KB
Descargado: 33 veces
CensorDePalabras.tar.gz
Descripción:  
Descargar
Nombre del archivo: CensorDePalabras.tar.gz
Tamaño: 8.56 KB
Descargado: 33 veces

 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Censor De Palabras, Sin Acabar 
 
Quién lo hubiera dicho, el amigo Shell abogando por la censura. Lo veo y no lo creo.
 




===================
Migrando desde visual basic, el Gambas de Ms
Mi blog gambero
 
Dani26 - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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.
 



 
didier18 - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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!.
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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

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

 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
última edición por Shell el Sabado, 04 Octobre 2014, 00:27; editado 1 vez 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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.
 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
 



 
didier18 - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Problema Al Ordenar Palabras Con Acentos pacomuz Controles/Librerías/Componentes 6 Jueves, 09 Diciembre 2010, 19:30 Ver último mensaje
shordi
No hay nuevos mensajes Control Editor: Colorear Palabras Clave jsbsan Controles/Librerías/Componentes 0 Martes, 29 Marzo 2011, 10:23 Ver último mensaje
jsbsan
No hay nuevos mensajes Colorear Palabras En Un TextArea alessandri Controles/Librerías/Componentes 1 Sabado, 12 Octobre 2013, 17:49 Ver último mensaje
shordi
No hay nuevos mensajes Coleccion De Palabras Que Guarden Valores ... v3ctor General 8 Viernes, 07 Noviembre 2014, 21:32 Ver último mensaje
jsbsan
 

Publicar nuevo tema  Responder al tema  Página 1 de 2
Ir a la página 1, 2  Siguiente

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
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



  

 

cron