Skip to content

Laboratoria/DEV015-text-analyzer

Repository files navigation

Analizador de texto

Índice


1. Consideraciones generales

  • Este proyecto lo resolvemos de manera individual.
  • El rango de tiempo estimado para completar el proyecto es de 2 a 4 Sprints.
  • Enfócate en aprender y no solamente en "completar" el proyecto.
  • Te sugerimos que no intentes saberlo todo antes de empezar a codear. No te preocupes demasiado ahora por lo que todavía no entiendas. Irás aprendiendo.

2. Preámbulo

Una lupa sobre texto de libro

Credito: Foto de ethan en Unsplash

Un analizador de texto es una aplicación para extraer información útil de un texto utilizando diversas técnicas, como el procesamiento del lenguaje natural (NLP), el aprendizaje automático (ML) y el análisis estadístico. Estas aplicaciones pueden proporcionar una variedad de métricas que brindan información básica sobre la longitud y la estructura del texto como por ejemplo, el conteo de palabras, el conteo de caracteres, el conteo de oraciones y el conteo de párrafos. Otras métricas incluyen el análisis de sentimientos, que utiliza técnicas de NLP para determinar el tono general positivo, negativo o neutral del texto, y el análisis de legibilidad, que utiliza algoritmos para evaluar la complejidad y la legibilidad del texto.

En general, las aplicaciones de análisis de texto brindan información valiosa y métricas sobre los textos que pueden ayudar a las usuarias a tomar decisiones informadas y sacar conclusiones significativas. Mediante el uso de estas herramientas de análisis, las usuarias pueden obtener una comprensión más profunda de los textos.

3. Resumen del proyecto

En este proyecto crearás una aplicación web que servirá para que tu usuaria pueda analizar un texto en el navegador mostrando una serie de indicadores y métricas específicas sobre caracteres, letras, números, etc. Que hayan sido enviadas como input por ella. Lo harás utilizando HTML, CSS y JavaScript.

4. Funcionalidades

El listado de funcionalidades es el siguiente:

  1. La aplicación debe permitir a la usuaria ingresar un texto escribiéndolo en un cuadro de texto.

  2. La aplicación debe calcular las siguientes métricas y actualizar el resultado en tiempo real a medida que la usuaria escribe su texto:

    • Recuento de palabras: la aplicación debe poder contar el número de palabras en el texto de entrada y mostrar este recuento a la usuaria
    • Recuento de caracteres: la aplicación debe poder contar el número de caracteres en el texto de entrada, incluidos espacios y signos de puntuación, y mostrar este recuento a la usuaria.
    • Recuento de caracteres excluyendo espacios y signos de puntuación: la aplicación debe poder contar el número de caracteres en el texto de entrada, excluyendo espacios y signos de puntuación, y mostrar este recuento a la usuaria.
    • Recuento de números: la aplicación debe contar cúantos números hay en el texto de entrada y mostrar este recuento a la usuaria.
    • Suma total de números: la aplicación debe sumar todos los números que hay en el texto de entrada y mostrar el resultado a la usuaria.
    • Longitud media de las palabras: la aplicación debe calcular la longitud media de las palabras en el texto de entrada y mostrársela a la usuaria.
  3. La aplicación debe permitir limpiar el contenido de la caja de texto haciendo clic en un botón.

Text analyzer demo

5. Boilerplate

La lógica del proyecto debe estar implementada completamente en JavaScript. En este proyecto NO está permitido usar librerías o frameworks, solo JavaScript puro también conocido como Vanilla JavaScript.

Para comenzar este proyecto tendrás que hacer un fork y clonar este repositorio que contiene un boilerplate con tests (pruebas). Un boilerplate es la estructura básica de un proyecto que sirve como un punto de partida con archivos y configuración inicial de dependencias y tests.

El boilerplate que les damos contiene esta estructura:

