cliffordvickrey/malarkey

使用马尔可夫链算法生成无意义但听起来真实的文本

0.4.0 2020-03-07 03:26 UTC

This package is auto-updated.

Last update: 2024-09-07 17:49:38 UTC


README

Build Status Coverage Status

https://www.cliffordvickrey.com/malarkey/查看此库的实际应用

此包使用简单的马尔可夫链算法生成无意义但听起来真实的文本(胡言乱语!)。

在马尔可夫链系统中,所有可能的状态都由先前状态决定。在文本的上下文中,它通过一组固定的概率来模拟从一个状态(“你好”)到未来状态(“世界!”)的转换。

马尔可夫链生成器接受文本,并对所有单词序列,模拟序列中下一个单词的可能性。(“世界!”可能有75%的可能性跟在“你好,”之后,“护士!”可能有25%的可能性)。按照这些概率访问链,并发出模仿人类写作的胡言乱语是很容易的。

对于任何给定的单词,可以“回看”任意数量的单词来确定该单词在序列中成为下一个单词的可能性。文本生成器回看的单词越多,输出的结果就越不随机,越像人类。

要求

  • PHP 7.1或更高版本

安装

运行以下命令来安装此库

$ composer require cliffordvickrey/malarkey

用法

$text = "I'd buy that for a dollar! But I'd buy this for two dollars!";

$chainGenerator = new CliffordVickrey\Malarkey\Generator\ChainGenerator();
$markovChain = $chainGenerator->generateChain($text, 2);

// the chain stores probability data for every possible state, like so
var_dump($markovChain->getFrequenciesBySequence("I'd", 'buy')); // ['that' => 1, 'this' => 1]

$textGenerator = new CliffordVickrey\Malarkey\Generator\TextGenerator();
$output = $textGenerator->generateText($markovChain, ['maxSentences' => 1]);

var_dump($output); // e.g. I'd buy that for two dollars!

在项目文件夹中运行以下命令以获取帮助

$ ./vendor/bin/malarkey

链生成器

@generateChain

从源文本生成马尔可夫链。

返回值:ChainInterface

参数

  • textstring):源文本
  • lookBehindint):在确定马尔可夫链的下一个状态时回看多少个单词。数字越高,随机生成的文本就越连贯。默认为2

返回的链对象实现了SerializableJsonSerializable,用于持久性和可移植性。

$text = "I'd buy that for a dollar! But I'd buy this for two dollars!";

$chainGenerator = new \CliffordVickrey\Malarkey\Generator\ChainGenerator();
/** @var CliffordVickrey\Malarkey\MarkovChain\Chain $markovChain */
$markovChain = $chainGenerator->generateChain($text);

$className = CliffordVickrey\Malarkey\MarkovChain\Chain::class;
$serialized = serialize($markovChain);
$unSerialized = unserialize($serialized, ['allowed_classes' => [$className]]);

var_dump(json_encode($markovChain) === json_encode($unSerialized)); // TRUE

@getLastGeneratedChunkCount

返回之前传递给generateChain的文本的段落数量,如果没有生成链,则返回NULL。

@getLastGeneratedWord

返回之前传递给generateChain的文本的单词数量,如果没有生成链,则返回NULL。

文本生成器

@generateText

访问马尔可夫链并返回随机生成的文本。

返回值:string

参数

  • chainChainInterface):马尔可夫链的对象表示
  • optionsmixed):TextGeneratorOptionsInterface的实例、选项的关联数组或NULL(使用默认值)。

有效的选项(没有必需的)

  • chunkSeparatorstring):用于连接文本生成器发出的块(段落由换行符分隔)的“胶水”。默认为两个换行符
  • maxChunksint):要生成的最大块(段落,由换行符分隔)数量。如果没有提供maxChunksmaxSentencesmaxWords,则生成器将发出一个块
  • maxSentencesint):要生成的最大句子数量。默认为NULL
  • maxWordsint):要生成的最大单词数量。默认为NULL
  • wordSeparatorstring):用于连接文本生成器发出的单词的“胶水”。默认为“ ”