cliffordvickrey / malarkey
使用马尔可夫链算法生成无意义但听起来真实的文本
0.4.0
2020-03-07 03:26 UTC
Requires
- php: >=7.1
- ext-json: *
Requires (Dev)
- phpstan/phpstan: ^0.12.9
- phpunit/phpunit: ^6.0|^7.0|^8.0|^9.0
README
在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
参数
text
(string
):源文本lookBehind
(int
):在确定马尔可夫链的下一个状态时回看多少个单词。数字越高,随机生成的文本就越连贯。默认为2
返回的链对象实现了Serializable
和JsonSerializable
,用于持久性和可移植性。
$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
参数
chain
(ChainInterface
):马尔可夫链的对象表示options
(mixed
):TextGeneratorOptionsInterface
的实例、选项的关联数组或NULL(使用默认值)。
有效的选项(没有必需的)
chunkSeparator
(string
):用于连接文本生成器发出的块(段落由换行符分隔)的“胶水”。默认为两个换行符maxChunks
(int
):要生成的最大块(段落,由换行符分隔)数量。如果没有提供maxChunks
、maxSentences
或maxWords
,则生成器将发出一个块maxSentences
(int
):要生成的最大句子数量。默认为NULLmaxWords
(int
):要生成的最大单词数量。默认为NULLwordSeparator
(string
):用于连接文本生成器发出的单词的“胶水”。默认为“ ”