WordsIV是一個用於生成具有有限字符集的文本的Python軟件包。它設計用於類型的類型,但可能對生成脂肪圖很有用。
假設您有字母HAMBURGERFONTSIVhamburgerfontsiv和標點符號.,詞語可能會產生以下drivel:
是的,在上面的王位上對他有足夠的罰款,這是一段時間以來的一段時間。她是他的想法,即使是從底層出發的想法,其餘的不是他對此事進行衡量的動作的節省的東西,Ahab在中午或從綠色森林中給了船,而綠色的森林則像Ahab一樣高。
在設計字體時,使用部分字符集檢查文本很有用。 Wordsiv盡力使用任何可用的字形生成逼真的文本。
首先,使用pip安裝單詞iv:
# we install straight from git (for now!)
$ pip install git+https://github.com/tallpauley/wordsiv # byexample: +pass接下來,從源軟件包的發行版頁面上安裝一個或多個源軟件包:
$ base=https://github.com/tallpauley/wordsiv-source-packages/releases/download
$ pkg=en_markov_gutenberg-0.1.0/en_markov_gutenberg-0.1.0-py3-none-any.whl
$ pip install $base / $pkg # byexample: +pass現在您可以在Python中做虛假句子!
> >> import wordsiv
> >> wsv = wordsiv . WordSiv ( limit_glyphs = ( 'HAMBURGERFONTSIVhamburgerfontsiv' ))
> >> wsv . sentence ( source = 'en_markov_gutenberg' )
( 'I might go over the instant to the streets in the air of those the same be '
'haunting' )如果您希望在Drawbot應用程序中工作,則可以按照此過程安裝WordsIV:
通過Python->安裝Python軟件包安裝wordsiv軟件包:
git+https://github.com/tallpauley/wordsiv ,然後單擊GO!
在同一窗口中安裝所需的源軟件包,但在結尾處添加--no-deps :
https://github.com/tallpauley/wordsiv-source-packages/releases/download/en_wordcount_web-0.1.0/en_wordcount_web-0.1.0-py3-none-any.whl --no-deps
.whl或.tar.gz軟件包URL。當您編寫drawbot腳本時,您將使用add_source_module()添加每個源:
import wordsiv
import en_wordcount_web
wsv = wordsiv . WordSiv ()
wsv . add_source_module ( en_wordcount_web )
print ( wsv . sentence ( source = "en_wordcount_web" ))
Wordsiv首先需要一些單詞,這些單詞以源形式出現:提供原始單詞數據的對象。
這些來源可通過源軟件包獲得,這些源軟件包只是Python軟件包。讓我們安裝一些:
base=https://github.com/tallpauley/wordsiv-source-packages/releases/download
# A markov model trained on public domain books
$ pkg=en_markov_gutenberg-0.1.0/en_markov_gutenberg-0.1.0-py3-none-any.whl
$ pip install $base / $pkg # byexample: +pass
# Most common English words compiled by Peter Norvig with data from Google
$ pkg=en_wordcount_web-0.1.0/en_wordcount_web-0.1.0-py3-none-any.whl
$ pip install $base / $pkg # byexample: +pass
# Most common Trigrams compiled by Peter Norvig with data from Google
$ pkg=en_wordcount_trigrams-0.1.0/en_wordcount_trigrams-0.1.0-py3-none-any.whl
$ pip install $base / $pkg # byexample: +passWordsiv自動發現這些已安裝的軟件包,並可以立即使用這些來源。讓我們在現代用法中嘗試用英語中最常見的詞語來源:
> >> from wordsiv import WordSiv
> >> wsv = WordSiv ()
> >> wsv . sentence ( source = 'en_wordcount_web' )
( 'Maple canvas sporting pages transferred with superior government brand with '
'women for key assign.' )一個單詞如何知道如何將單詞從源中排列到句子中?這是模型發揮作用的地方。
源en_wordcount_web默認使用模型rand 。在這裡,我們明確選擇模型rand以達到與上述相同的結果:
> >> wsv = WordSiv ()
> >> wsv . sentence ( source = 'en_wordcount_web' , model = "rand" )
( 'Maple canvas sporting pages transferred with superior government brand with '
'women for key assign.' )請注意,當我們初始化一個新的wordsiv()對象時,我們會得到相同的句子。這是因為詞語被設計為決定性。
如果我們想要有些自然的文本,我們可能會使用MarkovModel( model='mkv' )。
> >> wsv . paragraph ( source = "en_markov_gutenberg" , model = "mkv" ) # byexample: +skip
"Why don't think so desirous of hugeness. Our pie is worship..."Markov模型對真實文本進行了訓練,並通過查看前面的單詞來預測每個單詞。不過,我們使模型盡可能愚蠢(一個單詞狀態),以生成盡可能多的不同句子。
WordCount源和模型與簡單的單詞和事件列表一起工作以生成單詞。
randommodel( model='rand' )使用事件隨機選擇單詞,偏愛更流行的單詞:
# Default: probability by occurence count
> >> wsv . paragraph ( source = 'en_wordcount_web' , model = 'rand' ) # byexample: +skip
'Day music, commencement protection to threads who and dimension...'Randommodel也可以設置為忽略事件的數量,並完全隨機選擇單詞:
> >> wsv . sentence ( source = 'en_wordcount_web' , sent_len = 5 , prob = False ) # byexample: +skip
'Conceivably championships consecration ects— anointed.'順序model='seq' )以它們出現在源中的順序吐出單詞。我們可以使用此模型以英語顯示前5個Trigram:
> >> wsv . words ( source = 'en_wordcount_trigrams' , num_words = 5 ) # byexample: +skip
[ 'the' , 'ing' , 'and' , 'ion' , 'tio' ]wordsiv是圍繞選擇單詞的想法來構建的,這些單詞可以用不完整的字體文件中的字形呈現。 wordsiv可以自動確定字體文件中的字形。
讓我們加載字體,字符HAMBURGERFONTSIVhamburgerfontsiv
> >> wsv = WordSiv ( font_file = 'tests/data/noto-sans-subset.ttf' )
> >> wsv . sentence ( source = 'en_markov_gutenberg' , max_sent_len = 10 )
'Nor is fair to be in as these annuities'我們可以以相同的方式限製字形,但可以用limit_glyphs手動
> >> wsv = WordSiv ( limit_glyphs = 'HAMBURGERFONTSIVhamburgerfontsiv' )
> >> wsv . sentence ( source = 'en_wordcount_web' )
'Manage miss ago are motor to rather at first to be of has forget'font_file和limit_glyphs限製字形有時可以指定要顯示的字符集,並且只有在字體文件中將其放置時才使用這些字符集。我們可以通過指定font_file和limit_glyphs來做到這一點:
> >> wsv = WordSiv (
... font_file = 'tests/data/noto-sans-subset.ttf' ,
... limit_glyphs = 'abcdefghijklmnop'
... )
> >> wsv . sentence ( 'en_wordcount_web' , cap_sent = False , min_wl = 3 )
'eng gnome gene game egg one aim him again one game one image boom' 可以通過多種方式操縱文本。這裡有一些例子:
MarkovModel和WordCount模型都使我們能夠大寫或小寫的文本,無論源單詞是否大寫:
> >> wsv = WordSiv ()
> >> wsv . sentence ( 'en_wordcount_web' , uc = True , max_sent_len = 8 )
'MAPLE CANVAS SPORTING PAGES TRANSFERRED, WITH SUPERIOR GOVERNMENT.'
> >> wsv . sentence (
... 'en_markov_gutenberg' , lc = True , min_sent_len = 7 , max_sent_len = 10
... )
'i besought the bosom of the sun so'默認情況下,通過大寫句子來大寫,但我們可以將其關閉:
> >> wsv . sentence ( 'en_wordcount_web' , cap_sent = False , sent_len = 10 )
'egcs very and mortgage expressed about and online truss controls.'默認情況下,WordCount模型插入標點符號的概率大致從英語中使用。
我們可以通過將自己的功能傳遞出標點符號來關閉:
> >> def only_period ( words , * args ): return ' ' . join ( words ) + '.'
> >> wsv . paragraph (
... source = 'en_wordcount_web' , punc_func = only_period , sent_len = 5 , para_len = 2
... )
'By schools sign I avoid. Or about fascism writers what.'有關punc_func的更多詳細信息,請參見點上。這僅適用於WordCount模型,因為MarkovModel使用其源數據中的標點符號。
模型負責生成句子和單詞,因此與這些句子有關的參數是由模型處理的。目前,請參閱這些模型的源代碼,以了解對word() , words()和sentence() API的參數接受的參數:
單詞iv對象本身處理sentences() , paragraph() , paragraphs()和帶有參數的text調用。請參閱詞語類源代碼,以了解如何自定義文本輸出。
在校對類型時,我們可能希望我們的證明在擁有相同的角色集的情況下保持不變。這有助於我們比較類型的變化。
因此,wordsiv使用單個偽隨機數生成器,該數字生成器是在創建詞語對象時播種的。這意味著使用此庫的Python腳本將在運行何處產生相同的結果。
如果您希望腳本生成不同的單詞,則可以播種單詞iv對象:
> >> wsv = WordSiv ( seed = 6 )
> >> wsv . sentence ( source = "en_markov_gutenberg" , min_sent_len = 7 )
'even if i forgot the go in their' 在觀看了紀錄片編碼的偏見之後,我考慮了我們是否應該基於歷史(甚至是當前)數據來生成文本,因為性別歧視,種族主義,殖民主義,同性戀恐懼症等。
本節試圖解決對我(Chris Pauley)引起的一些道德問題,並試圖使該項目避免產生進攻性文本。
首先,該庫是為了以下目的而設計的。
當然,我們自然會讀單詞(duh),因此不用說您應該監督該庫生成的文本。
我考慮過是否有更多的進步文本可以培訓馬爾可夫模型。但是,無論如何,我們都將源文本爭先恐後地毫無意義,以最大程度地利用有限的字符集製成的句子。
當炒作時,即使是最積極的文本也會很快變黑。一個州尺寸1的馬爾可夫模型(適合有限角色集的理想)接受《聯合國普遍人權宣言》訓練的句子:
Everyone is entitled to torture
or other limitation of brotherhood.
關鍵是,半隨機單詞生成破壞了文本的含義,那麼為什麼要挑選一個周到的來源呢?但是,我們真的應該嘗試遠離進攻性材料,因為如果涉及任何概率,進攻模式將出現。
如果您想為該項目貢獻資源和/或模型,這裡有一些準則:
例如,我們通過保持1個狀態大小為1來阻止MarkovModel從原始文本中拾取過多的上下文。擁有一個單詞狀態也增加了潛在句子的數量,因此它可以解決。
我們生成的句子不太有意義,但是由於這是為用於證明的虛擬文本而設計的,所以這是一件好事!
由於:
由於我們正在生成荒謬的文本進行校對,因此我們應該盡力通過令人反感的單詞列表來過濾單詞列表。如果您確實需要在文本中發誓,則可以為自己的目的創建來源。
我們不能阻止隨機單詞形成令人反感的句子,但是我們至少可以限制傾向於形成進攻性句子的單詞。
諸如WordsIV中使用的統計模型將在文本(尤其是MarkovModels)中的模式中獲取。嘗試選擇相當中立的原始材料(並非真正的東西)。
我用NLTK培訓了EN_Markov_gutenberg的這些公共領域文本,該文本似乎足夠安全,可以使用愚蠢的單字馬爾可夫模型:
['austen-emma.txt', 'austen-persuasion.txt', 'austen-sense.txt',
'blake-poems.txt', 'bryant-stories.txt', 'burgess-busterbrown.txt',
'carroll-alice.txt', 'chesterton-ball.txt', 'chesterton-brown.txt',
'chesterton-thursday.txt', 'edgeworth-parents.txt', 'melville-moby_dick.txt',
'milton-paradise.txt', 'shakespeare-caesar.txt', 'shakespeare-hamlet.txt',
'shakespeare-macbeth.txt', 'whitman-leaves.txt']
如果您注意到任何特定的模型生成進攻性句子都多,請在單詞source-packages repo上提交問題。
我絕對不是第一個生成證據單詞的人。查看這些很酷的項目,讓我知道,如果您知道更多,我應該添加!
沒有Word-O-Mat的靈感,我可能不會走得很遠,Rob Stenson與我分享了一個不錯的Drawbot腳本。後者是我想到將隨機數生成器播種以使其確定性的想法。
我還從Spacy大量借用瞭如何設置源包。
還要感謝我的妻子帕米(Pammy)的善意,當我解釋我所解決的每個深奧挑戰時,並在我幾乎用粗心的git錯誤中消除了4個小時的工作時,為我提供情感支持。