S'il existe une liste de caractères qui ressemblent à des lettres anglaises?
Je vais avoir une fissure à la grossièreté de filtrage pour un forum sur le web écrit en Python.
Dans le cadre de cela, je suis d'essayer d'écrire une fonction qui prend un mot et renvoie tous les possibles se moquer de l'orthographe de ce mot que l'utilisation visuellement similaires caractères à la place des lettres spécifiques (par exemple, s†å©køv€rƒ|øw).
J'imagine que je vais avoir à agrandir cette liste au fil du temps pour couvrir la créativité des gens, mais est-il une liste flottant autour de partout sur l'internet que je pourrais utiliser comme un point de départ?
- Je ne peux pas répondre à la question, mais je ne voudrais pas utiliser une fonction qui retourne tous les possibles se moquer de l'orthographe d'un mot. Qui peuvent être extrêmement nombreuses. Au lieu de cela, j'avais normaliser chaque mot dans les posts avant de regarder dans la liste de gros mots, c'est à dire transformer "s†å©køv€rƒ|øw" à "stackoverflow" avant la recherche.
- oh, mon dieu, que ce serait une meilleure approche ne serait-il pas. Le débutant programmeur esprit est comme un mogwai — ne devraient pas être donnés après minuit.
- Liés, mais pas la copie exacte: stackoverflow.com/questions/4846365/...
- pop que, dans le plus une réponse, et je me ferais un plaisir de l'accepter.
- Non, je ne vais pas. Ça ne résout pas le problème, c'est plutôt une note de côté. Vous aurez toujours besoin de données sur le mappage de caractères, qui est le principal problème ici. (Et je pense que votre question est parfaitement valable pour les sujets en question.)
- Je comprends votre point, et les acclamations.
- Il y a des scripts et des programmes qui leetify un mot (bascule de cas et de remplacer les o avec zéro, avec 3 e, etc. J'aimerais commencer en regardant ces.
- cette idée a jailli de mon esprit - c'est ni analysés de façon approfondie, ni testés. cependant, que diriez-1. choisissez une police 2. créer bitmap rendus de tous les glyphes 3. définir une mesure de similarité sur des bitmaps (simple: proportion de l'égalité contre les différentes valeurs des bits sur toutes les positions sur la grille à l'intérieur d'un std boîte englobante). 4. calculer la matrice de similarité des paires de caractères 5. cluster les glyphes en conséquence 6. choisir un représentant pour chaque cluster (idéalement, ces sortirait en tant que a-zA-Z0-9). le filtrage s'élèverait à la cartographie de chaque char sur le bon de cluster de rep et de dict de recherche.
- ... évidemment, vous devez appliquer une technique similaire à normaliser les homophones (au moins dans des langues comme l'anglais avec des non-unique phonem-correspondances graphème). rhite, dewd ? 😉
- c'est une bonne approche. Un jour.
- Pour normaliser les homophones, cherchez "soundex" et de ses descendants. Pour le reste, vous aurez probablement envie de regarder pour les caractères Cyrilliques, etc., droit? "IDN homograph attaques" est le terme ici. Il y a probablement une liste de ceux qui sont déjà.
Vous devez vous connecter pour publier un commentaire.
C'est probablement à la fois beaucoup plus profond que vous avez besoin, mais pas assez large pour couvrir votre cas d'utilisation, mais le consortium Unicode ont eu à faire face aux attaques contre les noms de domaine internationalisés et est venu avec cette liste des homographes (les personnages avec les mêmes ou similaires rendu):
http://www.unicode.org/Public/security/latest/confusables.txt
Pourrait faire un point de départ au moins.
http://en.wikipedia.org/wiki/Letterlike_Symbols
C'est beaucoup beaucoup beaucoup moins complet, mais c'est plus compréhensible.
J'ai créé une classe python pour faire exactement cela, en fonction de Robin unicode de lien pour les "autres mots pouvant être confondus"
https://github.com/wanderingstan/Confusables
Par exemple, "Bonjour" ne étendu dans l'ensemble des regexp classes de personnage:
[H\H\ℋ\ℌ\ℍ\\\\\\\\\\\Η\\\\\\Ⲏ\Н\Ꮋ\ᕼ\ꓧ\\Ⱨ\Ң\Ħ\Ӊ\Ӈ]
[e\℮\e\ℯ\ⅇ\\\\\\\\\\\\\ꬲ\е\ҽ\ɇ\ҿ]
[l\\|\∣\⏽\│1\\۱\\\\\\\I\I\Ⅰ\ℐ\ℑ\\\\\\\\\\\\Ɩ\l\ⅼ\ℓ\\\\\\\\\\\\\\ǀ\Ι\\\\\\Ⲓ\І\Ӏ\\\\\\\\\ⵏ\ᛁ\ꓲ\\\\\\ł\ɭ\Ɨ\ƚ\ɫ\\\\\ŀ\Ŀ\ᒷ\\⒈\\⒓\㏫\㋋\㍤\⒔\㏬\㍥\⒕\㏭\㍦\⒖\㏮\㍧\⒗\㏯\㍨\⒘\㏰\㍩\⒙\㏱\㍪\⒚\㏲\㍫\lj\IJ\‖\∥\Ⅱ\ǁ\\\⒒\Ⅲ\\㏪\㋊\㍣\Ю\⒑\㏩\㋉\㍢\ʪ\₶\Ⅳ\Ⅸ\ɮ\ʫ\㏠\㋀\㍙]
[l\\|\∣\⏽\│1\\۱\\\\\\\I\I\Ⅰ\ℐ\ℑ\\\\\\\\\\\\Ɩ\l\ⅼ\ℓ\\\\\\\\\\\\\\ǀ\Ι\\\\\\Ⲓ\І\Ӏ\\\\\\\\\ⵏ\ᛁ\ꓲ\\\\\\ł\ɭ\Ɨ\ƚ\ɫ\\\\\ŀ\Ŀ\ᒷ\\⒈\\⒓\㏫\㋋\㍤\⒔\㏬\㍥\⒕\㏭\㍦\⒖\㏮\㍧\⒗\㏯\㍨\⒘\㏰\㍩\⒙\㏱\㍪\⒚\㏲\㍫\lj\IJ\‖\∥\Ⅱ\ǁ\\\⒒\Ⅲ\\㏪\㋊\㍣\Ю\⒑\㏩\㋉\㍢\ʪ\₶\Ⅳ\Ⅸ\ɮ\ʫ\㏠\㋀\㍙]
[o\ం\ಂ\ം\ං\०\੦\૦\௦\౦\೦\൦\๐\໐\၀\\۵\o\ℴ\\\\\\\\\\\\\ᴏ\ᴑ\ꬽ\ο\\\\\\σ\\\\\\ⲟ\о\ჿ\օ\\\\\\\\\\\\\\\\\\\\\ഠ\ဝ\\\\\\ø\ꬾ\ɵ\ꝋ\ө\ѳ\ꮎ\ꮻ\ꭴ\\ơ\œ\ɶ\∞\ꝏ\ꚙ\ൟ\တ]
Cette regexp va correspondre à l'encontre de "℮1೦"
Je n'ai pas de solution en soi, mais j'ai quelques idées.
@collapsar de l'approche dans les commentaires cela me paraît bien en principe, mais je pense que vous voulez les utiliser hors-the-shelf ROC de la bibliothèque plutôt que d'essayer d'analyser les images vous-même. Pour rendre les images, je voudrais utiliser une police comme dans les DejaVu de la famille, parce qu'il a une bonne couverture relativement obscure de caractères Unicode.
Un autre moyen facile d'obtenir des données est de regarder les décompositions de "précomposé" des personnages comme "à"; si un personnage peut être décomposé en un ou plusieurs combinant les chapitres suivie par un caractère de base qui ressemble à une lettre anglaise, il ressemble probablement à un anglais de la lettre elle-même.
Rien ne vaut beaucoup de données pour un problème de ce genre. Vous pouvez recueillir beaucoup de bons exemples de substitutions de caractères de gens ont fait en grattant le droit forums sur le web. Ensuite, vous pouvez utiliser cette procédure pour apprendre de nouvelles: tout d'abord, trouver les "mots" contenant essentiellement des caractères que vous pouvez identifier, avec quelques-uns, vous ne pouvez pas. Faire une regex de la parole, de la conversion de tout ce que vous pouvez pour les lettres ordinaires et le remplacement de tout le reste avec des ".". Alors correspondre à votre regex à l'encontre d'un dictionnaire, et si vous obtenez un seul match, vous avez de très bons candidats pour l'inconnu personnages sont censés représenter. (Je ne voudrais pas utiliser une regex pour la recherche d'un dictionnaire, mais vous voyez l'idée).
Au lieu de l'exploitation minière des forums, vous pouvez être en mesure d'utiliser Google n-gramme corpus ( http://storage.googleapis.com/books/ngrams/books/datasetsv2.html ), mais je ne suis pas en mesure de vérifier dès maintenant si il contient le genre de pseudo-mots dont vous avez besoin.