Piszę rozszerzenie emacs do użytku z rozpoznawaniem mowy i szukam pomocy z określoną funkcją. Niektóre słowa, które rozpoznaje mowę (Dragon), konsekwentnie słabo rozpoznaje - nie ma znaczenia, ile razy je ćwiczysz, będzie po prostu ssać rozpoznawanie niektórych słów. W tym samym czasie zwykle, kiedy piszesz na temat lub kodujesz, będziesz używać wielu takich samych słów w kółko.
Napisałem więc tryb, który używa nakładek do zmiany sposobu renderowania słów w buforze. Bierze losową literę w słowie, podkreśla go losowym kolorem i kładzie na nim losowy znak diakrytyczny (akcent, umlaut itp.). Oto zrzut ekranu (prawdopodobnie będziesz musiał powiększyć, aby zobaczyć znaki / podkreślenia):
Następnie możesz powiedzieć „fioletowe włosy”, a ono będzie szukać słowa z fioletowym podkreśleniem pod „a” ze znakiem diakrytycznym, który wygląda jak włosy, i wpisz to słowo dla siebie. Więc na powyższym zrzucie ekranu powiedzenie, że spowoduje to, że emacs napisze dla ciebie „regexp-quote”.
Pomysł polega na tym, że możesz odwoływać się do każdego słowa, które już użyłeś, które jest wyświetlane na ekranie przy użyciu skończonego zestawu słów, które rozpoznający jest niezmiennie dobry w rozpoznawaniu.
Działa całkiem dobrze, ale czasami zdarza się kolizja. Aby to zrobić, mogę nauczyć się konsekwentnego odwoływania się do słów w ten sam sposób, w jaki używam bajtów z skrótu md5 słowa zamiast (random)
algorytmu przypisującego zmiany tak, aby uniknąć kolizji. Znalazłem tylko 6 łatwych do odróżnienia kolorów (jest to trudne, gdy podkreślenie ma tylko jeden znak szerokości i grubość jednego piksela) oraz 3 łatwo rozpoznawalne znaki diakrytyczne (łatwe do odróżnienia od siebie i nie mylące z podkreśleniem powyżej) linia lub nachodzące na podkreślenie), widoczne u góry źródła powyżej.
Potrzebuję więcej sposobów zmiany renderowania, aby zmniejszyć częstotliwość kolizji. Najlepiej byłoby, gdyby modyfikacja renderowania:
- Nie denerwuj się resztą tekstu. Doprowadziło mnie to do odrzucenia na przykład właściwości odwrotnego wideo.
- Nie da się łatwo pomylić z innymi zmianami. Podkreślenia łatwo pomylić z podkreśleniami poprzedniej linii. Wiele znaków diakrytycznych wygląda podobnie, chyba że rozmiar czcionki jest niepraktycznie ogromny.
- Bądź przestrzennie blisko innych zmian. W tej chwili, gdy moje oko znajdzie celującą postać, wszystkie informacje są tam, znacznik, podkreślenie i litera.
- Pracuj ładnie z czcionką o stałej szerokości (potrzebną do kodowania), która poprawnie wyświetla znaki diakrytyczne (musiałem przełączyć się na DejaVu Sans Mono z Consolas, aby znaki były poprawnie renderowane)
- Praca z literami alfabetu łacińskiego. Na przykład arabskie znaki łączące nie łączą się ze znakami alfabetu łacińskiego.
- Nie zmieniaj koloru liter, ponieważ jest on już używany do podświetlania składni.
- Właściwie być wykonalnym w emacs z emacs lisp;)
Być może istnieją specjalne znaki Unicode kontrolujące renderowanie, które mogłyby zostać wykorzystane do otwarcia nowych możliwości? Lub sposób na pogrubienie podkreśleń, aby móc łatwo rozróżnić więcej kolorów? A może jakaś inna niejasna funkcja emacsa, która pozwala renderować znaki na znakach innych niż Unicode?
(char-to-string ?\uFEFF)
a drugi to postać docelowa, która jest zmniejszona w rozmiar, więc oba pasują. Innym pomysłem byłoby użycie przekreślenia w pionie (dostępnego w niektórych czcionkach, ale nie we wszystkich) podobnego do tego, które jest używane w bibliotecevline.el
emacswiki.org/emacs/VlineModeOdpowiedzi:
Inną możliwością byłoby wyświetlenie numerów linii i wypowiedzenie numeru linii przed słowem, lub, ponieważ szukanie dokładnego numeru linii byłoby kłopotliwe, możesz wyszukać algorytm w obrębie + lub - 5 lub 10 linii liczby, którą mówić.
A może zadeklaruj region lub funkcję, w której pracujesz i wszystkie wyszukiwania tylko tam szukają. Sądzę, że ograniczy to kolizje.
Możesz także renderować symbole Unicode przed słowem w danym kolorze lub przed nim, aby je wyróżnić. A także pole lub podkreśl słowo w innym kolorze. W ten sposób możesz mieć 6 kolorów słów * 6 kolorów symboli * Możliwości symboli N. Prawdopodobnie możesz znaleźć 10 dobrych symboli i mieć 360 kombinacji. Na przykład możesz powiedzieć „niebiesko-żółta gwiazdka”, odnosząc się tutaj do słowa kot.
Jeśli gwiazda jest zbyt wstrząsająca, możesz połączyć: pudełko i dwa różne: podkreśla.
Możesz więc odwołać się do drzewa słów tutaj, używając „niebiesko-żółtego czerwonego”, co dałoby 216 kombinacji do użycia.
źródło
Czy słyszałeś o trybie skoku z asem ?
Nie spełnia żadnego z określonych wymagań, ale wygląda na to, że idealnie pasuje do tego, co próbujesz osiągnąć. Pozwoliłoby to użytkownikowi określić dowolne słowo, wypowiadając tylko 2 lub 3 słowa.
Możesz zdefiniować zestaw znaków, które oferuje, dzięki czemu możesz uniknąć spółgłosek trudnych do odróżnienia. Następnie użycie może po prostu powiedzieć „naprawić A nine” i poprawić 9. słowo, które zaczyna się od
a
.źródło
Interesujące pytanie. Założę się, że dostaniesz kilka ciekawych sugestii.
Jedna drobna sugestia, która przychodzi mi do głowy, to stosowanie różnych kolorów i stylów do podkreślania. Zobacz Elisp ręczny, węzeł
Face Attributes
o atrybutu:underline
i jego:color
and:style
komponentów.Możesz także eksperymentować z atrybutami
:box
oraz różnymi szerokościami i stylami linii, ale to może być zbyt denerwujące.źródło
Odpowiem, proponując alternatywny sposób wyboru słowa docelowego. Podświetl połowę słów (losowo wybranych). Użytkownik mówi „tak”, jeśli słowo docelowe jest podświetlone, aw przeciwnym razie „nie”. Jeśli użytkownik powiedział „tak”, weź wszystkie zaznaczone słowa i losowo zaznacz połowę z nich. Jeśli użytkownik powiedział „nie”, losowo zaznacz połowę słów, które nie zostały podświetlone. Znów użytkownik wskazuje, czy słowo docelowe jest podświetlone, mówiąc „tak” czy „nie”. Powtarzaj to, dopóki nie zostanie podświetlone tylko słowo docelowe.
Niektóre zalety tego podejścia:
Wada: zbyt często trzeba mówić „tak” i „nie”. Jest to jednak naprawione przez następującą odmianę pomysłu: nie podświetlaj słów, ale używaj dla nich kolorów. Mówisz, że masz 6 łatwo rozpoznawalnych kolorów. Oznacza to, że jeśli masz 100 słów na ekranie, wybranie słowa docelowego wymaga nazywania średnio 2,6 kolorów. Jeśli jest 1000 słów, musisz wymienić średnio 3,9 kolorów.
źródło
Poniżej znajduje się przykład użycia nakładki z obrazem xpm dla graficznych wersji Emacsa, które obsługują format obrazu xpm. Ma szerokość 11 pikseli; 20 pikseli wysokości; i ma określoną przez użytkownika liczbę 4 możliwych kolorów. Jestem na komputerze Mac z systemem Snow Leopard 10.6.8, a preferowaną czcionką podczas korzystania z Emacsa jest
-*-Courier-normal-normal-normal-*-18-*-*-*-m-0-iso10646-1
-frame-char-width
jest 11, aframe-char-height
jest 20. Dodałem cienką pionową żółtą linię na lewo od dużej litery „A” jako przykład rysowania niestandardowych obrazów. Podstawienia znaku w punkcie można dokonać programowo, używając(char-after (point))
i biorąc tę liczbę - która w tym przypadku wynosi 65 dla dużej litery „A” - i zastępując odpowiednią zmienną - np.(cond ((eq (char-after (point)) 65) cap-ltr-a-xpm) . . .
- i używając tej zmiennej w umieszczanie nakładki - np.(overlay-put (make-overlay (point) (1+ (point))) 'display cap-ltr-a-xpm)
. Działa to bardzo dobrze zarówno w przypadku obciętych buforów, jak i zawijania wyrazów, ponieważdisplay
właściwość nakładki na znak w środku słowa nie powoduje, że zawijanie słów uważa, że pierwsza część słowa należy na końcu poprzedniego wiersza . Oczywiście stworzenie własnej biblioteki ulubionych obrazów xpm zajmie trochę czasu.ImageMagick jest w stanie wygenerować pół-dokładne xpm określonego znaku w oparciu o określoną rodzinę czcionek i rozmiar, ale nie było tak precyzyjne, jak się spodziewałem - tutaj jest link do instrukcji korzystania z tego zewnętrznego narzędzia: https: / /stackoverflow.com/a/14168154/2112489 Krótko mówiąc, użytkownik powinien być przygotowany na spędzenie czasu na dostosowywaniu obrazów xpm do swoich upodobań.
źródło