Pythonで書かれたウェブフォーラムの冒fan的なフィルタリングに亀裂があります。
その一環として、Wordを取り、特定の文字の代わりに視覚的に類似した文字を使用する、そのWordの可能なすべての模擬スペルを返す関数を作成しようとしています(例:s†å©køv€rƒ|øw)。
人々の創造性をカバーするために、このリストを時間をかけて拡大する必要があると思いますが、出発点として使用できるインターネット上のどこにでもリストがありますか?
これはおそらくあなたが必要とするよりもはるかに深いですが、ユースケースをカバーするには十分ではありませんが、Unicodeコンソーシアムは国際化されたドメイン名に対する攻撃に対処しなければならず、この同形異義語のリスト(同じまたは類似した文字レンダリング):
http://www.unicode.org/Public/security/latest/confusables.txt
少なくとも出発点を作るかもしれません。
http://en.wikipedia.org/wiki/Letterlike_Symbols
はるかに包括的ではありませんが、よりわかりやすくなっています。
「confusables」のロビンのユニコードリンクに基づいて、まさにこれを行うためにpythonクラスを作成しました
https://github.com/wanderingstan/Confusables
たとえば、「Hello」は、次の正規表現文字クラスのセットに展開されます。
[H\H\ℋ\ℌ\ℍ\????\????\????\????\????\????\????\????\????\????\Η\????\????\????\????\????\Ⲏ\Н\Ꮋ\ᕼ\ꓧ\????\Ⱨ\Ң\Ħ\Ӊ\Ӈ] [e\℮\e\ℯ\ⅇ\????\????\????\????\????\????\????\????\????\????\????\????\ꬲ\е\ҽ\ɇ\ҿ] [l\\|\∣\⏽\│1\\۱\????\\????\????\????\????\????I\I\Ⅰ\ℐ\ℑ\????\????\????\????\????\????\????\????\????\????\????\Ɩ\l\ⅼ\ℓ\????\????\????\????\????\????\????\????\????\????\????\????\????\ǀ\Ι\????\????\????\????\????\Ⲓ\І\Ӏ\\\\\\\\\ⵏ\ᛁ\ꓲ\????\????\????\\\ł\ɭ\Ɨ\ƚ\ɫ\\\\\ŀ\Ŀ\ᒷ\????\⒈\\⒓\㏫\㋋\㍤\⒔\㏬\㍥\⒕\㏭\㍦\⒖\㏮\㍧\⒗\㏯\㍨\⒘\㏰\㍩\⒙\㏱\㍪\⒚\㏲\㍫\lj\IJ\‖\∥\Ⅱ\ǁ\\????\⒒\Ⅲ\????\㏪\㋊\㍣\Ю\⒑\㏩\㋉\㍢\ʪ\₶\Ⅳ\Ⅸ\ɮ\ʫ\㏠\㋀\㍙] [l\\|\∣\⏽\│1\\۱\????\\????\????\????\????\????I\I\Ⅰ\ℐ\ℑ\????\????\????\????\????\????\????\????\????\????\????\Ɩ\l\ⅼ\ℓ\????\????\????\????\????\????\????\????\????\????\????\????\????\ǀ\Ι\????\????\????\????\????\Ⲓ\І\Ӏ\\\\\\\\\ⵏ\ᛁ\ꓲ\????\????\????\\\ł\ɭ\Ɨ\ƚ\ɫ\\\\\ŀ\Ŀ\ᒷ\????\⒈\\⒓\㏫\㋋\㍤\⒔\㏬\㍥\⒕\㏭\㍦\⒖\㏮\㍧\⒗\㏯\㍨\⒘\㏰\㍩\⒙\㏱\㍪\⒚\㏲\㍫\lj\IJ\‖\∥\Ⅱ\ǁ\\????\⒒\Ⅲ\????\㏪\㋊\㍣\Ю\⒑\㏩\㋉\㍢\ʪ\₶\Ⅳ\Ⅸ\ɮ\ʫ\㏠\㋀\㍙] [o\ం\ಂ\ം\ං\०\੦\૦\௦\౦\೦\൦\๐\໐\၀\\۵\o\ℴ\????\????\????\????\????\????\????\????\????\????\????\????\ᴏ\ᴑ\ꬽ\ο\????\????\????\????\????\σ\????\????\????\????\????\ⲟ\о\ჿ\օ\\\\\\\\\\\\\\\\\\\\\ഠ\ဝ\????\????\????\????\\ø\ꬾ\ɵ\ꝋ\ө\ѳ\ꮎ\ꮻ\ꭴ\\ơ\œ\ɶ\∞\ꝏ\ꚙ\ൟ\တ]
この正規表現は「????℮???? 1೦」と一致します
解決策自体はありませんが、いくつかのアイデアがあります。
コメントでの@collapsarのアプローチは、原則として私には良さそうですが、自分で画像を分析するのではなく、市販のOCRライブラリを使用したいと思います。画像を作成するには、DejaVuファミリーのようなフォントを使用します。これは、比較的曖昧なUnicode文字を十分にカバーしているためです。
データを取得するもう1つの簡単な方法は、「à」などの「合成済み」文字の分解を確認することです。文字を1つ以上のチャプターに分解し、その後に英字のように見える基本文字が続く場合、おそらく英字そのもののように見えます。
このような問題の場合、大量のデータに勝るものはありません。適切なWebフォーラムをスクレイピングすることで、人々が行ったキャラクター置換の多くの良い例を収集できます。次に、この手順を使用して新しい単語を学習できます。最初に、識別できない文字とほとんど識別できない文字を含む「単語」を見つけます。 Wordから正規表現を作成し、可能なすべてを通常の文字に変換し、他のすべてを「。」に置き換えます。次に、正規表現を辞書と照合します。一致するものが1つだけの場合は、未知の文字が表すものとして非常に優れた候補がいくつかあります。 (私は実際に辞書を検索するために正規表現を使用しませんが、あなたはアイデアを得ます。)
マイニングフォーラムの代わりに、Googleのn-gramコーパス( http://storage.googleapis.com/books/ngrams/books/datasetsv2.html )を使用できる場合がありますが、私は必要な種類の疑似単語が含まれているかどうかをすぐに確認することはできません。