Coder Social home page Coder Social logo

silabareo's Introduction

Silabareo

Utilitarios para generar palabras separadas en sílabas y construcción de diccionario para Plover.

Generación de reglas de silabación

$ python3 tex_syllabation_rules_gen.py build/patterns.txt
$ perl utils/substrings.pl build/patterns.txt build/patterns_for_hyphen.txt UTF-8 1 1
$ python3 utils/hyphenate.py <palabra>
  • tex_syllabation_rules_gen.py implementa las reglas de separación silábica encontradas aquí 6.2 Reglas de silabación.
  • utils/substrings.pl se toma originalmente del proyecto Hunspell, este script perl se encarga de convertir los patrones generados por tex_syllabation_rules_gen.py (que es un formato patgen de TeX) al formato de Libhnj, que entiende utils/hyphenate.py.
  • utils/hyphenate.py es una adaptación del original encontrado en el proyecto RLA-ES. La clase Hyphenator permite separar una palabra de acuerdo a los patrones recibidos.

Silabación ajustada

Llegado este punto, tenemos una separación en sílabas bastante robusta, pero aún no está completa debido a una serie de casuísticas difícles de implementar en formato de patrones sin que colisionen entre sí. Recurriremos al script syllabation_adjustment.py para hacer estos ajustes.

$ python3 syllabation_adjustment.py <palabra>

El resultado debería ser una separación silábica final basada (mayormente) en la fonética de la palabra, por ejemplo: "postdata" -> "pos-da-ta", la t es descartada, ya que en la mayoría de los casos no sumaría a la definición de la sílaba para asignarle su acorde en Plover, el cual quedaría así "POS/TKA/TA": "postdata".

Generación de diccionario Plover

En base a las herramientas mencionadas en pasos anteriores, creamos el script plover_spanish_dict_gen.py. Este se encargará de hacer la traducción de las sílabas de las palabras que le pasemos a su correspondiente acorde, teniendo en cuenta las reglas definidas en plover_system_spanish_eo_variant.

Aparte de generar el diccionario final, adicionalmente genera dos posibles archivos: uno con fallas de traducción (no consiguió aplicar las reglas del plugin) y otro con colisiones detectadas (debido a las reglas del plugin, más de una palabra coincide con el mismo acorde).

Estos archivos deberán tenerse en cuenta para un análisis posterior y ayudarán a determinar si este script (o los pasos anteriores) contienen casos no considerados, o bien hay que procesar entradas manualmente por la vía de la excepción.

Una ejecución de prueba sobre un corpus de 100 mil palabras mostró un 6.6% de fallas de traducción y un 2,3% de colisiones. La intención es reducir este porcentaje al mínimo por medio de:

  • Utilización de corpus con entradas más limpias
  • Verificación de reglas de silabació faltanes/erróneas
  • Posibles adaptaciones de reglas del plugin del sistema en español

Agrego un pequeño archivo de pruebas denominado mini_corpus_test.txt en el repositorio sólo para verificar su funcionamiento.

La salida principal es un diccionario .json con los acordes correspondientes de las palabras del corpus. Con la depuración apropiada de estas entradas, el diccionario se puede publicar como parte del diccionario principal del plugin plover_spanish_system_eo_variant.

Testing

$ python3 tests/syllabation_test.py
$ python3 tests/syllabation_adjustment_test.py

Referencias

TO-DO

  • Aplicar reglas de compactación para generar acordes complementarios, según reglas/sugerencias del plugin plover_spanish_system_eo_variant, ejemplo: "PO/HREU/TEU/KA":"política", se puede complementar con una entrada más corta, "PO/HREU/TEUBG":"política"
  • Considerar la inclusión de reglas de presilabación para palabras excepcionales, ver 6.8. Reglas de presilabación: PRESILAB.

Agradecimientos

  • En especial a Santiago Bosio (RLA-ES) por tirarme la punta de ovillo para poder encontrar un enfoque más apropiado.
  • spaniard, roalheva, defunkydrummer y nvdaes de la comunidad de Plover <3

silabareo's People

Contributors

roskoff avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

silabareo's Issues

Construcción de diccionario para Plover (sistema 'normal')

Hola, escribo de manera regular en tres idiomas: Inglés, Español (~50%) y Alemán.

Para Inglés estoy usando Plover; pero quiero usar Plover también para escribir en Español (y más en el futuro, en Alemán...).

Obviamente, no me conviene usar 3 diferentes sistemas; por lo tanto, quiero usar el sistema de Inglés también para los otros idiomas y solo generar diccionarios diferentes. Estoy consiente, que esto no es ideal, pero sería una solución práctica..

Con los scripts de silabreo: ¿Cómo puedo generar un diccionario para Plover y el sistema Inglés estándar; p.ej. usando el diccionario de hunspell como base?

Gracicas! Robert

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.