将散文分解、转换和重组为变异的形式。
项目描述
这是什么?
有很多写法。在Unoriginal Genius中,Marjorie Perloff 将“原始天才”的概念——古代神话作家从他们的智力孤独的深处实现作品——与“非原始天才”的反传统进行了对比,包括剽窃模仿行为(也称为偏离)和拼凑写作。根据肯尼斯·戈德史密斯的《非创意写作》,TS Eliot、詹姆斯·乔伊斯和托马斯·品钦都是这种风格的典范,他们用百科全书、杂志、剪报和世界文学的开放式写出了他们的开创性作品。
今天有无数种方法可以用软件转换文本:马尔可夫链、剪切、用词替换相关词、在书之间交换动词、GPT-2、BERT 等。今天的控制论作者可以利用这些作为分解代理,破坏原始文本创建凌乱的新混合,可以进一步编辑、扩展或合成为原创的、有意义的作品。
但这有什么作用?
该项目详细阐述了这些想法,允许用户:
从Project Gutenberg和Archive.org上公开的文学作品或您提供的任何文本中随机抽取句子和段落。
在两个文本之间交换具有相同词性的单词——例如,将一个文本的所有形容词与另一个文本交换,将一个文本的名词与另一个文本交换,保留叙事或话语结构的结构,同时大幅改变内容。以查尔斯·狄更斯的《远大前程》中的这段话为例,当您将名词和形容词替换为 HP Lovecraft 的故事The Shunned House中的一段时,它就变成了超现实主义的恐怖:
“那时我开始明白,眼睛里的烟囱已经停止了,就像包裹和头部一样,人类真菌之前。我注意到郝薇香小姐把高度准确地放下了,正是她从高处开始的时间。艾丝黛拉处理溪流时,我再次瞥了一眼这具可恶的尸体,发现它上面的轮廓,曾经很少,现在病了,从来没有磨损过。我低头看了一眼轮廓是昆虫的景象,看到上面的半只长袜,曾经很少,现在病了,被踩得破烂了。没有这天地万物,没有这一切更可怕的怪物的静止不动,就连坍塌溶解上的枯萎磷光雾都不会看起来像恐怖的嘲讽,或者人类的狰狞恐怖。”
通过马尔可夫链运行单个文本或文本列表,根据 n-gram 大小(默认为 1,最混乱)以或多或少混乱的方式半智能地重新组合单词。
像这样的基于马尔可夫链的生成算法可以创建散文,其重复和排列赋予它一种奇怪的节奏,并且起初在句法和语义上看起来是有效的,但最终会变成废话。马尔可夫链公式化但又时髦又颠覆性的风格与格特鲁德·斯坦因在《美国人的形成》中的风格非常相似,她在文章作文作为解释中详细解释了这一点。
对由 William S. Burroughs 和 Brion Gysin 开创的分割方法进行虚拟模拟,方法是将文本分解为随机长度的组件(其中保留了单词的最小和最大长度),然后随机重新排列它们。
安装
使用点子
python3 -m pip generativepoetry
但要让 Gutenberg 采样正常工作,您必须填充 Berkeley 数据库缓存:
python3 populate_cache.py
如果 Gutenberg 缓存在填充后出现混乱,请删除缓存目录并重新填充。
使用 Docker
docker pull coreybobco/prosedecomposer docker run prosedecomposer docker exec -it prosedecomposer python3
如何使用
首先,导入库:
from prosedecomposer import *
要从 Project Gutenberg 或 Archive.org 中提取和清理文本:
# From an Archive.org URL:
calvino_text = get_internet_archive_document('https://archive.org/stream/CalvinoItaloCosmicomics/Calvino-Italo-Cosmicomics_djvu.txt')
# From a Project Gutenberg URL:
alice_in_wonderland = get_gutenberg_document('https://www.gutenberg.org/ebooks/11')
# Select a random document from Project Gutenberg
random_gutenberg_text = random_gutenberg_document
ParsedText 类提供了一些函数来随机采样一个或多个一定长度的句子或段落:
parsed_calvino = ParsedText(calvino_text)
parsed_calvino.random_sentence() # Returns a random sentence
parsed_calvino.random_sentence(minimum_tokens=25) # Returns a random sentence of a guaranteed length in tokens
parsed_calvino.random_sentences() # Returns 5 random sentences
parsed_calvino.random_sentences(num=7, minimum_tokens=25) # Returns 7 random sentences of a guaranteed length
parsed_calvino.random_paragraph() # Returns a random paragraph (of at least 3 sentence by default)
parsed_calvino.random_paragraph(minimum_sentences=5) # Returns a paragraph with at least 5 sentences
在文本之间交换具有相同词性的单词:
# Swap out adjectives and nouns between two random paragraphs of two random Gutenberg documents
doc1 = ParsedText(random_gutenberg_document())
doc2 = ParsedText(random_gutenberg_document())
swap_parts_of_speech(doc1.random_paragraph(), doc2.random_paragraph())
# Any of Spacy's part of speech tag values should work, though: https://spacy.io/api/annotation#pos-tagging
swap_parts_of_speech(doc1.random_paragraph(), doc2.random_paragraph(), parts_of_speech=["VERB", "CONJ"])
# Since NLG has not yet been implemented, expect syntax errors like subject-verb agreement.
要通过马尔可夫链文本处理算法运行文本,请参见下文。如果您正在处理大量文本,即一次或几本书籍/故事/等,您可能需要更大的 n-gram 大小(2 或 3)。
output = markov(text) # Just one text (defaults to n-gram size of 1 and 5 output sentences)
output = markov(text, ngram_size=3, num_output_sentence=7) # Bigger n-gram size, more output sentences
output = markov([text1, text2, text3]) # List of text (defaults to n-gram size of 1 and 5 output sentences)
output = markov([text1, text2, text3], ngram_size=3, num_output_sentences=7) # Bigger n-gram size, more outputs
要虚拟地剪切和重新排列文本:
# Cuts up a text into cutouts between 3 and 7 words and rearrange them randomly (returns a list of cutout strings)
cutouts = cutup(text)
# Cuts up a text into cutouts between 2 an 10 words and rearrange them randomly (returns a list of cutout strings)
cutouts = cutup(text, min_cutout_words=3, max_cutout_words=7)
项目详情
prosedecomposer -0.1.1.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1d239123b8f32494da865d96f16c4128c7fe03eb330ce47a0320f0dd8d2298b9 |
|
MD5 | 0a953818033ed95b17ae88c3d2fcbb6f |
|
布莱克2-256 | 7b6f611dc3b063a16bbc702f27ebf2808d95ab7808314114b44b012304be0628 |
prosedecomposer -0.1.1-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 869fb0174884c208198cad69bcae7fe987dd3fa4fd458a9be1a891ccc40a2bff |
|
MD5 | ea62ac61b022bd0ac10e9e966a49db01 |
|
布莱克2-256 | ba858cd1bd69e968bce9adae393fa32b19f71392455ea116b00fb9667535a26b |