`
Markov-Word-Generator는 단어 목록을 기반으로 무작위, 신뢰할 수 있으며 그럴듯한 단어를 생성하기위한 파이썬 라이브러리입니다. Markov 체인을 사용하여 이전 N 문자의 빈도를 기반으로 한 단어에서 다음 문자의 확률을 추정합니다. 이것은 Markov 체인을 사용합니다
pip install markov-word-generator
실제 단어처럼 들리는 임의의 단어를 생성하기 위해이 라이브러리는 주어진 언어로 코퍼스 간의 문자 분포를 분석합니다. 문자 조합에 대한 매핑 테이블과 코퍼스의 관련 주파수를 만듭니다. 이전 문자를 기반으로 캐릭터의 확률을 추정함으로써 라이브러리는 실제 언어 패턴을 모방하는 단어를 생성합니다.
다음은 이전 문자 (열)가 주어진 각 문자 (열)의 분포를 보여주는 히트 맵입니다.
$
= 단어의 끝^
= 단어의 시작영어로 :
그리고 프랑스어로 :
주어진 이전 항의 확률을 감안할 때 캐릭터가 나타날 확률을 추정하는 것은 잘 작동하지만 여전히 위험합니다. 우리는 다음 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 로 설정되면 구문 분석 중에 악센트가 무시됩니다. 거짓 으로 기본값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 | 정말로* |
---|---|---|
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% |
진짜 단어 인 생성기의 출력 단어 백분율에 대한 경험적 측정은 실제 단어 (사전에 존재 함)가 5000 개가 넘는 샘플에서 고려하는 문자 수를 기준으로 (사전에 존재 함) 5000 개 이상의 샘플 * 에 악센트가 무시되었습니다.
n = 5에서 기존 단어를 생성 할 기회의 50% 이상이 있습니다.
en | 정말로 | es | 드 | 그것 | SE |
---|---|---|---|---|---|
복제품 | Chouchonnées | 염수 | Regenfreunden | Scommissari | Medmännens |
가방주의 | 훈증사 | Diacontenderá | 재충전 | Insortiti | Metallösningens |
컨볼 루션리스트 | 사포니 아시 즈 | Transnacionarán | Unerschieben | ammalintenziale | Stationskligt |
징글 핸드 | 편안함 | 풍부한 | unstimme | 프로노 메트로 | Arbetslöftenas |
굶주림 | 토닉 인 | Encuestionó | überredete | Acconciliani | Utredningsviljande |
격자 | 샬 | Abombearán | Zwischere | Afferrofilia | Tributionsverktygs |
자회사 | 포타 | Banderolasteis | Plädiertem | 디스피아 테레 | Slappningarnas |
냉담한 | Rudoyers | CURTUAEIS | Wolken | triseccherai | Tidsnärings |
우울함 | Reluisionnés | Desagüense | Kompetentenzeichnen | Riappavia | Spagatellig |
분열 | Sacagneuse | Desvergonzaremos | dümmst | sgancializzando | yngstakternas |
en | 정말로 | es | 드 | 그것 | SE |
---|---|---|---|---|---|
샬레나 | 아리안 | 산드로 | 독일어 | 세베로 니카 | 브리타 |
소렐 | 클레멘 타인 | Uliseo | 건데 | legarissa | 크리스틴 |
오스틴 | 테오피 | Teofilomena | Werthold | 플로레나 | 금 |
하딘 | 어거스틴 | 헤리나 | Hannelia | 티지아 | 토스타인 |
샨탈 | Jeanninette | 아밀로 | 헬마 | 레오나르디 난다 | gitta |
크리스티안 | 맛있는 | 린 드라 | 타자 | FORTUNATALE | 커 스티나 |
Lessica | 이시 도니 | Dolorencio | Sieghardt | 시몬도 | Sigfrida |
Reana | 의류 | 디온 | 아넬리아 | 겔 트루 덴지 | Thorsten |
Leanoreen | Fabriel | 아누 시아 | 트 루트 | Battia | Gunils |
로슬린 | 바스티엔 | 칼리스 | 엘온하드 | 로렌 티나 | 바보 |
다른 유형의 사전을 감안할 때 생성기는 임의의 직업, 임의의 식물, 임의의 동물, 임의의 도시 등 어떤 특정 주제에서 임의의 단어를 만들 수 있습니다.