`
Markov-Word-Generatorは、単語のリストに基づいて、ランダムで信頼できる、もっともらしい単語を生成するためのPythonライブラリです。マルコフチェーンを使用して、以前のN文字の周波数に基づいて、次の文字の確率を単語で推定します。これはマルコフチェーンを使用します
pip install markov-word-generator
実際の単語のように聞こえるランダムな単語を生成するために、このライブラリは特定の言語のコーパス間の文字分布を分析します。文字の組み合わせと、コーパスに関連する頻度のマッピングテーブルを作成します。前の文字に基づいて文字の確率を推定することにより、ライブラリは実際の言語パターンを模倣する単語を生成します。
以前の文字(行)が与えられた各文字(列)の分布を示すヒートマップは次のとおりです。
$
=単語の終わり^
=単語の開始英語で:
とフランス語:
特定の以前のものの確率を考慮して、キャラクターが表示される可能性を推定することは正常に機能しますが、それでも危険です。次のn以前のキャラクターを見ることで、世界の可能性を高めることができます。
ジェネレーターは、1行あたり1つの単語(辞書)を含む入力テキストファイルを解析し、N以前のnの発生に基づいて各文字の発生をカウントします。各文字の結合とそれに関連する周波数のマッピングテーブルを作成します。
最後の4文字に基づいて各新しい文字の確率を予測することにより、英語でランダムワードを生成するには、次のコードを使用できます。
from markov_word_generator import MarkovWordGenerator , WordType
# Generate a random word in English by predicting the probability of each new character based on its last 4 last characters
generator = MarkovWordGenerator (
markov_length = 4 ,
language = 'en' ,
word_type = WordType . WORD ,
)
print ( generator . generate_word ())
出力:
rebutaneously
markovwordgenerator():
markov_length
:( int):考慮すべき以前の文字の数。language
:( str):単語生成に使用する言語。サポートされている言語の一部である必要があります。word_type
:( str):生成する単語のタイプ。サポートされている単語タイプの一部である必要があります。dictionary_filename
:( str):文字周波数分析のために解析するコーパス。 language
とword_type
が設定されていない場合にのみ使用する必要があります。ignore_accents
:( bool): trueに設定すると、解析中にアクセントが無視されます。デフォルトでfalseになりますGenerate_word()
from markov_word_generator import MarkovWordGenerator , WordType , AllowedLanguages
# Generate a random German name by predicting the probability of each new character based on its last 3 last characters
generator = MarkovWordGenerator (
markov_length = 3 ,
language = AllowedLanguages . DE ,
word_type = WordType . NAME ,
)
print ( generator . generate_word ())
ludgerten
次の機能を使用して、サポートされている言語と単語タイプのリストにアクセスできます。
import markov_word_generator
# List supported languages
print ( markov_word_generator . get_supported_languages ())
# ['EN', 'FR', 'DE', 'FI', 'IT', 'PT', 'SE']
# List supported word_type
print ( markov_word_generator . get_supported_word_types ())
# ['WORD', 'NAME']
より多くの言語と単語の種類(植物、映画名、都市など)を将来追加できます。
from markov_word_generator import MarkovWordGenerator , WordType , AllowedLanguages
generator = MarkovWordGenerator (
markov_length = N , # N=1,2,3,4 or 5 in following examples
language = AllowedLanguages . EN ,
word_type = WordType . WORD
)
for i in range ( 0 , 10 ):
print ( generator . generate_word ())
出力:
eroun
unteticakreatintes
sucle
erarums
eablatirlac
e
ghils
rllig
beseleforuat
de
出力:
malle
dallintathilight
boaddly
nobtiousle
ing
alaymplaings
rusle
sprevircirdbages
bant
ritablegruphicalls
出力:
blungalinther
super
solder
degreetricked
mittlessly
out
hearf
fracertory
gyny
locious
出力:
authering
negligented
manoeistical
bleat
lover
confusions
dest
hand
display
entwinkle
出力:
significative
contention
grandmaidens
aidesdecamped
paralleled
contradicate
thereby
numskull
crises
battlegro
各テストに対して5000のランダムワードを経験的に生成し、実際の有効な単語として存在するそれらの割合をチェックします。 10のテストが実行されています。英語とフランス語の両方の言語でn = 1からn = 5までの結果は次のとおりです
n 言語 | en | fr* |
---|---|---|
1 | 4.61% | 6.15% |
2 | 8.89% | 10.60% |
3 | 14.80% | 10.04% |
4 | 33.08% | 33.88% |
5 | 62.84% | 65.68% |
Markov_chainで5000を超えるサンプルを考慮した文字nに基づいて、実際の単語である(辞書に存在する)ジェネレーターからの出力語の割合の経験的測定*アクセントは、フランス語のベンチマークで無視されています
n = 5から、既存の単語を生成する可能性の50%以上があります。
en | fr | es | de | それ | se |
---|---|---|---|---|---|
複製可能 | Chouchonnées | インフラマンダンド | RegenFreunden | scommissari | Medmännens |
羽毛 | fumigents | diacontenderá | Rechtsbeleuchtes | Insortiti | Metallösningens |
畳み込み主義者 | Saponisassiez | Transnacionarán | unerschieben | Immalintenziale | Stationskligt |
ジングルハンド | Pareraient | アブンデオ | unstimme | PRONOMETRO | Arbetslöftenas |
怖い | トニシエンス | encuestionó | ユーベレッテ | Acconciliani | utredningsviljande |
トレリッシュ | チャレ | アボンボリアン | Zwischere | アフェロフィリア | Pributionsverktygs |
補助的な | ポタメ | バンデロラスティス | plädiertem | Dispiacerete | Slappningarnas |
談話 | rudoyers | constuéis | Wolken | Trisecchererai | Tidsnärings |
憂鬱 | Reluisionnés | desagüense | Kopetentenzeichnen | リアッパビア | Spagatellig |
裂け目 | サカニューズ | Desvergonzaremos | デュムスト | sgancializzando | yngstakternas |
en | fr | es | de | それ | se |
---|---|---|---|---|---|
チャレナ | アリアン | サンドロ | ジャーマン | セベニカ | ブリタン |
ソレル | クレメン | uliseo | ガンデ | エヴァリッサ | クリスティン |
オースティニー | テオフィー | テフィロメナ | ヴェルソールド | フローナ | FRID |
ハーディン | オーガスティン | ヘリーナ | ハンネリア | ティジア | トルスタイン |
シャンタル | jeanninette | アミロ | ヘルマー | レオナルディナンダ | ギッタ |
クリスチャン | フラビエル | Leandra | Tatja | フォーチュナタール | カルテナ |
レッスルカ | イシドニー | ドーレンシオ | Sieghardt | シモンド | シグリダ |
レアナ | クロラエ | ディオン | アネリア | Geltrudenzio | トールステン |
Leanoreen | ファブリエル | アヌンシア | トルド | バティア | グニル |
ロスリン | バスティエンヌ | カリス | エレオンハルト | ロレンティナ | ジャケル |
他の種類の辞書を考えると、ジェネレーターはいくつかの特定のトピックにランダムな単語を作成できます:ランダムジョブ、ランダム植物、ランダム動物、ランダム都市...