Estoy teniendo una grieta en la blasfemia de filtrado para un foro en la web escrito en Python.

Como parte de eso, estoy tratando de escribir una función que toma una palabra, y devuelve todos los posibles burlarse de la ortografía de la palabra que uso visualmente similares caracteres en lugar de letras específicas (por ejemplo, s†å©køv€rƒ|øw).

Espero que voy a tener que ampliar esta lista con el tiempo para cubrir la creatividad de la gente, pero hay una lista flotando alrededor en cualquier lugar en internet que podría utilizar como un punto de partida?

  • Yo no puedo responder a esa pregunta, pero yo no usaría una función que devuelve todos los posibles burlarse de la ortografía de una palabra. Que pueden ser muy numerosos. En su lugar, me gustaría normalizar cada palabra en los puestos de trabajo antes de buscar en la lista de malas palabras, es decir, transformar la «s†å©køv€rƒ|øw» a «de stackoverflow» antes de la búsqueda.
  • oh, querido, que sería un mejor enfoque no es. El programador novato mente es como un mogwai — no deben de ser alimentados después de la medianoche.
  • Pero no duplicado exacto: stackoverflow.com/questions/4846365/…
  • pop que como una respuesta, y yo estaría encantado de aceptarlo.
  • No, yo No. No soluciona el problema, es más bien una nota de lado. Todavía se necesitan datos sobre la asignación de caracteres, que es el principal problema aquí. (Y yo creo que tu pregunta es perfectamente válido y en el tema).
  • Entiendo tu punto de vista, y saludos.
  • Hay scripts y programas que leetify una palabra (alternar caso y reemplazar o con cero, 3 con el correo, etc. Me gustaría empezar por mirar los.
  • esta idea surgió de mi mente – no es ni analizados minuciosamente ni probado en forma alguna. sin embargo, ¿cómo alrededor de 1. elige un tipo de letra 2. crear mapa de bits representaciones de todos los glifos 3. definir una medida de similitud sobre mapas de bits (sencillo: la proporción de la igualdad frente a diferentes valores de los bits sobre todas las posiciones de la rejilla dentro de una ets cuadro delimitador). 4. calcular la matriz de similitud para los pares de caracteres 5. clúster de los glifos en consecuencia 6. elegir un representante de cada grupo (lo ideal sería que estas saldría como a-zA-Z0-9). entonces el filtrado equivaldría a la asignación de cada char en el clúster adecuado rep y un diccionario de búsqueda.
  • … obviamente tendrías que aplicar una técnica similar a normalizar los homófonos (al menos en idiomas como el inglés con no único phonem-correspondencias grafema). rhite, dewd ? 😉
  • eso es un buen enfoque. Un día.
  • Para la normalización de los homófonos, busque «soundex» y sus descendientes. Para el resto, usted probablemente querrá también mirar hacia fuera para el alfabeto Cirílico, etc., a la derecha? «IDN homograph ataques» es el término que aquí. Probablemente hay una lista de los que ya están.

4 Comentarios

  1. 37

    Este es, probablemente, ambos mucho más profundo de lo que usted necesita, pero no lo suficientemente amplia como para cubrir el caso de uso, pero el consorcio Unicode han tenido que lidiar con los ataques en contra de los nombres de dominio internacionalizados y se acercó con esta lista de homógrafos (personajes con los mismos o similares de representación):

    http://www.unicode.org/Public/security/latest/confusables.txt

    Podría hacer que un punto de partida, al menos.

    • Excelente. Necesitaba algo que era visualmente indistinguible de una E mayúscula, pero que habría de venir después de cualquier ordinario palabra de inglés. «MATEMÁTICA SANS-SERIF CAPITAL E» es perfecto (para la fuente en mi caso).
  2. 4

    He creado una clase de python para hacer exactamente esto, basado en Robin unicode de enlace para «confusables»

    https://github.com/wanderingstan/Confusables

    Por ejemplo, «Hola» sería ampliada en el siguiente conjunto de regexp clases de personajes:


    [H\H\ℋ\ℌ\ℍ\𝐇\𝐻\𝑯\𝓗\𝕳\𝖧\𝗛\𝘏\𝙃\𝙷\Η\𝚮\𝛨\𝜢\𝝜\𝞖\Ⲏ\Н\Ꮋ\ᕼ\ꓧ\𐋏\Ⱨ\Ң\Ħ\Ӊ\Ӈ]
    [e\℮\e\ℯ\ⅇ\𝐞\𝑒\𝒆\𝓮\𝔢\𝕖\𝖊\𝖾\𝗲\𝘦\𝙚\𝚎\ꬲ\е\ҽ\ɇ\ҿ]
    [l\‎\|\∣\⏽\│1\‎\۱\𐌠\‎\𝟏\𝟙\𝟣\𝟭\𝟷I\I\Ⅰ\ℐ\ℑ\𝐈\𝐼\𝑰\𝓘\𝕀\𝕴\𝖨\𝗜\𝘐\𝙄\𝙸\Ɩ\l\ⅼ\ℓ\𝐥\𝑙\𝒍\𝓁\𝓵\𝔩\𝕝\𝖑\𝗅\𝗹\𝘭\𝙡\𝚕\ǀ\Ι\𝚰\𝛪\𝜤\𝝞\𝞘\Ⲓ\І\Ӏ\‎\‎\‎\‎\‎\‎\‎\‎\ⵏ\ᛁ\ꓲ\𖼨\𐊊\𐌉\‎\‎\ł\ɭ\Ɨ\ƚ\ɫ\‎\‎\‎\‎\ŀ\Ŀ\ᒷ\🄂\⒈\‎\⒓\㏫\㋋\㍤\⒔\㏬\㍥\⒕\㏭\㍦\⒖\㏮\㍧\⒗\㏯\㍨\⒘\㏰\㍩\⒙\㏱\㍪\⒚\㏲\㍫\lj\IJ\‖\∥\Ⅱ\ǁ\‎\𐆙\⒒\Ⅲ\𐆘\㏪\㋊\㍣\Ю\⒑\㏩\㋉\㍢\ʪ\₶\Ⅳ\Ⅸ\ɮ\ʫ\㏠\㋀\㍙]
    [l\‎\|\∣\⏽\│1\‎\۱\𐌠\‎\𝟏\𝟙\𝟣\𝟭\𝟷I\I\Ⅰ\ℐ\ℑ\𝐈\𝐼\𝑰\𝓘\𝕀\𝕴\𝖨\𝗜\𝘐\𝙄\𝙸\Ɩ\l\ⅼ\ℓ\𝐥\𝑙\𝒍\𝓁\𝓵\𝔩\𝕝\𝖑\𝗅\𝗹\𝘭\𝙡\𝚕\ǀ\Ι\𝚰\𝛪\𝜤\𝝞\𝞘\Ⲓ\І\Ӏ\‎\‎\‎\‎\‎\‎\‎\‎\ⵏ\ᛁ\ꓲ\𖼨\𐊊\𐌉\‎\‎\ł\ɭ\Ɨ\ƚ\ɫ\‎\‎\‎\‎\ŀ\Ŀ\ᒷ\🄂\⒈\‎\⒓\㏫\㋋\㍤\⒔\㏬\㍥\⒕\㏭\㍦\⒖\㏮\㍧\⒗\㏯\㍨\⒘\㏰\㍩\⒙\㏱\㍪\⒚\㏲\㍫\lj\IJ\‖\∥\Ⅱ\ǁ\‎\𐆙\⒒\Ⅲ\𐆘\㏪\㋊\㍣\Ю\⒑\㏩\㋉\㍢\ʪ\₶\Ⅳ\Ⅸ\ɮ\ʫ\㏠\㋀\㍙]
    [o\ం\ಂ\ം\ං\०\੦\૦\௦\౦\೦\൦\๐\໐\၀\‎\۵\o\ℴ\𝐨\𝑜\𝒐\𝓸\𝔬\𝕠\𝖔\𝗈\𝗼\𝘰\𝙤\𝚘\ᴏ\ᴑ\ꬽ\ο\𝛐\𝜊\𝝄\𝝾\𝞸\σ\𝛔\𝜎\𝝈\𝞂\𝞼\ⲟ\о\ჿ\օ\‎\‎\‎\‎\‎\‎\‎\‎\‎\‎\‎\‎\‎\‎\‎\‎\‎\‎\‎\‎\ഠ\ဝ\𐓪\𑣈\𑣗\𐐬\‎\ø\ꬾ\ɵ\ꝋ\ө\ѳ\ꮎ\ꮻ\ꭴ\‎\ơ\œ\ɶ\∞\ꝏ\ꚙ\ൟ\တ]

    Este regexp coinciden en contra de «𝓗℮𝐥1೦»

  3. 0

    No tengo solución per se, pero tengo algunas ideas.

    @collapsar del enfoque en los comentarios me parece bien en principio, pero creo que te gustaría utilizar un off-the-shelf OCR biblioteca en lugar de tratar de analizar las imágenes de sí mismo. Para hacer las imágenes, yo uso una fuente como algo en el DejaVu de la familia, porque tiene muy buena cobertura relativamente difíciles de caracteres Unicode.

    Otra manera fácil de obtener datos es mirar a la descomposición de los «ya» los personajes como «a»; si un personaje puede ser descompuesto en una o más la combinación de los capítulos seguido por una base personaje que se parece a una letra inglesa, es probable que se parece a una letra del inglés de la misma.

    Nada mejor que un montón de datos para un problema como este. Usted puede recoger una gran cantidad de buenos ejemplos de sustituciones de caracteres personas han hecho raspando el derecho de foros de internet. A continuación, puede utilizar este procedimiento para aprender nuevas: en primer lugar, encontrar las «palabras» que contiene la mayoría de los caracteres que se puede identificar, junto con algunos no se puede. Hacer una expresion regular de la palabra, la conversión de todo lo que puede para regular las letras y sustitución de todo lo demás con «.». A continuación, coincide con su expresión regular contra un diccionario, y si se obtiene sólo una coincidencia, que tiene algunos muy buenos candidatos, por lo que los caracteres desconocidos se supone que representan. (Yo en realidad no utilizar una expresión regular para buscar un diccionario, pero usted consigue la idea.)

    Lugar de la minería de los foros, usted puede ser capaz de utilizar Google n-gram corpus (http://storage.googleapis.com/books/ngrams/books/datasetsv2.html) en su lugar, pero no soy capaz de comprobar ahora mismo si contiene el tipo de pseudo-palabras que usted necesita.

Dejar respuesta

Please enter your comment!
Please enter your name here