./
├── .babelrc
├── .editorconfig
├── .eslintrc
├── .gitignore
├── README.md
├── package.json
├── src
│   ├── analyzer.js
│   ├── index.html
│   ├── index.js
│   └── style.css
└── test
    ├── .eslintrc
    └── analyzer.spec.js

Descripción de scripts / archivos

  • README.md: debes modificarlo para explicar la información necesaria para el uso de tu aplicación web, así como una introducción a la aplicación, su funcionalidad y decisiones de diseño que tomaron.

  • .github/workflows: esta carpeta contine la configuracion para la ejecution de Github Actions. No debes modificar esta carpeta ni su contenido.

  • read-only/: esta carpeta contiene las pruebas de criterios mínimos de aceptación y end-to-end. No debes modificar esta carpeta ni su contenido.

  • src/index.html: este es el punto de entrada a tu aplicación. Este archivo debe contener tu HTML.

  • src/style.css: este archivo debe contener las reglas de estilo. Queremos que escribas tus propias reglas, por eso NO está permitido el uso de frameworks de CSS (Bootstrap, Materialize, etc).

  • src/analyzer.js: acá debes implementar el objeto analyzer, el cual ya está exportado en el boilerplate. Este objeto (analyzer) debe contener seis métodos:

    • analyzer.getWordCount(text): esta función debe retornar el recuento de palabras que se encuentran en el parámetro text de tipo string.
    • analyzer.getCharacterCount(text): esta función debe retornar el recuento de caracteres que se encuentran en el parámetro text de tipo string.
    • analyzer.getCharacterCountExcludingSpaces(text): esta función debe retornar el recuento de caracteres excluyendo espacios y signos de puntuación que se encuentran en el parámetro text de tipo string.
    • analyzer.getNumberCount(text): esta función debe retornar cúantos números se encuentran en el parámetro text de tipo string.
    • analyzer.getNumberSum(text): esta función debe retornar la suma de todos los números que se encuentran en el parámetro text de tipo string.
    • analyzer.getAverageWordLength(text): esta función debe retornar la longitud media de palabras que se encuentran en el parámetro text de tipo string. En este caso usa 2 dígitos decimales.

    Para ejemplo de uso de cada función recomendamos ver el archivo test/analyzer.spec.js.

    Nota: para simplificar las funcionalidades, definiremos las palabras como un grupos de caracteres separados por espacios. Por ejemplo las palabras del texto de entrada ¡Si, Tú puedes hacerlo! son cuatro:

    • ¡Si,
    • puedes
    • hacerlo!
  • src/index.js: acá debes escuchar eventos del DOM, invocar los métodos del objeto analyzer según sea necesario y actualizar el resultado en la UI (interfaz de usuaria).

  • test/analyzer.spec.js: este archivo contiene las pruebas unitarias para los métodos del objeto analyzer.


Deploy

Hacer que los sitios estén publicados (o desplegados) para que usuarias de la web puedan acceder a él es algo común en proyectos de desarrollo de software.

En este proyecto, utilizaremos Github Pages para desplegar nuestro sitio web.

El comando npm run deploy puede ayudarte con esta tarea y también puedes consultar su documentación oficial.

6. Criterios de aceptación mínimos del proyecto

A continuación encontrarás los criterios de aceptación mínimos del proyecto relacionados con cada objetivo de aprendizaje.

HTML

  • Uso de HTML semántico

    • La aplicación tiene un encabezado conformado por un <header> que es padre de un <h1> con texto Analizador de texto. Para que puedas practicar más, estos elementos no pueden tener atributos id, ni name, ni class.

    • La aplicación usa un <textarea> con un el atributo name en el valor user-input para permitir a la usuaria ingresar un texto. Para que puedas practicar más, este elemento no puede tener atributos id, ni class.

    • La aplicación usa un <ul> con 6 hijos <li>, uno para mostrar cada métrica. Para que puedas practicar más, estos elementos no pueden tener atributos id ni name ni hijos.

    • La aplicación tiene un pie de página conformado por un <footer> que es padre de un <p> que tiene como texto el nombre de la estudiante desarrolladora de la aplicación. Para que puedas practicar más, estos elementos no pueden tener atributos id, ni name, ni class.

    • La aplicación usa un <button> con el atributo id en el valor reset-button para permitir a la usuaria, mediante un clic, limpiar el contenido de la caja de texto.

