collapse

* Posts Recentes

Tutorial on How to Make a Text Editor por blabla
[21 de Maio de 2022, 08:33]


3 micro palestras recentes sobre Embedded Rust. por blabla
[20 de Maio de 2022, 18:45]


StringUtils - Easy to use Strings in Rust por blabla
[19 de Maio de 2022, 22:37]


LASER M140 por dropes
[19 de Maio de 2022, 20:00]


Craftsmanship em pianos e em tudo o resto... por blabla
[15 de Maio de 2022, 17:20]


Um artigo interessante - Building a startup with Rust por blabla
[13 de Maio de 2022, 10:55]


Um ritual de passagem - Fazer um interpretador de LISP por blabla
[13 de Maio de 2022, 09:51]


Cabo espiral por josecarlos
[08 de Maio de 2022, 19:23]


Can Life Really Be Explained By Physics? por blabla
[07 de Maio de 2022, 13:41]


100 Computer Science Concepts Explained por blabla
[04 de Maio de 2022, 21:34]

Autor Tópico: Keyboard - A promessa de se atingir 500+WPM - Words Per Minute  (Lida 247 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline blabla

  • Mini Robot
  • *
  • Mensagens: 211
Bom dia a todos,

Hoje gostava de vos trazer um tema que foi levantado num artigo do Hackaday sobre um produto que é relativamente simples e que é muito interessante por aquilo que ele promete. Isto apesar de ainda não existir muita documentação técnica sobre ele. Mas de facto o ter um teclado em que uma pessoa dita “normal” conseguisse introduzir num teclado mais do que 500 palavras por minuto seria algo mesmo muito impressionante. Quanto mais não seja para escrever emails e documentação em que o conseguir escrever à velocidade do pensamento seria algo de útil. Pelo menos o escrever pois existe sempre uma fase de revisão de qualquer texto que está sempre inerente e nessa fase este método já não é tão aplicável, mas a GUI de que falo no final poderia ajudar também nessa fase final não tornando o processo de correção automática prévio numa caixa negra.

Vejam o artigo e leiam os comentários que acho que tal como eu vão achar interessante.

O que eu estou aqui a chamar a atenção é para o conceito e não para o produto em si. Pois vejo o produto somente como uma implementação do conceito.

The CharaChorder keyboard is too fast for competition
https://hackaday.com/2022/01/12/the-charachorder-keyboard-is-too-fast-for-competition/

Este artigo colocou-me inclusive a pensar em formas de conseguir escrever em Português mais rapidamente num teclado dito normal (mas nada que se pareça com 500+WPM ). E ontem já fiz o primeiro desenvolvimento nesse sentido. Ainda é só uma peça da engrenagem os digrams em pt_PT e a extração de um ficheiro de word frequency, mas já é um inicio.

Generation of word digrams 2 grams pt_PT in Rust
https://github.com/joaocarvalhoopen/Gen_word_digrams_2_grams_pt_PT_in_Rust

A minha ideia (que não deve ter nada de novo, mas que tem alguma novidade para mim) é de tentar fazer correção automática com possível guidance na revisão de texto com base na lib de dicionário lib SymSpell reimplementada em Rust (que já existe) a partir da original em C# (vejam referencias em baixo). Esta já vem com dicionários para várias linguagens mas não vem para pt_PT. Ela necessita de um ficheiro com digramas e necessita de um ficheiro com word frequencies, neste caso para pt_PT. A minha maior questão é que quando se tenta escrever muito rápido uma pessoa começa a aumentar o seu número de erros, pois a precisão no precionar das teclas diminui muito. A ideia seria corrigir esses erros automaticamente numa GUI e assim conseguir manter velocidades elevadas de introdução de texto. (Nota: Não sei se é possível, mas não custa nada tentar)

A ideia básica do dicionário SymSpell é que para além de ser muito rápido ele consegue corrigir as palavras ortograficamente que estejam corretamente separadas e atribuir-lhes uma probabilidade (top lista de sugestões), mas também consegue corrigir uma frase com base não só nas palavras já corrigidas mas também na sequência de probabilidade de uma palavra aparecer à seguir a outra palavra e de assim escolher a palavra correta o que aumentaria em muito a precisão da escolha da palavra corrigida. Para além disso ele consegue também corrigir corretamente erros de divisão de entre palavras coisas como “maisd oe que” para “mais do que” ou algo assim. E no caso de frases ele pode dar um top de lista de frases corretas que uma pessoa possa substituir na fase da revisão do texto (isto seria um suporte que a minha GUI Open Source tentaria fazer).

Atenção, o Sym Spell isto é somente uma lib para substituir/corrigir strings, por estou a pensar em desenvolver uma GUI com egui em Rust (de principio no inicio seria Linux e acho que Windows, mas em principio poderia também funcionar em Mac e em Raspberry Pi) para que fosse um local onde se tentaria escrever mais rapidamente e depois com uma única combinação de teclas ou click num botão passar para o texto final já corrigido como se fosse um copy and paste. Isto teria uma split screen com duas áreas de texto uma com o texto introduzido e outra com o texto sincronizado corrigido e as palavras nas frases teriam um esquema que espero que seja inteligente de cores (com fundo preto ou escuro para ser mais fácil nos olhos e para ser bom para disléxicos) que chamassem a atenção clara para as palavras que tinham erros (ou seja as que não tinham uma palavra conhecida (tanto no texto por corrigir como no corrigido) e as que tinham sido substituídas), uma forma rápida de navegar entre essas palavras (carregando numa única tecla para saltar entre palavras que tivessem erros) e uma forma rápida de se ver as palavras corretas que seriam sugeridas tipo top lista para essa palavra, ordenadas por probabilidade. Bem como os split’s entre as palavras.

No passado eu já fiz um pequeno projeto que tentava ser uma ferramenta de dicionário para Português e Inglês em C# para Windows, mas nesse usei outras técnicas (nomeadamente portei e estendi para português um algoritmo do Peter Norvig para fazer um dicionário) e penso que estas novas técnicas teriam algumas vantagens por considerarem a frase como um todo e por conseguir dividir as palavras, posicionamento correto dos espaços entre as palavras. Para além de que os meus digrams atuais são de melhor qualidade do que eram nessa altura. Apesar do texto ser o mesmo. Esta é uma das vantagens de voltar a trabalhar numa ideia de que já pensamos ou trabalhamos uma vez no passado :-)

O meu ultimo esforço já com uns anos em C# e para Windows foi este:

USB SpellChecker GUI in C Sharp
https://github.com/joaocarvalhoopen/USB_SpellChecker_GUI_in_C_Sharp


Referencias:

Introducing CharChorder Lite: Now Live on Kickstarter!



CharaChorder Review - 6 days in



KickStarter – charachorder lite type at the speed of thought
https://www.kickstarter.com/projects/adan-arriaga/charachorder-lite-type-at-the-speed-of-thought

Peter Norvig - How to Write a Spelling Corrector
http://norvig.com/spell-correct.html

Open Steno Project
http://www.openstenoproject.org/

Procurem por
Art of Chording’s examples,

or Mirabai Knight’s original talk

“Ah, I see you're betting that the majority of buyers won't know that all you need for chorded input is NKRO, which most mid-high range keyboards have.”
Teclados rápidos em que uma tecla é registada rapidamente se o teclado tiver esta característica. Isto veio de um comentário de um dos vídeos deles.

GitHub wolfgarbe  SymSpell
https://github.com/wolfgarbe/symspell

Ports para várias linguagens do algoritmo anterior
https://github.com/wolfgarbe/SymSpell#ports

Projecto Natura da Universidade do Minho
Quem mantêm o projeto do dicionário do HunSpell em pt_PT
https://natura.di.uminho.pt/wiki/doku.php?id=dicionarios:main

Lista de palavras em pt_PT do Projecto Natura – Quase 1 milhão
https://natura.di.uminho.pt/download/sources/Dictionaries/wordlists/

Este tem um repositório de frequências para 50K palavras Portuguesas
Repository for Frequency Word List Generator and processed files
https://github.com/hermitdave/FrequencyWords

SymSpell Implementação em Rust do original em C#, Versão recente
https://github.com/reneklacan/symspell
(Version 6.6, compiles to WebAssembly)

O que faz o SymSpell:
   -Single word spelling correction
   -Compound aware multi-word spelling correction
   -Word Segmentation of noisy text
   -Frequency dictionary

Rust bindings for Hunspell
https://github.com/drahnr/hunspell-rs

Wikipedia - Edit distance
https://en.wikipedia.org/wiki/Edit_distance

Wikipedia - Damerau–Levenshtein distance
https://en.wikipedia.org/wiki/Damerau%E2%80%93Levenshtein_distance

egui: an easy-to-use GUI in pure Rust
https://github.com/emilk/egui

Can I use predictive text on my PC to save typing?
https://www.theguardian.com/technology/askjack/2018/dec/06/can-i-use-predictive-text-pc-app-windows-10

The Pruning Radix Trie — a Radix Trie on steroids
https://seekstorm.com/blog/pruning-radix-trie/

Exemplo de um software comercial.
Typing Assistant
https://www.sumitsoft.com/

Obrigado,

Cumprimentos,
João
« Última modificação: 16 de Janeiro de 2022, 15:25 por blabla »