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 competitionhttps://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 Rusthttps://github.com/joaocarvalhoopen/Gen_word_digrams_2_grams_pt_PT_in_RustA 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 Sharphttps://github.com/joaocarvalhoopen/USB_SpellChecker_GUI_in_C_SharpReferencias:Introducing CharChorder Lite: Now Live on Kickstarter!CharaChorder Review - 6 days inKickStarter – charachorder lite type at the speed of thoughthttps://www.kickstarter.com/projects/adan-arriaga/charachorder-lite-type-at-the-speed-of-thoughtPeter Norvig - How to Write a Spelling Correctorhttp://norvig.com/spell-correct.htmlOpen Steno Projecthttp://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
SymSpellhttps://github.com/wolfgarbe/symspellPorts para várias linguagens do algoritmo anteriorhttps://github.com/wolfgarbe/SymSpell#portsProjecto Natura da Universidade do MinhoQuem
mantêm o projeto do dicionário do
HunSpell em pt_PThttps://natura.di.uminho.pt/wiki/doku.php?id=dicionarios:mainLista 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 PortuguesasRepository for Frequency Word List Generator and processed files
https://github.com/hermitdave/FrequencyWordsSymSpell Implementação em Rust do original em C#, Versão recentehttps://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 Hunspellhttps://github.com/drahnr/hunspell-rsWikipedia -
Edit distancehttps://en.wikipedia.org/wiki/Edit_distanceWikipedia -
Damerau–Levenshtein distancehttps://en.wikipedia.org/wiki/Damerau%E2%80%93Levenshtein_distanceegui: an easy-to-use GUI in pure Rusthttps://github.com/emilk/eguiCan 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-10The Pruning Radix Trie — a Radix Trie on steroidshttps://seekstorm.com/blog/pruning-radix-trie/Exemplo de um
software comercial.Typing Assistanthttps://www.sumitsoft.com/Obrigado,
Cumprimentos,
João