CSS

Web APIs

  • Uso de selectores del DOM

  • Manejo de eventos del DOM (listeners, propagación, delegación)

    • La aplicación registra un Event Listener para escuchar el evento input del <textarea> para actualizar las métricas cuando se haga escriba en el cuadro de texto.

    • La aplicación registra un Event Listener para escuchar el evento click del <button> que limpia el contenido de la caja de texto.

  • Manipulación dinámica del DOM

    • La aplicación actualiza el atributo textContent o innerHTML de los <li> que mostrar las métricas del texto.

JavaScript

  • Tipos de datos primitivos

    • La aplicación convierte valores tipo string a tipo number.
  • Strings (cadenas de caracteres)

    • La aplicación usa métodos para manipular strings como split, trim o replace.
  • Variables (declaración, asignación, ámbito)

    • La aplicación declara variables con let y const.

    • La aplicación NO declara variables con var.

  • Uso de condicionales (if-else, switch, operador ternario, lógica booleana)

    • La aplicación usa el statement if..else para evaluar condiciones.
  • Uso de bucles/ciclos (while, for, for..of)

    • La aplicación usa el statement for para crear un bucle.
  • Funciones (params, args, return)

    • El objeto analyzer contiene un método getWordCount para calcular el recuento de palabras de un texto.

    • El objeto analyzer contiene un método getCharacterCount para calcular el recuento de caracteres de un texto.

    • El objeto analyzer contiene un método getCharacterCountExcludingSpaces para calcular el recuento de caracteres excluyendo espacios y signos de puntuación de un texto.

    • El objeto analyzer contiene un método getNumbersCount para contar cúantos números hay en un texto.

    • El objeto analyzer contiene un método getNumbersSum para la suma longitud media de los números en un texto.

    • El objeto analyzer contiene un método getAverageWordLength para calcular la longitud media de las palabras en un texto.

  • Pruebas unitarias (unit tests)

    • Pasan las pruebas unitarias.
  • Módulos de ECMAScript (ES Modules)

    • La aplicación usan import y export para importar y exportar valores desde un modulo JavaScript.
  • Uso de linter (ESLINT)

    • Al ejecutar el linter no se muestran errores de formato y estilo.
  • Uso de identificadores descriptivos (Nomenclatura y Semántica)

    • En el código se utilizan identificadores descriptivos para variables y funciones.

Control de Versiones (Git y GitHub)

  • GitHub: Creación de cuenta y repos, configuración de llaves SSH

    • La estudiante creó una cuenta en Github.

    • La estudiante configuró su cuenta de Github con una llave SSH.

  • Git: Control de versiones con git (clone, add, commit, push)

    • La estudiante creó un fork para su proyecto.

    • La estudiante clonó su repositorio usando una llave SSH.

    • La estudiante creó commits y los guardó en Github.

  • GitHub: Despliegue con GitHub Pages

    • La aplicación está desplegada en Github Pages.

Centrado en la usuaria

  • Diseñar y desarrollar un producto o servicio poniendo a las usuarias en el centro

Diseño de producto

  • Diseñar en distintos niveles de fidelidad

    • La estudiante creó prototipos de baja fidelidad para la UI (interfaz gŕafica).
  • Seguir los principios básicos de diseño visual

    • Se tuvieron en cuenta las reglas básica del diseño visual para diseñar la UI (interfáz gráfica)

7. Pruebas

