Repository with sources and generator of https://larlet.fr/david/ https://larlet.fr/david/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

index.html 22KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331
  1. <!doctype html>
  2. <html lang=fr>
  3. <head>
  4. <!-- Always define the charset before the title -->
  5. <meta charset=utf-8>
  6. <title>Nombre d&#39;occurences d&#39;un mot dans un texte en Python — Biologeek — David Larlet</title>
  7. <!-- Define a viewport to mobile devices to use - telling the browser to assume that the page is as wide as the device (width=device-width) and setting the initial page zoom level to be 1 (initial-scale=1.0) -->
  8. <meta name="viewport" content="width=device-width, initial-scale=1"/>
  9. <!-- Fake favicon, to avoid extra request to the server -->
  10. <link rel="icon" href="data:;base64,iVBORw0KGgo=">
  11. <link type="application/atom+xml" rel="alternate" title="Feed" href="/david/log/" />
  12. <link rel="manifest" href="/manifest.json">
  13. <link rel="stylesheet" href="/static/david/css/larlet-david-_J6Rv.css" data-instant-track />
  14. <noscript>
  15. <style type="text/css">
  16. /* Otherwise fonts are loaded by JS for faster initial rendering. See scripts at the bottom. */
  17. body {
  18. font-family: 'EquityTextB', serif;
  19. }
  20. h1, h2, h3, h4, h5, h6, time, nav a, nav a:link, nav a:visited {
  21. font-family: 'EquityCapsB', sans-serif;
  22. font-variant: normal;
  23. }
  24. </style>
  25. </noscript>
  26. <!-- Canonical URL for SEO purposes -->
  27. <link rel="canonical" href="https://larlet.fr/david/biologeek/archives/20081206-nombre-doccurences-dun-mot-dans-un-texte-en-python">
  28. </head>
  29. <body>
  30. <div>
  31. <header>
  32. <nav>
  33. <p>
  34. <small>
  35. Je suis <a href="/david/" title="Profil public">David Larlet</a>, <a href="/david/pro/" title="Activité professionnelle">artisan</a> du web qui vous <a href="/david/pro/accompagnement/" title="Activité d’accompagnement">accompagne</a><span class="more-infos"> dans l’acquisition de savoirs pour concevoir des <a href="/david/pro/produits-essentiels/" title="Qu’est-ce qu’un produit essentiel ?">produits essentiels</a></span>. <span class="more-more-infos">Discutons ensemble d’une <a href="/david/pro/devis/" title="En savoir plus">non-demande de devis</a>.</span> Je partage ici mes <a href="/david/blog/" title="Expériences bienveillantes">réflexions</a> et <a href="/david/correspondances/2017/" title="Lettres hebdomadaires">correspondances</a>.
  36. </small>
  37. </p>
  38. </nav>
  39. </header>
  40. <section>
  41. <h1 property="schema:name">Nombre d&#39;occurences d&#39;un mot dans un texte en Python</h1>
  42. <article typeof="schema:BlogPosting">
  43. <div property="schema:articleBody">
  44. <p>Juste un petit snippet car j'en ai eu besoin récemment pour faire des statistiques sur des termes recherchés et je pense que ça peut être utile :</p>
  45. <pre><code>from itertools import groupby
  46. def word_frequencies(content, blacklist):
  47. """
  48. Count the number of words in a content, excluding blacklisted terms.
  49. Return a generator of tuples (count, word) sorted by descending frequency.
  50. Example::
  51. &gt;&gt;&gt; song = 'Ob la di ob la da "rla di da" da "da"'
  52. &gt;&gt;&gt; for count, word in word_frequencies(song, ['di']):
  53. ... print "%s %s" % (count, word)
  54. ...
  55. 4 da
  56. 2 la
  57. 2 ob
  58. 1 rla
  59. """
  60. sorted_words = sorted(word \
  61. for word in content.lower().replace('"', '').split() \
  62. if word not in blacklist)
  63. return ((len(list(group)), word) for word, group in groupby(sorted_words))
  64. if __name__ == "__main__":
  65. import doctest
  66. doctest.testmod(verbose=True)
  67. </code></pre>
  68. <p>À adapter selon votre convenance, si vous avez mieux je suis preneur, comme toujours.</p>
  69. </div>
  70. </article>
  71. <footer>
  72. <h6 property="schema:datePublished">— 06/12/2008</h6>
  73. </footer>
  74. </section>
  75. <section>
  76. <div>
  77. <h3>Articles peut-être en rapport</h3>
  78. <ul>
  79. <li><a href="/david/biologeek/archives/20081204-la-documentation-django-en-local-html-et-pdf/" title="Accès à La documentation Django en local (html et pdf)">La documentation Django en local (html et pdf)</a></li>
  80. <li><a href="/david/biologeek/archives/20081203-interfaces-et-promotion-du-web-semantique/" title="Accès à Interfaces et promotion du Web Sémantique">Interfaces et promotion du Web Sémantique</a></li>
  81. <li><a href="/david/biologeek/archives/20081201-24ways-le-calendrier-de-lavant-des-geeks-web/" title="Accès à 24ways, le calendrier de l&#39;Avent des geeks web">24ways, le calendrier de l&#39;Avent des geeks web</a></li>
  82. </ul>
  83. </div>
  84. </section>
  85. <section>
  86. <div id="comments">
  87. <h3>Commentaires</h3>
  88. <div class="comment" typeof="schema:UserComments">
  89. <p class="comment-meta">
  90. <span class="comment-author" property="schema:creator">kim</span> le <span class="comment-date" property="schema:commentTime">06/12/2008</span> :
  91. </p>
  92. <div class="comment-content" property="schema:commentText">
  93. <p>en perl, on a droit ?</p>
  94. <p>(my $string = &#39;Ob la di ob la da &quot;rla di da&quot; da &quot;da&quot;&#39; ) =~ s/&quot;//g;<br />my %hash;<br />map { $hash{$_} = (defined $hash{$_}) ? 1 : $hash{$_} + 1; } (split(&quot; &quot;,$string);<br />map { print &quot;$_ -&gt; $hash{$_}\n&quot;; } (keys %hash);</p>
  95. </div>
  96. </div>
  97. <div class="comment" typeof="schema:UserComments">
  98. <p class="comment-meta">
  99. <span class="comment-author" property="schema:creator">maxime</span> le <span class="comment-date" property="schema:commentTime">06/12/2008</span> :
  100. </p>
  101. <div class="comment-content" property="schema:commentText">
  102. <p>kim: voilà qui illustre bien la différence de lisibilité entre le python et le perl ;)</p>
  103. </div>
  104. </div>
  105. <div class="comment" typeof="schema:UserComments">
  106. <p class="comment-meta">
  107. <span class="comment-author" property="schema:creator">David, biologeek</span> le <span class="comment-date" property="schema:commentTime">06/12/2008</span> :
  108. </p>
  109. <div class="comment-content" property="schema:commentText">
  110. <p>@kim : tiens ça me fait penser que je pourrais effectivement virer les &quot; dès le début. Ça me fait aussi penser que perl tiens bien sa réputation ;-).</p>
  111. </div>
  112. </div>
  113. <div class="comment" typeof="schema:UserComments">
  114. <p class="comment-meta">
  115. <span class="comment-author" property="schema:creator">kim</span> le <span class="comment-date" property="schema:commentTime">06/12/2008</span> :
  116. </p>
  117. <div class="comment-content" property="schema:commentText">
  118. <p>@tous les deux : en même temps, j&#39;ai fait exprès de &quot;compresser le code&quot;... M&#39;enfin je trouve le perl plus lisible que le python, question d&#39;habitude :)<br />Cela dit je remarque que j&#39;ai oublié le blacklist et le lowercase. Donc voilà pareil, en reprenant le principe de ton code python (sort + j&#39;ai ajouté lc &amp; blacklist), et sans hash remplie au fur et à mesure :</p>
  119. <p>(my $string = lc(&#39;Ob la di ob la da &quot;rla di da&quot; da &quot;da&quot;&#39;) ) =~ s/&quot;//g;<br />my @string = sort(split(&quot; &quot;,$string));<br />my ($last,%hash) = (&quot;&quot;,);<br />foreach @string {<br /> next if($last eq $_);<br /> next if(!grep {/^$_$/} @blacklist);<br /> $last = $_;<br /> $hash{$_} = scalar(grep { /^$_$/ } @string);<br />}<br /># un peu d&#39;affichage si on veut :<br />#map { print &quot;$_ -&gt; $hash{$_}\n&quot; } (keys %hash);<br />return %hash;</p>
  120. <p>Après, l&#39;utilisation de sort, en perl comme en python, est discutable. Est-ce que trier puis faire un groupby est meilleur en temps &amp; mémoire, par rapport à un stockage &quot;au fil de la lecture&quot; (donc, pas de sort). Dans ton exemple, le texte est court, quid de si on fait le même test sur le texte du code civil par exemple ? ça pourrait être intéressant de faire des tests sur le sujet ;) Je pense que ce genre de questions peut facilement rendre le code un moins &quot;oneline&quot; :)</p>
  121. </div>
  122. </div>
  123. <div class="comment" typeof="schema:UserComments">
  124. <p class="comment-meta">
  125. <span class="comment-author" property="schema:creator">Jdoe</span> le <span class="comment-date" property="schema:commentTime">07/12/2008</span> :
  126. </p>
  127. <div class="comment-content" property="schema:commentText">
  128. <p>@kim, même sans la compression c&#39;est ingérable du code comme ça. dans 6 mois tu retournes dans ta fonction, il te faudra trop de temps pour savoir ce qu&#39;elle fait.</p>
  129. <p>Avant j&#39;aimais bien le perl mais qd on a goûté à la facilité du python, c&#39;est comme une drogue.</p>
  130. </div>
  131. </div>
  132. <div class="comment" typeof="schema:UserComments">
  133. <p class="comment-meta">
  134. <span class="comment-author" property="schema:creator">Jean-Philippe Camguilhem</span> le <span class="comment-date" property="schema:commentTime">07/12/2008</span> :
  135. </p>
  136. <div class="comment-content" property="schema:commentText">
  137. <p>hum hum !</p>
  138. <p>Si je n&#39;ai pas mal compris la doc string de ta fonction :</p>
  139. <p>&quot;&quot;&quot;<br />Compte le nombre d&#39;ocuurences des mots contenus dans un texte (exceptés ceux présents dans la black list).</p>
  140. <p>Retourne un générateur de tuples classés par ordre décroissant de fréquences <br />&quot;&quot;&quot;</p>
  141. <p>Alors ton snipet est buggué dans le sens où il retourne les tuples classés par ordre alphabétique des mots, et non comme indiqué.</p>
  142. <p>Un heureux hasard, trompe le lecteur car ta chanson de départ contient 4 &quot;da&quot;.</p>
  143. <p>remplace les par &quot;za&quot;</p>
  144. <p>&gt;&gt;&gt; song = &#39;Ob la di ob la za &quot;rla di za&quot; za &quot;za&quot;&#39;</p>
  145. <p>Failed example:<br /> for count, word in word_frequencies(song, [&#39;di&#39;]):<br /> print &quot;%s %s&quot; % (count, word)<br />Expected:<br /> 4 za<br /> 2 la<br /> 2 ob<br /> 1 rla<br />Got:<br /> 2 la<br /> 2 ob<br /> 1 rla<br /> 4 za<br />1 items had no tests:<br /> __main__<br />**********************************************************************<br />1 items had failures:<br /> 1 of 2 in __main__.word_frequencies<br />2 tests in 2 items.<br />1 passed and 1 failed.<br />***Test Failed*** 1 failures.</p>
  146. <p>Je laisse aux autres lecteurs le soin de corriger le code à titre d&#39;exercice :)</p>
  147. <p>@++</p>
  148. </div>
  149. </div>
  150. <div class="comment" typeof="schema:UserComments">
  151. <p class="comment-meta">
  152. <span class="comment-author" property="schema:creator">kim</span> le <span class="comment-date" property="schema:commentTime">07/12/2008</span> :
  153. </p>
  154. <div class="comment-content" property="schema:commentText">
  155. <p>@jdoe : bon on va éviter de rentrer dans le troll de bas étage :) mais même sans commentaire, je trouve le code lisible et maintenable. Après, si ce n&#39;est qu&#39;une question de commentaire, c&#39;était voulu, David les avait mis dans son code, je vais pas les *rappeler*.</p>
  156. <p>J&#39;ai curieusement fait exactement l&#39;inverse de toi, j&#39;aimais bien le perl, j&#39;ai goûté au python pendant 6 mois dans le cadre d&#39;un job, hé ben j&#39;en suis revenu au perl pour trois raisons tout à fait subjectives :<br />* plus souple<br />* plus agréable<br />* on n&#39;a pas à s&#39;emmerder avec l&#39;indentation. Et là, par contre, c&#39;est une plaie à mon sens : j&#39;ai récupéré du code modifié par deux personnes, on retrouvait des tabulations, des espaces, c&#39;est super lourd à maintenir (sans compter les copier/coller qu&#39;il faut systématiquement réindenter : le python *nécessite* un éditeur de texte adapté, ce qui n&#39;est pas normal à mon sens).</p>
  157. <p>Après, je suis d&#39;accord que &quot;à lire&quot;, le python peut paraître plus agréable (bon, peut être pas dans l&#39;exemple ci dessus parce qu&#39;il se trouve que le code est *aussi* condensé et on arrive à deux lignes de code contenant au total une douzaine d&#39;instruction...)</p>
  158. </div>
  159. </div>
  160. <div class="comment" typeof="schema:UserComments">
  161. <p class="comment-meta">
  162. <span class="comment-author" property="schema:creator">benoitc</span> le <span class="comment-date" property="schema:commentTime">07/12/2008</span> :
  163. </p>
  164. <div class="comment-content" property="schema:commentText">
  165. <p>en me e temps ce pourrait être plus somple en python :</p>
  166. <p>&gt;&gt;&gt; songs = &#39;Ob la di ob la da &quot;rla di da&quot; da &quot;da&quot;&#39;<br />&gt;&gt;&gt; lsongs = [song.replace(&#39;&quot;&#39;, &#39;&#39;).lower() for song in songs.split()]<br />&gt;&gt;&gt; freqs = [(- lsongs.count(song), song) for song in set(lsongs)]<br />&gt;&gt;&gt; print &quot;\n&quot;.join(&quot;%-10s : %s&quot; % (n, -f) for f, n in sorted(freqs))<br />da : 4<br />di : 2<br />la : 2<br />ob : 2<br />rla : 1</p>
  167. </div>
  168. </div>
  169. <div class="comment" typeof="schema:UserComments">
  170. <p class="comment-meta">
  171. <span class="comment-author" property="schema:creator">benoitc</span> le <span class="comment-date" property="schema:commentTime">07/12/2008</span> :
  172. </p>
  173. <div class="comment-content" property="schema:commentText">
  174. <p>autre possibilité :</p>
  175. <p>&gt;&gt;&gt; songs = &#39;Ob la di ob la da &quot;rla di da&quot; da &quot;da&quot;&#39;<br />&gt;&gt;&gt; lsongs = [song.replace(&#39;&quot;&#39;, &#39;&#39;).lower() for song in songs.split()]<br />&gt;&gt;&gt; freqs = [lsongs.count(song) for song in lsongs]<br />&gt;&gt;&gt; dict(zip(lsongs, freqs))<br />{&#39;da&#39;: 4, &#39;di&#39;: 2, &#39;rla&#39;: 1, &#39;ob&#39;: 2, &#39;la&#39;: 2}</p>
  176. <p>perso dans ls 2 cas je trouve le python plus lisible que le perl .... les $_ me semblant pas naturel (surtout pour un français). Pour les badwords il suffit de mettre un son in songs.split() and not in badwords .</p>
  177. </div>
  178. </div>
  179. <div class="comment" typeof="schema:UserComments">
  180. <p class="comment-meta">
  181. <span class="comment-author" property="schema:creator">jean-Philippe Camguilhem</span> le <span class="comment-date" property="schema:commentTime">07/12/2008</span> :
  182. </p>
  183. <div class="comment-content" property="schema:commentText">
  184. <p>Bon benoitc n&#39;a pas trainé pour corriger.</p>
  185. <p>J&#39;aime beaucoup sa façon originale de trier de façon inverse en passant par des valeurs négatives dans sa première proposition.</p>
  186. <p>J&#39;en profite cependant pour placer une méthode souvent méconnue pour les tris de listes à plusieurs dimensions.</p>
  187. <p>sorted tri sur le premier élément, mais on peut lui demander de trier sur un autre élément via operator :</p>
  188. <p>&gt;&gt;&gt; import operator<br />&gt;&gt;&gt; words_frequencies=((&#39;za&#39;, 4), (&#39;rla&#39;, 1), (&#39;la&#39;, 2), (&#39;ob&#39;, 2))<br />&gt;&gt;&gt; print sorted(words_frequencies, key=operator.itemgetter(1), reverse=True)<br />[(&#39;za&#39;, 4), (&#39;la&#39;, 2), (&#39;ob&#39;, 2), (&#39;rla&#39;, 1)]</p>
  189. <p>@++</p>
  190. <p>@kim pour connaître la réponse au match perl vs python<br />il faudra repasser vendredi sur cette url :)<br /><a href="http://jp.camguilhem.net/?user=kim&amp;cool=perl&amp;bad=python">http://jp.camguilhem.net/?user=kim&amp;cool=perl&amp;bad=python</a></p>
  191. </div>
  192. </div>
  193. <div class="comment" typeof="schema:UserComments">
  194. <p class="comment-meta">
  195. <span class="comment-author" property="schema:creator">benoitc</span> le <span class="comment-date" property="schema:commentTime">07/12/2008</span> :
  196. </p>
  197. <div class="comment-content" property="schema:commentText">
  198. <p>Je n&#39;utilis epas svt operator, une autre solution si on veut trier :</p>
  199. <p>&gt;&gt;&gt; songs = &#39;Ob la di ob la da &quot;rla di da&quot; da &quot;da&quot;&#39;<br />&gt;&gt;&gt; lsongs = [song.replace(&#39;&quot;&#39;, &#39;&#39;).lower() for song in songs.split()]<br />&gt;&gt;&gt; freqs = [lsongs.count(song) for song in set(lsongs)]<br />&gt;&gt;&gt; a = zip(lsongs,freqs)<br />&gt;&gt;&gt; a.sort(lambda a,b: cmp(a[1],b[1]))<br />&gt;&gt;&gt; a<br />[(&#39;di&#39;, 1), (&#39;la&#39;, 2), (&#39;ob&#39;, 2), (&#39;la&#39;, 2), (&#39;ob&#39;, 4)]</p>
  200. </div>
  201. </div>
  202. <div class="comment" typeof="schema:UserComments">
  203. <p class="comment-meta">
  204. <span class="comment-author" property="schema:creator">benoitc</span> le <span class="comment-date" property="schema:commentTime">07/12/2008</span> :
  205. </p>
  206. <div class="comment-content" property="schema:commentText">
  207. <p>Bon suite à un question de Kael qui m&#39;a titillé j&#39;allais poser ici l&#39;algo en erlang quand j&#39;ai vu que mon dernier exemple était faux. Ceci est plus correct :</p>
  208. <p>&gt;&gt;&gt; songs = &#39;Ob la di ob la da &quot;rla di da&quot; da &quot;da&quot;&#39;<br />&gt;&gt;&gt; lsongs = [song.replace(&#39;&quot;&#39;, &#39;&#39;).lower() for song in songs.split()]<br />&gt;&gt;&gt; freqs = [lsongs.count(song) for song in lsongs]<br />&gt;&gt;&gt; a = dict(zip(lsongs, freqs))<br />&gt;&gt;&gt; a<br />{&#39;da&#39;: 4, &#39;di&#39;: 2, &#39;rla&#39;: 1, &#39;ob&#39;: 2, &#39;la&#39;: 2}<br />&gt;&gt;&gt; items = a.items()<br />&gt;&gt;&gt; items.sort(lambda a, b: cmp(a[1], b[1]))<br />&gt;&gt;&gt; items<br />[(&#39;rla&#39;, 1), (&#39;di&#39;, 2), (&#39;ob&#39;, 2), (&#39;la&#39;, 2), (&#39;da&#39;, 4)]</p>
  209. <p>et reverse pour l&#39;inverse...</p>
  210. <p>En erlang cela donne :</p>
  211. <p>1&gt; S = &quot;Ob la di ob la da \&quot;rla di da\&quot; da \&quot;da\&quot;&quot;,<br />1&gt; Map = lists:map(fun(Word) -&gt; {string:to_lower(Word),1} end, string:tokens(S, &quot; \&quot;&quot;)),<br />1&gt; Result = lists:foldl(fun({Word,_}, Dict) -&gt;<br />1&gt; case dict:is_key(Word, Dict) of <br />1&gt; true -&gt; dict:store(Word, dict:fetch(Word, Dict) + 1, Dict);<br />1&gt; false -&gt; dict:store(Word, 1, Dict)<br />1&gt; end<br />1&gt; end, dict:new(), Map),<br />1&gt; dict:fold(fun(Word, Freq, Acc) -&gt; [{Word,Freq}|Acc] end, [], Result).<br />[{&quot;da&quot;,4},{&quot;rla&quot;,1},{&quot;ob&quot;,2},{&quot;di&quot;,2},{&quot;la&quot;,2}]</p>
  212. <p><a href="http://friendpaste.com/Hy6KzphN">http://friendpaste.com/Hy6KzphN</a></p>
  213. <p>(mis sur friendpaste car ton système n&#39;accepte pas les &quot;+ 1&quot; dans les posts!)</p>
  214. <p></p>
  215. </div>
  216. </div>
  217. <div class="comment" typeof="schema:UserComments">
  218. <p class="comment-meta">
  219. <span class="comment-author" property="schema:creator">scar</span> le <span class="comment-date" property="schema:commentTime">08/12/2008</span> :
  220. </p>
  221. <div class="comment-content" property="schema:commentText">
  222. <p>En php :<br />&lt;?php<br />$song = &#39;Ob la di ob la da &quot;rla di da&quot; da &quot;da&quot;&#39;;<br />$res = array();<br />foreach (preg_split(&#39;/\W/i&#39;, $song) as $w) <br /> if(!empty($w)) ++$res[$w];<br />natsort($res);<br />var_export($res);<br />?&gt;<br />Résultat :<br />array (<br /> &#39;Ob&#39; =&gt; 1,<br /> &#39;rla&#39; =&gt; 1,<br /> &#39;ob&#39; =&gt; 1,<br /> &#39;di&#39; =&gt; 2,<br /> &#39;la&#39; =&gt; 2,<br /> &#39;da&#39; =&gt; 4,<br />)<br />Avec array_reverse($res, true) pour le résultat inverse.</p>
  223. <p>Après le choix du language, c&#39;est bien souvent une question de goût :)</p>
  224. </div>
  225. </div>
  226. <div class="comment" typeof="schema:UserComments">
  227. <p class="comment-meta">
  228. <span class="comment-author" property="schema:creator">vincent rabah</span> le <span class="comment-date" property="schema:commentTime">11/12/2008</span> :
  229. </p>
  230. <div class="comment-content" property="schema:commentText">
  231. <p>Sous (L)unix il existe une commande qui est &quot;wc&quot; qui renvoie le nombre de mots d&#39;un texte et &quot;wc -l&quot; qui renvoie le nombre de ligne d&#39;un texte :)</p>
  232. </div>
  233. </div>
  234. <div class="comment" typeof="schema:UserComments">
  235. <p class="comment-meta">
  236. <span class="comment-author" property="schema:creator">Olivier</span> le <span class="comment-date" property="schema:commentTime">16/12/2008</span> :
  237. </p>
  238. <div class="comment-content" property="schema:commentText">
  239. <p>Un minuscule détail: je ne mettrais pas de backslash du tout, si j&#39;étais toi. C&#39;est même recommandé dans la doc python: <a href="http://docs.python.org/howto/doanddont.html#using-backslash-to-continue-statements">http://docs.python.org/howto/doanddont.html#using-backslash-to-continue-statements</a></p>
  240. </div>
  241. </div>
  242. <div class="comment" typeof="schema:UserComments">
  243. <p class="comment-meta">
  244. <span class="comment-author" property="schema:creator">DecIRC</span> le <span class="comment-date" property="schema:commentTime">18/12/2008</span> :
  245. </p>
  246. <div class="comment-content" property="schema:commentText">
  247. <p>@vincent : un peu simpliste, non ? On demande pas le nombre de mots du texte mais le nombre d&#39;occurences de chaque mot.</p>
  248. <p>cEd</p>
  249. </div>
  250. </div>
  251. <div class="comment" typeof="schema:UserComments">
  252. <p class="comment-meta">
  253. <span class="comment-author" property="schema:creator">benoitc</span> le <span class="comment-date" property="schema:commentTime">21/12/2008</span> :
  254. </p>
  255. <div class="comment-content" property="schema:commentText">
  256. <p>oui en shell ce serait plutôt :</p>
  257. <p>sed -e &#39;s/\.//g&#39; -e &#39;s/\,//g&#39; -e &#39;s/ /\<br />/g&#39; /filepath | tr &#39;A-Z&#39; &#39;a-z&#39; | sort | uniq -c | sort -nr</p>
  258. </div>
  259. </div>
  260. </div>
  261. </section>
  262. <footer>
  263. <nav>
  264. <p>
  265. <small>
  266. Je réponds quasiment toujours aux <a href="m&#x61;ilto:d&#x61;vid%40l&#x61;rlet&#46;fr" title="Envoyer un email">emails</a> (<a href="/david/signature/" title="Ma signature actuelle avec possibilité de chiffrement">signés</a>) et vous pouvez me rencontrer à Montréal. <span class="more-infos">N’hésitez pas à <a href="/david/log/" title="Être tenu informé des mises à jour">vous abonner</a> pour être tenu informé des publications récentes.</span>
  267. </small>
  268. </p>
  269. </nav>
  270. </footer>
  271. </div>
  272. <script src="/static/david/js/larlet-david-3ee43f.js" data-no-instant></script>
  273. <script data-no-instant>InstantClick.init()</script>
  274. </body>
  275. </html>