Mit PHP Texte generieren

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Mit PHP Texte generieren

    Hallo,

    ich möchte auf meiner Seite,jedesmal wenn man diese aufruft einen von php generierten sinnfreien text haben. Mit welcher Funktion kann man das machen. Es sollen mehrere Absätze haben. Nach jedem "Satz" ein Punkt etc. wie ein normaler text nur eben mit dem computer geschrieben.


    mfg
  • Ich habe bereits folgendes gefunden, ich möchte aber eben nicht nur ein wort sondern einen text aus ca. 800 Wörtern mit Punkt.:

    PHP-Quellcode

    1. <?php
    2. $password_length = 9;
    3. function make_seed() {
    4. list($usec, $sec) = explode(' ', microtime());
    5. return (float) $sec + ((float) $usec * 100000);
    6. }
    7. srand(make_seed());
    8. $alfa = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM";
    9. $token = "";
    10. for($i = 0; $i < $password_length; $i ++) {
    11. $token .= $alfa[rand(0, strlen($alfa))];
    12. }
    13. echo $token;
    14. ?>
    Alles anzeigen
  • Ungefähr geht das so. Ist zwar unsauber, sollte aber das Prinzip erklären, dass du deine eigene Funktion schreiben kannst ;)

    Ungetestet!

    Quellcode

    1. <?php
    2. //Array mit allen Wörtern, die es gibt
    3. $woerter = array('Wort1', 'Wort2', 'Wort3', 'Wort4', 'Wort5', 'Wort6', ... 'Wort 1257');
    4. //Wie viele Sätze
    5. for($x = 0; $x < $AnzahlSaetze; $x++){
    6. //Satz zwischen 5 und 22 Wörter lang.
    7. for($i = 0; $i < mt_rand(5, 22); $i++){
    8. //Zufälliges Wort aus dem Wort-Array
    9. echo $woerter[mt_rand(1, $anzahl_der_woerter)]; //oder array_rand()
    10. }
    11. echo '. ';
    12. }
    13. ?>
    Alles anzeigen
  • Hi,

    der Code funktioniert super, allerdings muss man natürlich die Variablen definieren.
    Außerdem habe ich noch die Ausgabe des zufälligen Wortes verändert, da im Array ja von 0 an gezählt wird.

    Quellcode

    1. $AnzahlSaetze = 5;
    2. //Array mit allen Wörtern, die es gibt
    3. $woerter = array('Wort1', 'Wort2', 'Wort3', 'Wort4', 'Wort5', 'Wort6', 'Wort 1257');
    4. $anzahl_der_woerter = count($woerter);
    5. //Wie viele Sätze
    6. for($x = 0; $x < $AnzahlSaetze; $x++){
    7. //Satz zwischen 5 und 22 Wörter lang.
    8. for($i = 0; $i < mt_rand(5, 22); $i++){
    9. //Zufälliges Wort aus dem Wort-Array
    10. echo $woerter[mt_rand(0, $anzahl_der_woerter - 1)]; //oder array_rand()
    11. echo ' ';
    12. }
    13. echo '.<br /> '; // einfach um für Ordnung zu sorgen
    14. }
    Alles anzeigen
  • Ich würde das so machen(Wusste nicht genau was du meinst) :

    Quellcode

    1. <?php
    2. $woerter = array("Test","test1","test2","..");
    3. $anzahl = rand(0, (count($woerter)-1));
    4. echo $woerter[$anzahl];
    5. ?>
    6. <br />
    7. <?php
    8. $woerterlist = array("Test1","test2","test3","..");
    9. shuffle($woerterlist);
    10. $size = count($woerterlist);
    11. for($i = 0; $i < $size ; $i++){
    12. echo $woerterlist[$i]." ";
    13. }
    14. ?>
    Alles anzeigen
  • @freeek : habe mal dein code geklaut und in eine funktion gepackt :P hoffe du bist mir nicht böse :P

    Sollte nun der Anforderung gerecht werden und sehr einfach zu benutzen.

    Achja ist ungetestet grade kein PHP interpreter installiert >.> :wacko:

    Quellcode

    1. <?php
    2. // anwendung
    3. $aAuswahl = array('Wort1', 'Wort2', 'Wort3', 'Wort4', 'Wort5', 'Wort6', 'Wort 1257', 'welcome');
    4. echo ZufallSaetze($aAuswahl); // ZufallSaetze( array [, int ,] int ,] int])
    5. echo ZufallSaetze($aAuswahl,10); // mindestens 10 bis 22 Wörter und 1 Satz
    6. echo ZufallSaetze($aAuswahl,10,15); // mindestens 10 bis 15 Wörter und 1 Satz
    7. echo ZufallSaetze($aAuswahl,10,15,3); // mindestens 10 bis 15 Wörter und 3 Sätze
    8. function ZufallSaetze($aWoerter,$iMinSatzLaenge = 8,$iMaxSatzLaenge = 22,$iAnzahlSaetzt = 1){
    9. if(is_array($aWoerter)){ echo 'Du hast das Array vergessen mein lieber noob!'; }
    10. $iWoerterCount = count($aWoerter);
    11. $sReturn = '';
    12. for($x = 0; $x < $iAnzahlSaetzt; $x++){
    13. for($i = 0; $i < mt_rand($iMinSatzLaenge,$iMaxSatzLaenge); $i++){
    14. $sReturn .= $woerter[mt_rand(0,$iWoerterCount-1)].' ';
    15. }
    16. $sReturn .= '.<br>'
    17. }
    18. return $sReturn;
    19. }
    20. ?>
    Alles anzeigen
    Erfahrungen: Web( HTML, CSS, JS, PHP, NODEJS) SOFT( C++, Purebasic)
  • Ich kann dir dies hier Empfehlen -->

    Ich weis nicht genau ob die Version Aktuell ist wenn nicht, hier -> tinsology.net/scripts/php-lorem-ipsum-generator/ hibts die aktuelle und auch ein paar Varianten wie das ganze aufgerufen wird.

    Quellcode

    1. <?php
    2. class LoremIpsumGenerator {
    3. /**
    4. * Copyright (c) 2009, Mathew Tinsley ([email]tinsley@tinsology.net[/email])
    5. * All rights reserved.
    6. *
    7. * Redistribution and use in source and binary forms, with or without
    8. * modification, are permitted provided that the following conditions are met:
    9. * * Redistributions of source code must retain the above copyright
    10. * notice, this list of conditions and the following disclaimer.
    11. * * Redistributions in binary form must reproduce the above copyright
    12. * notice, this list of conditions and the following disclaimer in the
    13. * documentation and/or other materials provided with the distribution.
    14. * * Neither the name of the organization nor the
    15. * names of its contributors may be used to endorse or promote products
    16. * derived from this software without specific prior written permission.
    17. *
    18. * THIS SOFTWARE IS PROVIDED BY MATHEW TINSLEY ''AS IS'' AND ANY
    19. * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    20. * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    21. * DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY
    22. * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    23. * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
    24. * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    25. * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    26. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    27. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    28. */
    29. private $words, $wordsPerParagraph, $wordsPerSentence;
    30. function __construct($wordsPer = 100)
    31. {
    32. $this->wordsPerParagraph = $wordsPer;
    33. $this->wordsPerSentence = 24.460;
    34. $this->words = array(
    35. 'lorem',
    36. 'ipsum',
    37. 'dolor',
    38. 'sit',
    39. 'amet',
    40. 'consectetur',
    41. 'adipiscing',
    42. 'elit',
    43. 'curabitur',
    44. 'vel',
    45. 'hendrerit',
    46. 'libero',
    47. 'eleifend',
    48. 'blandit',
    49. 'nunc',
    50. 'ornare',
    51. 'odio',
    52. 'ut',
    53. 'orci',
    54. 'gravida',
    55. 'imperdiet',
    56. 'nullam',
    57. 'purus',
    58. 'lacinia',
    59. 'a',
    60. 'pretium',
    61. 'quis',
    62. 'congue',
    63. 'praesent',
    64. 'sagittis',
    65. 'laoreet',
    66. 'auctor',
    67. 'mauris',
    68. 'non',
    69. 'velit',
    70. 'eros',
    71. 'dictum',
    72. 'proin',
    73. 'accumsan',
    74. 'sapien',
    75. 'nec',
    76. 'massa',
    77. 'volutpat',
    78. 'venenatis',
    79. 'sed',
    80. 'eu',
    81. 'molestie',
    82. 'lacus',
    83. 'quisque',
    84. 'porttitor',
    85. 'ligula',
    86. 'dui',
    87. 'mollis',
    88. 'tempus',
    89. 'at',
    90. 'magna',
    91. 'vestibulum',
    92. 'turpis',
    93. 'ac',
    94. 'diam',
    95. 'tincidunt',
    96. 'id',
    97. 'condimentum',
    98. 'enim',
    99. 'sodales',
    100. 'in',
    101. 'hac',
    102. 'habitasse',
    103. 'platea',
    104. 'dictumst',
    105. 'aenean',
    106. 'neque',
    107. 'fusce',
    108. 'augue',
    109. 'leo',
    110. 'eget',
    111. 'semper',
    112. 'mattis',
    113. 'tortor',
    114. 'scelerisque',
    115. 'nulla',
    116. 'interdum',
    117. 'tellus',
    118. 'malesuada',
    119. 'rhoncus',
    120. 'porta',
    121. 'sem',
    122. 'aliquet',
    123. 'et',
    124. 'nam',
    125. 'suspendisse',
    126. 'potenti',
    127. 'vivamus',
    128. 'luctus',
    129. 'fringilla',
    130. 'erat',
    131. 'donec',
    132. 'justo',
    133. 'vehicula',
    134. 'ultricies',
    135. 'varius',
    136. 'ante',
    137. 'primis',
    138. 'faucibus',
    139. 'ultrices',
    140. 'posuere',
    141. 'cubilia',
    142. 'curae',
    143. 'etiam',
    144. 'cursus',
    145. 'aliquam',
    146. 'quam',
    147. 'dapibus',
    148. 'nisl',
    149. 'feugiat',
    150. 'egestas',
    151. 'class',
    152. 'aptent',
    153. 'taciti',
    154. 'sociosqu',
    155. 'ad',
    156. 'litora',
    157. 'torquent',
    158. 'per',
    159. 'conubia',
    160. 'nostra',
    161. 'inceptos',
    162. 'himenaeos',
    163. 'phasellus',
    164. 'nibh',
    165. 'pulvinar',
    166. 'vitae',
    167. 'urna',
    168. 'iaculis',
    169. 'lobortis',
    170. 'nisi',
    171. 'viverra',
    172. 'arcu',
    173. 'morbi',
    174. 'pellentesque',
    175. 'metus',
    176. 'commodo',
    177. 'ut',
    178. 'facilisis',
    179. 'felis',
    180. 'tristique',
    181. 'ullamcorper',
    182. 'placerat',
    183. 'aenean',
    184. 'convallis',
    185. 'sollicitudin',
    186. 'integer',
    187. 'rutrum',
    188. 'duis',
    189. 'est',
    190. 'etiam',
    191. 'bibendum',
    192. 'donec',
    193. 'pharetra',
    194. 'vulputate',
    195. 'maecenas',
    196. 'mi',
    197. 'fermentum',
    198. 'consequat',
    199. 'suscipit',
    200. 'aliquam',
    201. 'habitant',
    202. 'senectus',
    203. 'netus',
    204. 'fames',
    205. 'quisque',
    206. 'euismod',
    207. 'curabitur',
    208. 'lectus',
    209. 'elementum',
    210. 'tempor',
    211. 'risus',
    212. 'cras' );
    213. }
    214. function getContent($count, $format = 'html', $loremipsum = true)
    215. {
    216. $format = strtolower($format);
    217. if($count <= 0)
    218. return '';
    219. switch($format)
    220. {
    221. case 'txt':
    222. return $this->getText($count, $loremipsum);
    223. case 'plain':
    224. return $this->getPlain($count, $loremipsum);
    225. default:
    226. return $this->getHTML($count, $loremipsum);
    227. }
    228. }
    229. private function getWords(&$arr, $count, $loremipsum)
    230. {
    231. $i = 0;
    232. if($loremipsum)
    233. {
    234. $i = 2;
    235. $arr[0] = 'lorem';
    236. $arr[1] = 'ipsum';
    237. }
    238. for($i; $i < $count; $i++)
    239. {
    240. $index = array_rand($this->words);
    241. $word = $this->words[$index];
    242. //echo $index . '=>' . $word . '<br />';
    243. if($i > 0 && $arr[$i - 1] == $word)
    244. $i--;
    245. else
    246. $arr[$i] = $word;
    247. }
    248. }
    249. private function getPlain($count, $loremipsum, $returnStr = true)
    250. {
    251. $words = array();
    252. $this->getWords($words, $count, $loremipsum);
    253. //print_r($words);
    254. $delta = $count;
    255. $curr = 0;
    256. $sentences = array();
    257. while($delta > 0)
    258. {
    259. $senSize = $this->gaussianSentence();
    260. //echo $curr . '<br />';
    261. if(($delta - $senSize) < 4)
    262. $senSize = $delta;
    263. $delta -= $senSize;
    264. $sentence = array();
    265. for($i = $curr; $i < ($curr + $senSize); $i++)
    266. $sentence[] = $words[$i];
    267. $this->punctuate($sentence);
    268. $curr = $curr + $senSize;
    269. $sentences[] = $sentence;
    270. }
    271. if($returnStr)
    272. {
    273. $output = '';
    274. foreach($sentences as $s)
    275. foreach($s as $w)
    276. $output .= $w . ' ';
    277. return $output;
    278. }
    279. else
    280. return $sentences;
    281. }
    282. private function getText($count, $loremipsum)
    283. {
    284. $sentences = $this->getPlain($count, $loremipsum, false);
    285. $paragraphs = $this->getParagraphArr($sentences);
    286. $paragraphStr = array();
    287. foreach($paragraphs as $p)
    288. {
    289. $paragraphStr[] = $this->paragraphToString($p);
    290. }
    291. $paragraphStr[0] = "\t" . $paragraphStr[0];
    292. return implode("\n\n\t", $paragraphStr);
    293. }
    294. private function getParagraphArr($sentences)
    295. {
    296. $wordsPer = $this->wordsPerParagraph;
    297. $sentenceAvg = $this->wordsPerSentence;
    298. $total = count($sentences);
    299. $paragraphs = array();
    300. $pCount = 0;
    301. $currCount = 0;
    302. $curr = array();
    303. for($i = 0; $i < $total; $i++)
    304. {
    305. $s = $sentences[$i];
    306. $currCount += count($s);
    307. $curr[] = $s;
    308. if($currCount >= ($wordsPer - round($sentenceAvg / 2.00)) || $i == $total - 1)
    309. {
    310. $currCount = 0;
    311. $paragraphs[] = $curr;
    312. $curr = array();
    313. //print_r($paragraphs);
    314. }
    315. //print_r($paragraphs);
    316. }
    317. return $paragraphs;
    318. }
    319. private function getHTML($count, $loremipsum)
    320. {
    321. $sentences = $this->getPlain($count, $loremipsum, false);
    322. $paragraphs = $this->getParagraphArr($sentences);
    323. //print_r($paragraphs);
    324. $paragraphStr = array();
    325. foreach($paragraphs as $p)
    326. {
    327. $paragraphStr[] = "<p>\n" . $this->paragraphToString($p, true) . '</p>';
    328. }
    329. //add new lines for the sake of clean code
    330. return implode("\n", $paragraphStr);
    331. }
    332. private function paragraphToString($paragraph, $htmlCleanCode = false)
    333. {
    334. $paragraphStr = '';
    335. foreach($paragraph as $sentence)
    336. {
    337. foreach($sentence as $word)
    338. $paragraphStr .= $word . ' ';
    339. if($htmlCleanCode)
    340. $paragraphStr .= "\n";
    341. }
    342. return $paragraphStr;
    343. }
    344. /*
    345. * Inserts commas and periods in the given
    346. * word array.
    347. */
    348. private function punctuate(& $sentence)
    349. {
    350. $count = count($sentence);
    351. $sentence[$count - 1] = $sentence[$count - 1] . '.';
    352. if($count < 4)
    353. return $sentence;
    354. $commas = $this->numberOfCommas($count);
    355. for($i = 1; $i <= $commas; $i++)
    356. {
    357. $index = (int) round($i * $count / ($commas + 1));
    358. if($index < ($count - 1) && $index > 0)
    359. {
    360. $sentence[$index] = $sentence[$index] . ',';
    361. }
    362. }
    363. }
    364. /*
    365. * Determines the number of commas for a
    366. * sentence of the given length. Average and
    367. * standard deviation are determined superficially
    368. */
    369. private function numberOfCommas($len)
    370. {
    371. $avg = (float) log($len, 6);
    372. $stdDev = (float) $avg / 6.000;
    373. return (int) round($this->gauss_ms($avg, $stdDev));
    374. }
    375. /*
    376. * Returns a number on a gaussian distribution
    377. * based on the average word length of an english
    378. * sentence.
    379. * Statistics Source:
    380. * [url]http://hearle.nahoo.net/Academic/Maths/Sentence.html[/url]
    381. * Average: 24.46
    382. * Standard Deviation: 5.08
    383. */
    384. private function gaussianSentence()
    385. {
    386. $avg = (float) 24.460;
    387. $stdDev = (float) 5.080;
    388. return (int) round($this->gauss_ms($avg, $stdDev));
    389. }
    390. /*
    391. * The following three functions are used to
    392. * compute numbers with a guassian distrobution
    393. * Source:
    394. * [url]http://us.php.net/manual/en/function.rand.php#53784[/url]
    395. */
    396. private function gauss()
    397. { // N(0,1)
    398. // returns random number with normal distribution:
    399. // mean=0
    400. // std dev=1
    401. // auxilary vars
    402. $x=$this->random_0_1();
    403. $y=$this->random_0_1();
    404. // two independent variables with normal distribution N(0,1)
    405. $u=sqrt(-2*log($x))*cos(2*pi()*$y);
    406. $v=sqrt(-2*log($x))*sin(2*pi()*$y);
    407. // i will return only one, couse only one needed
    408. return $u;
    409. }
    410. private function gauss_ms($m=0.0,$s=1.0)
    411. {
    412. return $this->gauss()*$s+$m;
    413. }
    414. private function random_0_1()
    415. {
    416. return (float)rand()/(float)getrandmax();
    417. }
    418. }
    Alles anzeigen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von der_robert ()