WordSiv adalah paket Python untuk menghasilkan teks dengan set karakter terbatas. Ini dirancang untuk pemeriksaan jenis, tetapi mungkin berguna untuk menghasilkan lipogram.
Katakanlah Anda memiliki huruf HAMBURGERFONTSIVhamburgerfontsiv dan tanda baca ., Dalam font Anda. WordSiv mungkin menghasilkan omong kosong berikut:
Cukup benar, untuk yang cukup bagus untuknya di takhta di atas, beberapa waktu untuk itu pada awal bisnis. Dia adalah bahwa dia telah menetapkan sebagai pemikiran bahwa dia bahkan dari substratumnya, sisanya bukanlah hal -hal yang dihemat oleh gerakan yang dia ukur tentang masalah ini, Ahab berikan kepada kapal pada siang hari, atau dari hutan hijau, setinggi ini pada Ahab.
Saat merancang jenis huruf, penting untuk memeriksa teks dengan set karakter parsial. WordSIV mencoba yang terbaik untuk menghasilkan teks yang tampak realistis dengan mesin terbang apa pun yang tersedia.
Pertama, instal WordSiv dengan PIP:
# we install straight from git (for now!)
$ pip install git+https://github.com/tallpauley/wordsiv # byexample: +passSelanjutnya, instal satu atau lebih paket sumber dari halaman rilis repo paket sumber:
$ 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: +passSekarang Anda dapat membuat kalimat palsu di 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' )Jika Anda lebih suka bekerja di aplikasi DrawBot, Anda dapat mengikuti prosedur ini untuk menginstal WordSiv:
Instal Paket wordsiv melalui Python-> Instal Paket Python :
git+https://github.com/tallpauley/wordsiv dan klik go!
Instal Paket Sumber yang Diinginkan di jendela yang sama, tetapi tambahkan --no-deps di akhir:
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 atau .tar.gz dari halaman rilis paket Sumber Paket Repo di bawah drop down aset . Saat Anda menulis skrip drawbot Anda, Anda akan menambahkan setiap sumber menggunakan 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 pertama membutuhkan beberapa kata, yang datang dalam bentuk sumber: objek yang memasok data kata mentah.
Sumber -sumber ini tersedia melalui paket sumber, yang hanya paket Python. Mari kita menginstal beberapa:
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-Men-Discovers Paket-paket terpasang ini, dan dan dapat menggunakan sumber-sumber ini segera. Mari kita coba sumber dengan kata -kata paling umum dalam bahasa Inggris dalam penggunaan modern:
> >> 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.' )Bagaimana Wordsiv tahu cara mengatur kata -kata dari sumber menjadi kalimat? Di sinilah model ikut bermain.
Sumber en_wordcount_web menggunakan model rand secara default. Di sini kami secara eksplisit memilih model rand untuk mencapai hasil yang sama seperti di atas:
> >> wsv = WordSiv ()
> >> wsv . sentence ( source = 'en_wordcount_web' , model = "rand" )
( 'Maple canvas sporting pages transferred with superior government brand with '
'women for key assign.' )Perhatikan kami mendapatkan kalimat yang sama ketika kami menginisialisasi objek WordSiv () baru. Ini karena WordSiv dirancang untuk menjadi determinisic.
Jika kita menginginkan teks yang agak alami , kita mungkin menggunakan 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..."Model Markov dilatih pada teks nyata, dan memperkirakan setiap kata dengan melihat kata sebelumnya. Kami menjaga model sebodoh mungkin (satu keadaan kata) untuk menghasilkan sebanyak mungkin kalimat yang berbeda.
Sumber dan model WordCount bekerja dengan daftar kata dan kejadian sederhana diperhitungkan untuk menghasilkan kata -kata.
Randomodel ( model='rand' ) menggunakan jumlah kejadian untuk secara acak memilih kata -kata, lebih menyukai kata -kata yang lebih populer:
# Default: probability by occurence count
> >> wsv . paragraph ( source = 'en_wordcount_web' , model = 'rand' ) # byexample: +skip
'Day music, commencement protection to threads who and dimension...'Randomodel juga dapat diatur untuk mengabaikan jumlah kejadian dan memilih kata -kata sepenuhnya secara acak:
> >> wsv . sentence ( source = 'en_wordcount_web' , sent_len = 5 , prob = False ) # byexample: +skip
'Conceivably championships consecration ects— anointed.' SequentialModel ( model='seq' ) memuntahkan kata -kata dalam urutan yang muncul di sumber. Kita bisa menggunakan model ini untuk menampilkan 5 trigram teratas dalam bahasa Inggris:
> >> wsv . words ( source = 'en_wordcount_trigrams' , num_words = 5 ) # byexample: +skip
[ 'the' , 'ing' , 'and' , 'ion' , 'tio' ]WordSiv dibangun di sekitar gagasan memilih kata -kata yang dapat diterjemahkan dengan mesin terbang dalam file font yang tidak lengkap. WordSiv dapat secara otomatis menentukan apa yang ada dalam file font.
Mari kita muat font dengan karakter 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' Kita dapat membatasi mesin terbang dengan cara yang sama, tetapi secara manual dengan 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 dan limit_glyphs Kadang -kadang dapat bermanfaat untuk menentukan set karakter yang ingin kami tampilkan , dan hanya menggunakan karakter tersebut jika kami memilikinya di file font. Kita dapat melakukan ini dengan menentukan font_file dan 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' Ada berbagai cara teks dapat dimanipulasi. Berikut beberapa contoh:
Model MarkovModel dan WordCount memungkinkan kami untuk huruf besar atau kecil, apakah kata -kata sumbernya dikapitalisasi atau tidak:
> >> 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'Randomodel dengan memanfaatkan kalimat secara default, tetapi kita dapat mematikan ini:
> >> wsv . sentence ( 'en_wordcount_web' , cap_sent = False , sent_len = 10 )
'egcs very and mortgage expressed about and online truss controls.'Secara default model WordCount memasukkan tanda baca dengan probabilitas yang kira -kira berasal dari penggunaan dalam bahasa Inggris.
Kita dapat mematikan ini dengan melewati fungsi kita sendiri untuk tanda baca:
> >> 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.' Untuk detail lebih lanjut tentang punc_func , lihat tanda baca.py. Ini hanya berlaku untuk model WordCount, karena MarkovModel menggunakan tanda baca dalam data sumbernya.
Model mengurus menghasilkan kalimat dan kata -kata , sehingga parameter yang berkaitan dengan ini ditangani oleh model. Untuk saat ini, silakan merujuk ke kode sumber untuk model ini untuk mempelajari parameter yang diterima untuk word() , words() , dan sentence() API:
Objek WordSIV itu sendiri menangani sentences() , paragraph() , paragraphs() dan panggilan text dengan parameternya. Lihat kode sumber kelas WordSiv untuk mempelajari cara menyesuaikan output teks.
Saat jenis pemeriksaan, kami mungkin ingin bukti kami tetap sama selama kami memiliki set karakter yang sama. Ini membantu kita membandingkan perubahan jenisnya.
Untuk alasan ini, WordSiv menggunakan generator bilangan semu-acak tunggal, yang diunggulkan pada pembuatan objek WordSiv. Ini berarti bahwa skrip Python yang menggunakan perpustakaan ini akan menghasilkan hasil yang sama di mana pun ia berjalan.
Jika Anda ingin skrip Anda menghasilkan kata -kata yang berbeda, Anda dapat menyemai objek WordSiv:
> >> wsv = WordSiv ( seed = 6 )
> >> wsv . sentence ( source = "en_markov_gutenberg" , min_sent_len = 7 )
'even if i forgot the go in their' Setelah menonton bias kode dokumenter, saya mempertimbangkan apakah kita bahkan harus menghasilkan teks berdasarkan data historis (atau bahkan saat ini), karena seksisme, rasisme, kolonialisme, homofobia, dll., Terkandung dalam teks.
Bagian ini mencoba untuk menjawab beberapa pertanyaan etis ini yang muncul untuk saya (Chris Pauley), dan mencoba menjauhkan proyek ini dari menghasilkan teks ofensif.
Pertama, perpustakaan ini dirancang untuk keperluan:
Tentu saja, kami secara alami membaca kata -kata (duh), jadi tidak perlu dikatakan bahwa Anda harus mengawasi teks yang dihasilkan oleh perpustakaan ini.
Saya mempertimbangkan jika ada teks yang lebih progresif saya bisa melatih model Markov. Namun, kami tetap mengacak -acak teks sumber menjadi tidak berarti, untuk memaksimalkan kalimat yang dibuat dengan set karakter terbatas.
Bahkan teks yang paling positif bisa menjadi gelap dengan sangat cepat saat diacak. Model Markov dari Negara Ukuran 1 (Ideal untuk Set Karakter Terbatas) yang dilatih dengan Deklarasi Hak Asasi Manusia yang universal PBB membuat hukuman ini:
Everyone is entitled to torture
or other limitation of brotherhood.
Intinya, generasi kata semi-acak merusak makna teks, jadi mengapa repot-repot memilih sumber yang bijaksana? Namun, kita harus benar -benar mencoba untuk menjauh dari materi sumber ofensif, karena pola ofensif akan muncul jika ada probabilitas yang terlibat.
Jika Anda ingin menyumbangkan sumber dan/atau model untuk proyek ini, berikut adalah beberapa pedoman:
Sebagai contoh, kami menjaga MarkovModel dari mengambil terlalu banyak konteks dari teks asli dengan menjaga ukuran keadaan 1. Memiliki status kata tunggal juga meningkatkan jumlah kalimat potensial juga, sehingga berhasil.
Kalimat yang kami hasilkan lebih sedikit masuk akal, tetapi karena ini dirancang untuk teks dummy untuk didirikan, ini adalah hal yang baik!
Ini rumit menyaring kata -kata "ofensif", sejak:
Karena kami menghasilkan teks yang tidak masuk akal untuk dibuktikan, kami harus mencoba yang terbaik untuk memfilter daftar kata dengan daftar kata -kata ofensif. Jika Anda benar -benar perlu bersumpah dalam teks Anda, Anda dapat membuat sumber untuk tujuan Anda sendiri.
Kami tidak dapat mencegah kata -kata acak membentuk kalimat ofensif, tetapi kami setidaknya dapat membatasi kata -kata yang cenderung membentuk kalimat ofensif.
Model statistik seperti yang digunakan dalam WordIV akan mengambil pola dalam teks - terutama Markovmodels. Cobalah untuk memilih bahan sumber yang cukup netral (bukan apa pun yang sebenarnya ).
Saya melatih en_markov_gutenberg dengan teks-teks domain publik ini dari NLTK, yang tampaknya cukup aman untuk model Markov yang bodoh, kata-kata tunggal:
['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']
Jika Anda melihat model tertentu yang menghasilkan kalimat ofensif lebih dari tidak, silakan ajukan masalah di repo WordSiv-Source-Packages.
Saya jelas bukan orang pertama yang menghasilkan kata untuk memeriksa. Lihatlah proyek -proyek keren ini, dan beri tahu saya jika Anda tahu lebih banyak yang harus saya tambahkan!
Saya mungkin tidak akan terlalu jauh tanpa inspirasi Word-O-Mat, dan skrip drawbot yang bagus yang dibagikan Rob Stenson dengan saya. Yang terakhir adalah tempat saya mendapat ide untuk menyemai generator bilangan acak untuk membuatnya deterministik.
Saya juga banyak meminjam dari spacy dalam cara saya mengatur paket sumber.
Juga ingin berterima kasih kepada istri saya Pammy karena telah mendengarkan dengan baik hati karena saya menjelaskan setiap tantangan esoterik yang telah saya tangani, dan meminjamkan saya dukungan emosional ketika saya hampir memusnahkan 4 jam kerja dengan kesalahan git yang ceroboh.