Este proyecto cuenta con 3 conjuntos de pruebas que te ayudarán a conocer si cumples los criterios mínimos de aceptación.

Ejecuta las pruebas mientras desarrolla para confirmar que tu proyecto está logrando los objetivos. Si algunas pruebas no pasan, no permitas que esto te impida avanzar o finalizar el proyecto. Utiliza esta información para ver qué necesitas investigar y cambiar en tu código, y consulta con tu coach cualquier objetivo que tengas pendiente.

Pruebas unitarias

Una prueba unitaria es una técnica de prueba de software en la que se comprueba que cada componente individual de un programa o sistema funciona correctamente de manera aislada. En otras palabras, se prueba cada unidad de código por separado para asegurarse de que cumpla con los requisitos y especificaciones.

Las pruebas unitarias de este proyecto ejecutarán los métodos getWordCount, getCharacterCount, getCharacterCountExcludingSpaces, getNumbersCount, getNumbersSum y getAverageWordLength con diferentes argumentos y se confirmará que los valores retornados sean los esperados.

Puedes ejecutar estas pruebas con el comando npm run test como se muestra en la siguiente imagen:

npm run test

El boilerplate incluye tareas que ejecutan eslint y htmlhint para verificar el HTML y JavaScript con respecto a una guías de estilos. Ambas tareas se ejecutan automáticamente antes de ejecutar las pruebas unitarias cuando usamos el comando npm run test. En el caso de JavaScript estamos usando un archivo de configuración de eslint que se llama .eslintrc que contiene un mínimo de información sobre el parser que usar (qué version de JavaScript/ECMAScript), el entorno (browser en este caso) y las reglas recomendadas (eslint:recommended). En cuanto a reglas/guías de estilo en sí, usaremos las recomendaciones por defecto de tanto eslint como htmlhint.

Pruebas de criterios mínimos de aceptación

Estas pruebas analizarán tus archivos index.html, index.js, analyzer.js y style.css para verificar que cumples con los criterios minimos de aceptacion. Cada criterio esta relacionado con un objetivo de aprendizaje.

Puedes ejecutar todas estas pruebas con el comando npm run test:oas como se muestra en la siguiente imagen:

npm run test oas

Puedes ejecutar las pruebas de cada grupo de objetivos de aprendizaje de manera individual con los siguientes comandos:

  • npm run test:oas-html
  • npm run test:oas-css
  • npm run test:oas-web-api
  • npm run test:oas-js

Pruebas end-to-end

Una prueba end-to-end (E2E) es una técnica de prueba de software en la que se verifica el funcionamiento de todo el sistema desde el inicio hasta el final. En otras palabras, se prueba el flujo completo del software, simulando la interacción de la usuaria con la aplicación, para asegurarse de que todas las partes del sistema funcionan correctamente en conjunto.

Puedes ejecutar estas pruebas con el comando npm run test:e2e como se muestra en la siguiente imagen:

npm run test e2e

Para que los tests end-to-end (e2e) puedan evaluar el flujo, es necesario contar con acceso a determinados elementos en la página. Este acceso se logra agregando un atributo data-testid. Por este motivo, es necesario agregar lo siguiente:

  • El <li> para mostrar el recuento de palabras debe tener un atributo data-testid con valor word-count.

  • El <li> para mostrar el recuento de caracteres debe tener un atributo data-testid con valor character-count.

  • El <li> para mostrar el recuento de caracteres excluyendo espacios y signos de puntuación debe tener un atributo data-testid con valor character-no-spaces-count.

  • El <li> para mostrar el recuento de números debe tener un atributo data-testid con valor number-count.

  • El <li> para mostrar la suma total de números debe tener un atributo data-testid con valor number-sum.

  • El <li> para mostrar la longitud media de palabras debe tener un atributo data-testid con valor word-length-average.

Github actions

