Skip to main content

将散文分解、转换和重组为变异的形式。

项目描述

https://coveralls.io/repos/github/coreybobco/prosedecomposer-py/badge.svg?branch=master https://badge.fury.io/py/prosedecomposer.svg

这是什么?

有很多写法。在Unoriginal Genius中,Marjorie Perloff 将“原始天才”的概念——古代神话作家从他们的智力孤独的深处实现作品——与“非原始天才”的反传统进行了对比,包括剽窃模仿行为(也称为偏离)和拼凑写作。根据肯尼斯·戈德史密斯的《非创意写作》,TS Eliot、詹姆斯·乔伊斯和托马斯·品钦都是这种风格的典范,他们用百科全书、杂志、剪报和世界文学的开放式写出了他们的开创性作品。

今天有无数种方法可以用软件转换文本:马尔可夫链、剪切、用词替换相关词、在书之间交换动词、GPT-2、BERT 等。今天的控制论作者可以利用这些作为分解代理,破坏原始文本创建凌乱的新混合,可以进一步编辑、扩展或合成为原创的、有意义的作品。

但这有什么作用?

该项目详细阐述了这些想法,允许用户:

  • 从Project GutenbergArchive.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 (8.1 kB 查看哈希)

已上传 source

内置分布

prosedecomposer-0.1.1-py3-none-any.whl (9.1 kB 查看哈希)

已上传 py3