{"id":272,"date":"2021-03-18T19:24:06","date_gmt":"2021-03-18T18:24:06","guid":{"rendered":"https:\/\/www.pythonparatodo.com\/?p=272"},"modified":"2021-03-19T17:01:45","modified_gmt":"2021-03-19T16:01:45","slug":"contando-palabras","status":"publish","type":"post","link":"https:\/\/www.pythonparatodo.com\/?p=272","title":{"rendered":"Contar palabras con Python 3"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Vamos a contar las palabras de un fichero de texto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para ello tenemos el fichero de texto <strong>\u201ccitas.txt\u201d<\/strong> que contiene el siguiente texto:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>No hay que ir para atr\u00e1s ni para darse impulso.<\/p><p>Es sencillo hacer que las cosas sean complicadas, pero dif\u00edcil hacer que sean sencillas.<\/p><p>Haz el amor y no la guerra.<\/p><p>Cada d\u00eda sabemos m\u00e1s y entendemos menos.<\/p><p>Conocer a otros es inteligencia, conocerse a s\u00ed mismo es sabidur\u00eda. Manejar a otros es fuerza, manejarse a s\u00ed mismo es verdadero poder.<\/p><p>Ning\u00fan hombre es lo bastante bueno para gobernar a otros sin su consentimiento.<\/p><p>El camino m\u00e1s noble no es someter a los dem\u00e1s, sino perfeccionarse a uno mismo.<\/p><p>El orgullo divide a los hombres, la humildad los une.<\/p><p>El m\u00e1s rico es quien se contenta con poco.<\/p><\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Lo primero que vamos a hacer es abrir el fichero e ir leyendo l\u00ednea por l\u00ednea para ir procesando su contenido. Para esto vamos a hacer uso de&nbsp;<strong>open()<\/strong>&nbsp;de la siguiente forma:<\/p>\n\n\n\n<pre class=\"wp-block-code has-normal-font-size\"><code lang=\"python\" class=\"language-python\">with open('\/citas.txt','r') as fichero:\n&nbsp;&nbsp;&nbsp;&nbsp;for linea in fichero:\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# aqu\u00ed va nuestro c\u00f3digo para contar<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Como podemos encontrar s\u00edmbolos unidos a las palabras, tenemos que crear una lista con estos y eliminarlos para que no causen problemas al contar.<\/p>\n\n\n\n<pre class=\"wp-block-code has-normal-font-size\"><code lang=\"python\" class=\"language-python\">simbolos = ['\u00bf','?','.','.',';',':','\u00a1','!']<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Podremos usar el m\u00e9todo&nbsp;<strong>replace()<\/strong>&nbsp;del objeto string para cada uno de los s\u00edmbolos de la lista en cada l\u00ednea que leamos. A este m\u00e9todo le vamos a pasar dos par\u00e1metros, el s\u00edmbolo a buscar y el caracter que lo reemplazar\u00e1. Para ello usaremos un bucle&nbsp;<strong>for in<\/strong>&nbsp;de la siguiente forma:<\/p>\n\n\n\n<pre class=\"wp-block-code has-normal-font-size\"><code lang=\"python\" class=\"language-python\">simbolos = ['\u00bf','?','.','.',';',':','\u00a1','!']\nwith open('\/citas.txt','r') as fichero:\n&nbsp;&nbsp;&nbsp;&nbsp;for linea in fichero:\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for simbolo in simbolos:\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;linea = linea.replace(simbolo,' ')<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Luego separaremos las palabras usando el m\u00e9todo split() pas\u00e1ndole el caracter por el que queramos dividir o no poni\u00e9ndolo si queremos que sea el espacio.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"python\" class=\"language-python\">palabras = linea.split()<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">As\u00ed obtenemos una lista de palabras por cada l\u00ednea que podemos contar incrementando el valor de una variable, por ejemplo:<\/p>\n\n\n\n<pre class=\"wp-block-code has-normal-font-size\"><code lang=\"python\" class=\"language-python\">numpalabras += 1<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Quedando el c\u00f3digo final de la siguiente forma:<\/p>\n\n\n\n<pre class=\"wp-block-code has-normal-font-size\"><code lang=\"python\" class=\"language-python\">simbolos = ['\u00bf','?','.','.',';',':','\u00a1','!']\nnumpalabras = 0\nwith open('.\/citas.txt','r') as fichero:\n&nbsp;&nbsp;&nbsp;&nbsp;for linea in fichero:\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for simbolo in simbolos:\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;linea = linea.replace(simbolo,' ')\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;palabras = linea.split()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for palabra in palabras:\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;numpalabras += 1\nprint('El texto contiene %s palabras' %numpalabras)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Si adem\u00e1s queremos saber cuantas veces se han repetido cada una de las palabras podemos crear un diccionario donde almacenar la palabra como clave y las repeticiones como valor. Para esto tenemos que modificar un poco el c\u00f3digo anterior a\u00f1adiendo el diccionario:<\/p>\n\n\n\n<pre class=\"wp-block-code has-normal-font-size\"><code lang=\"python\" class=\"language-python\">dpalabras = dict()<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Y creando los elementos del diccionario con cada una de las palabras e incrementando el valor cada vez que cada una de ellas se repita. Para evitar comprobar si el elemento ya existe en el diccionario usaremos el m\u00e9todo get() que permite indicar un valor por defecto si el elemento no existiera. As\u00ed, cuando encontremos una palabra, si la clave no existe tomar\u00e1 el valor de 0 + 1 y si existe el valor existente + 1.<\/p>\n\n\n\n<pre class=\"wp-block-code has-normal-font-size\"><code lang=\"python\" class=\"language-python\">dpalabras[palabra] = dpalabras.get(palabra ,&nbsp;0) +&nbsp;1<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Con este arreglo nuestro c\u00f3digo quedar\u00eda de la siguiente forma:<\/p>\n\n\n\n<pre class=\"wp-block-code has-normal-font-size\"><code lang=\"python\" class=\"language-python\">simbolos = ['\u00bf','?','.','.',';',':','\u00a1','!']\nnumpalabras = 0\ndpalabras = dict()\nwith open('.\/citas.txt','r') as fichero:\n&nbsp;&nbsp;&nbsp;&nbsp;for linea in fichero:\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for simbolo in simbolos:\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;linea = linea.replace(simbolo,' ')\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;palabras = linea.split()\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for palabra in palabras:\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;numpalabras += 1\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dpalabras[palabra] = dpalabras.get(palabra , 0) + 1\nprint('El texto contiene %s palabras' %numpalabras)\nprint('Las palabras se han repetido de la siguiente forma:')\nfor palabra in dpalabras:\n&nbsp;&nbsp;&nbsp;&nbsp;veces = 'veces'\n&nbsp;&nbsp;&nbsp;&nbsp;if dpalabras[palabra] == 1:\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;veces = 'vez'\n&nbsp;&nbsp;&nbsp;&nbsp;print('La palabra \"%s\" se ha repetido %s %s' %(palabra, dpalabras[palabra], veces))<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Y el resultado obtenido ser\u00eda el siguiente:<\/p>\n\n\n\n<pre class=\"wp-block-code has-normal-font-size\"><code lang=\"python\" class=\"language-python\">El texto contiene 108 palabras\nLas palabras se han repetido de la siguiente forma:\nLa palabra \"No\" se ha repetido 1 vez\nLa palabra \"hay\" se ha repetido 1 vez\nLa palabra \"que\" se ha repetido 3 veces\nLa palabra \"ir\" se ha repetido 1 vez\nLa palabra \"para\" se ha repetido 3 veces\nLa palabra \"atr\u00e1s\" se ha repetido 1 vez\nLa palabra \"ni\" se ha repetido 1 vez\nLa palabra \"darse\" se ha repetido 1 vez\nLa palabra \"impulso\" se ha repetido 1 vez\nLa palabra \"Es\" se ha repetido 1 vez\nLa palabra \"sencillo\" se ha repetido 1 vez\nLa palabra \"hacer\" se ha repetido 2 veces\nLa palabra \"las\" se ha repetido 1 vez\nLa palabra \"cosas\" se ha repetido 1 vez\nLa palabra \"sean\" se ha repetido 2 veces\nLa palabra \"complicadas,\" se ha repetido 1 vez\nLa palabra \"pero\" se ha repetido 1 vez\nLa palabra \"dif\u00edcil\" se ha repetido 1 vez\nLa palabra \"sencillas\" se ha repetido 1 vez\nLa palabra \"Haz\" se ha repetido 1 vez\nLa palabra \"el\" se ha repetido 1 vez\nLa palabra \"amor\" se ha repetido 1 vez\nLa palabra \"y\" se ha repetido 2 veces\nLa palabra \"no\" se ha repetido 2 veces\nLa palabra \"la\" se ha repetido 2 veces\nLa palabra \"guerra\" se ha repetido 1 vez\nLa palabra \"Cada\" se ha repetido 1 vez\nLa palabra \"d\u00eda\" se ha repetido 1 vez\nLa palabra \"sabemos\" se ha repetido 1 vez\nLa palabra \"m\u00e1s\" se ha repetido 3 veces\nLa palabra \"entendemos\" se ha repetido 1 vez\nLa palabra \"menos\" se ha repetido 1 vez\nLa palabra \"Conocer\" se ha repetido 1 vez\nLa palabra \"a\" se ha repetido 8 veces\nLa palabra \"otros\" se ha repetido 3 veces\nLa palabra \"es\" se ha repetido 7 veces\nLa palabra \"inteligencia,\" se ha repetido 1 vez\nLa palabra \"conocerse\" se ha repetido 1 vez\nLa palabra \"s\u00ed\" se ha repetido 2 veces\nLa palabra \"mismo\" se ha repetido 3 veces\nLa palabra \"sabidur\u00eda\" se ha repetido 1 vez\nLa palabra \"Manejar\" se ha repetido 1 vez\nLa palabra \"fuerza,\" se ha repetido 1 vez\nLa palabra \"manejarse\" se ha repetido 1 vez\nLa palabra \"verdadero\" se ha repetido 1 vez\nLa palabra \"poder\" se ha repetido 1 vez\nLa palabra \"Ning\u00fan\" se ha repetido 1 vez\nLa palabra \"hombre\" se ha repetido 1 vez\nLa palabra \"lo\" se ha repetido 1 vez\nLa palabra \"bastante\" se ha repetido 1 vez\nLa palabra \"bueno\" se ha repetido 1 vez\nLa palabra \"gobernar\" se ha repetido 1 vez\nLa palabra \"sin\" se ha repetido 1 vez\nLa palabra \"su\" se ha repetido 1 vez\nLa palabra \"consentimiento\" se ha repetido 1 vez\nLa palabra \"El\" se ha repetido 3 veces\nLa palabra \"camino\" se ha repetido 1 vez\nLa palabra \"noble\" se ha repetido 1 vez\nLa palabra \"someter\" se ha repetido 1 vez\nLa palabra \"los\" se ha repetido 3 veces\nLa palabra \"dem\u00e1s,\" se ha repetido 1 vez\nLa palabra \"sino\" se ha repetido 1 vez\nLa palabra \"perfeccionarse\" se ha repetido 1 vez\nLa palabra \"uno\" se ha repetido 1 vez\nLa palabra \"orgullo\" se ha repetido 1 vez\nLa palabra \"divide\" se ha repetido 1 vez\nLa palabra \"hombres,\" se ha repetido 1 vez\nLa palabra \"humildad\" se ha repetido 1 vez\nLa palabra \"une\" se ha repetido 1 vez\nLa palabra \"rico\" se ha repetido 1 vez\nLa palabra \"quien\" se ha repetido 1 vez\nLa palabra \"se\" se ha repetido 1 vez\nLa palabra \"contenta\" se ha repetido 1 vez\nLa palabra \"con\" se ha repetido 1 vez\nLa palabra \"poco\" se ha repetido 1 vez<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Vamos a contar las palabras de un fichero de texto. Para ello tenemos el fichero de texto \u201ccitas.txt\u201d que contiene &hellip; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[118,2,6,116,117],"class_list":["post-272","post","type-post","status-publish","format-standard","hentry","category-python","tag-dict","tag-python","tag-python3","tag-replace","tag-split-2"],"_links":{"self":[{"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=\/wp\/v2\/posts\/272","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=272"}],"version-history":[{"count":3,"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=\/wp\/v2\/posts\/272\/revisions"}],"predecessor-version":[{"id":275,"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=\/wp\/v2\/posts\/272\/revisions\/275"}],"wp:attachment":[{"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=272"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=272"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=272"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}