Este repositorio usa una GitHub Action para ejecutar automáticamente las pruebas unitarias, pruebas de criterios mínimos de aceptación y y pruebas end-to-end cada vez que se hagas un push en la rama main de tu repositorio.

Puedes consultar el resultado de esta Github Action en la pestaña Actions de tu repositorio en Github como se muestra en la siguiente imagen:

Github Action

8. Pistas, tips y lecturas complementarias

Prepara tu PC para trabajar

Antes de comenzar instala lo siguiente:

  1. Node.js
  2. git Si estas en Linux es muy probable que ya este instalado 👀. Para conocer más de git visita este enlace
  3. Un editor de código, te sugerimos Code

Después en GitHub:

  1. Crear una cuenta. Conoce más de GitHub en este link
  2. Realiza un fork de este proyecto
  3. Configura tu SSH Key en GitHub. Puedes revisar este video o artículo

Luego en una shell ejecuta lo siguiente. Si estas en Windows puedes usar Git Bash:

  1. Clona el fork en tu PC
  2. Ubica la shell en el proyecto que clonaste
  3. Instala las dependencias del proyecto con npm install
  4. Instala playwright con npx playwright install chromium --with-deps
  5. Para arrancar el servidor web npm start y dirígete a http://localhost:3000 en tu navegador.
  6. A codear se ha dicho! 🚀

Recursos y temas relacionados

Súmate al canal de Slack #project-text-analyzer

9. Consideraciones para pedir tu Project Feedback

Antes de agendar tu Project Feedback con tu coach, asegúrate de que tu proyecto:

  • Cumple los criterios mínimos de aceptación al ejecutar npm run test:oas
  • Cumple las pruebas unitarias al ejecutar npm run test
  • Cumple las pruebas end to end al ejecutar npm run test:e2e
  • Está libre de errores de eslint al ejecutar npm run test
  • Está subido a GitHub.
  • Está desplegado en GitHub Pages.
  • Tiene un README con la definición del producto.

No es necesario que todas las pruebas pasen con 100% para poder tener tu Project Feedback. El objetivo de los tests no es bloquearte, pero es importante que comprendas qué objetivos tienes pendientes y discutas con tu coach si alguno de ellos es crucial para lograrlo antes de tu Project Feedback.

Recuerda que debes hacer una autoevaluación de objetivos de aprendizaje y life skills desde tu dashboard de estudiante.

10. Objetivos de aprendizaje

Reflexiona y luego marca los objetivos que has llegado a entender y aplicar en tu proyecto. Piensa en eso al decidir tu estrategia de trabajo.

HTML

CSS

Web APIs

DOM (Document Object Model)

JavaScript

  • Uso de linter (ESLINT)

  • Uso de identificadores descriptivos (Nomenclatura y Semántica)

Tipos de datos

Testing en Javascript

Módulos

Control de Versiones (Git y GitHub)

Git

  • Git: Instalación y configuración

  • Git: Control de versiones con git (init, clone, add, commit, status, push, pull, remote)

GitHub

Centrado en el usuario

  • Diseñar y desarrollar un producto o servicio poniendo a las usuarias en el centro

Diseño de producto

  • Diseñar en distintos niveles de fidelidad

  • Seguir los principios básicos de diseño visual

11. Funcionalidades opcionales

Si terminaste con todas las funcionalidades requeridas, intenta implementar las siguientes funcionalidades opcionales para profundizar en los objetivos de aprendizaje del proyecto:

  • Que el recuento de palabras y caracteres sea 0 para una entrada de texto vacía.
  • Que el recuento de palabras y caracteres sea 0 para una entrada de texto con solo espacios.
  • Que el recuento de palabras y caracteres sea 0 para una entrada de texto con solo caracteres de puntuación.

Puedes habilitar las pruebas unitarias y en end to end de estos casos en los archivos test/analyzer.spec.js y read-only/test/e2e/app.spec.js. También tendrás que ajustar las pruebas ya existentes de las funcionalidades requeridas.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published