6

すべての開発者がそうであるように、私たちは日常業務の一環として、常にある種の識別子を扱っています。ほとんどの場合、それはバグまたはサポート チケットに関するものです。当社のソフトウェアは、バグを検出すると、タイムスタンプとバージョン番号からフォーマットされた名前を持つパッケージを作成します。これは、パッケージの混同を避けるために合理的に一意の識別子を作成する安価な方法です。例: 「バグ レポート 20101214 174856 6.4b2」。

私の脳は数字を覚えるのが苦手です。私が望んでいるのは、覚えやすい英数字の識別子を生成する簡単な方法です。

Python で次のようなアルゴリズムを作成するには、約 5 分かかります。これにより、使用可能な結果が半分になります。

import random

vowels = 'aeiuy' # 0 is confusing
consonants = 'bcdfghjklmnpqrstvwxz'
numbers = '0123456789'

random.seed()

for i in range(30):
    chars = list()
    chars.append(random.choice(consonants))
    chars.append(random.choice(vowels))
    chars.append(random.choice(consonants + numbers))
    chars.append(random.choice(vowels))
    chars.append(random.choice(vowels))
    chars.append(random.choice(consonants))
    print ''.join(chars)

結果は次のようになります。

re1ean
meseux
le1ayl
kuteef
neluaq
tyliyd
ki5ias

これはすでに非常に優れていますが、正確なスペルを忘れがちなため、同僚のデスクに歩いて行き、それらの1つを調べたい場合、まだ困難な可能性がある.

私は、テキストに対してトリグラム分析を実行し (たとえば、ドイツ語で本全体を与えたとします)、ドイツ語のように見える文字列を生成して、一般的に扱いやすいアルゴリズムを知っています。ただし、これには大量のデータが必要であり、この目的のためだけにアプリケーションに埋め込むには少し適していません。

この問題を解決する公開されたアルゴリズムを知っていますか?

ありがとう!

カール

4

2 に答える 2

2

あなたが言ったように、あなたのサンプルはかなり良いです。ただし、簡単に覚えられるランダムな識別子が必要な場合は、英数字と数字を混在させないでください。代わりに、数桁の英数字文字列を後置することを選択できます。

また、あなたのサンプルでは、​​「o」を賢明に除外しましたが、「l」を忘れていたため、「1」と簡単に混同する可能性があります。「l」も削除することをお勧めします。;-)

于 2010-04-16T12:45:38.807 に答える
2

これがあなたの質問に答えているかどうかはわかりませんが、一意のバグレポート番号がいくつ必要か考えてみてください。

「BX-3D」のような 4 文字の大文字の英数字キーを使用するだけで、36^4 = 170 万のバグ レポートを作成できます。

編集:あなたのサンプルを見ました。子音と母音の代わりに音節を使用すると、結果が大幅に改善される可能性があります。

于 2010-04-16T12:24:07.820 に答える