andreskrey / shitty-markov-generator
生成无意义短语的马尔可夫链的糟糕实现。
This package is auto-updated.
Last update: 2024-09-13 23:54:19 UTC
README
马尔可夫链的糟糕实现
是什么?
如果你对一个文本进行分解,然后检查单词,你会发现有些单词经常出现在某些其他单词旁边。有时单词很少一起出现。如果你探索这些关系并给每个关系分配一个分数,你可以使用这些信息来创建具有正确结构和,希望有意义的短语。这种探索任务在极其简化的方式上,就是马尔可夫链。
该项目将根据你提供的文本创建短语。从某种意义上说,文本越大,它生成的短语就越“聪明”。
如何实现?
当你向Chainer函数提供文本时,它将分解所有单词并创建一个字典,根据重复情况为每个单词和下一个单词分配特定的分数。
然后它将根据该字典输出一个短语。你可以选择链的大小(短语长度)、主题(它将尝试将你定义的主题与字典中的一个单词匹配,并从那里开始短语)以及块大小(字典的构建方式)。
使用方法
你可以通过CLI或作为依赖项使用它。下载项目并使用composer install
生成自动加载器。
否则,只需通过CLI运行它。
php chainer.php -r /path/to/your/text
示例文本可以是任何东西。只需确保它足够长,可以创建有趣的短语。
为什么它比其他马尔可夫生成器更好?
我喜欢我的项目的优点是它不会随机选择单词。我看到的其他项目使用随机函数从池中选择单词。在这个项目中,单词是根据机会选择的。在构建字典时,为可能的下一个单词分配一个分数。在选择新单词时,如果有多个选项,这些选项将通过随机选择,但那些自然更有可能与所选单词一起出现的单词将被更频繁地选择。请查看markovBot文件中的createChances
函数以更好地理解。
它还试图以标点符号结束短语。这并不完美,但给定正确的条件,它将给出以!
、.
或?
结束的短语。
错误
- 目前块大小很棘手。如果你选择大于2的块大小,生成短语时会重复。当选择一个单词时,将从字典中删除上一个块以避免重复,但由于字典的生成方式,类似的组合仍然存在于其中。
致谢
该项目大量借鉴了heidilabs的markov-php项目。