Schnelllesen via Spritz Technologie-welche Technik?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
N_Gnom
Beiträge: 149
Registriert: 11.09.2013 19:52

Schnelllesen via Spritz Technologie-welche Technik?

Beitrag von N_Gnom »

http://www.spritzinc.com/

Mich würde interessieren wie das funktioniert.
Also nach welchem System der rote Buchstabe ermittelt wird.

Wäre doch toll wenn man sowas für privat nachbauen könnte und dann einfach Textdateien in so einem schnellen Tempo lesen könnte.
Laptop: Win10@64bit - i3 2x2Ghz - 8GB Ram - 1TB HDD
Desktop: Win10@64bit - AMD Ryzen 5 2400G - MSI B450 Tomahawk - 8GB Ram - 240GB SSD
- chris -
Beiträge: 195
Registriert: 24.08.2005 19:52
Wohnort: Stadtallendorf

Re: Schnelllesen via Spritz Technologie-welche Technik?

Beitrag von - chris - »

http://winfuture.de/news,80590.html

So wie ich das hier gelesen habe, geht es nur darum das der Fixpunkt
immer an der selben Stelle der Box platziert ist.
Zuletzt geändert von - chris - am 02.03.2014 14:10, insgesamt 1-mal geändert.
PB v5.72 x86/x64
Windows 10 Pro 64bit
Benutzeravatar
N_Gnom
Beiträge: 149
Registriert: 11.09.2013 19:52

Re: Schnelllesen via Spritz Technologie-welche Technik?

Beitrag von N_Gnom »

Das ist schon richtig, ich meinte aber bei unterschiedlicher Buchstabenanzahl wo dann er fixpunkt ist.
Müsste sich aber aus dem Beispieltext ableiten lassen.

Des weiteren werden nur 13 Buchstaben maximal dargestellt und bei größeren Wörtern automatisch getrennt.

Das wird wohl das größte problem sein, da man ja dann noch eine silbentrennung einbauen müsste.
Laptop: Win10@64bit - i3 2x2Ghz - 8GB Ram - 1TB HDD
Desktop: Win10@64bit - AMD Ryzen 5 2400G - MSI B450 Tomahawk - 8GB Ram - 240GB SSD
Benutzeravatar
CodeCommander
Beiträge: 213
Registriert: 02.03.2014 16:06

Beitrag von CodeCommander »

Hallo N_Gnom,
du ermittelst einfach die Anzahl und nimmst die Mitte. Der Buchstabe in der Mitte zentrierst du und schon kannst du in dieser Art schnell lesen.
Bei der Silbentrennung gibt es Regeln die du nutzen kannst. Wenn ein Wort länger als 13 Zeichen ist dann schaust du ob am Ende Postfixe vorhanden sind.
Beispiele: -lich, -heit, -keit, -tät, schaft, -iker, -...
Oder im Duden gibt es Regeln über Silbentrennung.
Zuletzt geändert von CodeCommander am 18.01.2015 14:17, insgesamt 1-mal geändert.
~ DELETE ~
- chris -
Beiträge: 195
Registriert: 24.08.2005 19:52
Wohnort: Stadtallendorf

Re: Schnelllesen via Spritz Technologie-welche Technik?

Beitrag von - chris - »

Code: Alles auswählen


	var findBestLetter = function(word) {
		var bestLetter = 1;
		var wordLength = word.length;
		jsutil.debug(5, name + "findBestLetter " + word + ", " + wordLength);

		switch (wordLength) {
		case 1:
			bestLetter = 0; // first
			break;
		case 2:
		case 3:
		case 4:
		case 5:
			bestLetter = 1; // second
			break;
		case 6:
		case 7:
		case 8:
		case 9:
			bestLetter = 2; // third
			break;
		case 10:
		case 11:
		case 12:
		case 13:
			bestLetter = 3; // fourth
			break;
		default:
			bestLetter = 4; // fifth
		};

		// maybe: make correction in case of space
		if (word.charAt(bestLetter) == ' ') {
			bestLetter--;
		}

		return bestLetter;
	};

PB v5.72 x86/x64
Windows 10 Pro 64bit
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8837
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Schnelllesen via Spritz Technologie-welche Technik?

Beitrag von NicTheQuick »

Ist in PB sogar kürzer :D

Code: Alles auswählen

Procedure.i findBestLetter(word.s)
	Protected bestLetter.i = 1
	Protected wordLength.i = Len(word)
	Debug "findBestLetter" + word + ", " + wordLength, 5
	
	Select wordLength
		Case 1: bestLetter = 0
		Case 2 To 5: bestLetter = 1
		Case 6 To 9: bestLetter = 2
		Case 10 To 13: bestLetter = 3
		Default: bestLetter = 4
	EndSelect
	
	If (Mid(word, bestLetter + 1, 1) = " ")
		bestLetter - 1
	EndIf
	
	ProcedureReturn bestLetter
EndProcedure
Benutzeravatar
N_Gnom
Beiträge: 149
Registriert: 11.09.2013 19:52

Re: Schnelllesen via Spritz Technologie-welche Technik?

Beitrag von N_Gnom »

Achso....nadann....
Wäre also nur noch das Problem der Silbentrennung bei Wörter mit mehr als 13 Buchstaben.
Laptop: Win10@64bit - i3 2x2Ghz - 8GB Ram - 1TB HDD
Desktop: Win10@64bit - AMD Ryzen 5 2400G - MSI B450 Tomahawk - 8GB Ram - 240GB SSD
Benutzeravatar
CodeCommander
Beiträge: 213
Registriert: 02.03.2014 16:06

Beitrag von CodeCommander »

N_Gnom hat geschrieben:Wäre also nur noch das Problem der Silbentrennung bei Wörter mit mehr als 13 Buchstaben.
Für das Problem gibt es schon Lösungen. Einfach im Duden schauen. ;)
Zuletzt geändert von CodeCommander am 18.01.2015 14:17, insgesamt 1-mal geändert.
~ DELETE ~
- chris -
Beiträge: 195
Registriert: 24.08.2005 19:52
Wohnort: Stadtallendorf

Re: Schnelllesen via Spritz Technologie-welche Technik?

Beitrag von - chris - »

Code: Alles auswählen


EnableExplicit

;ImageDecoder
UsePNGImageDecoder()

;- Enumerations / DataSections
;- Windows
Enumeration
  #Window_0
EndEnumeration

;- Gadgets
Enumeration
  #Image_spritz
EndEnumeration

;- Images
Enumeration
  #Image_BG
EndEnumeration

;- Fonts
Enumeration
  #Arial24
EndEnumeration

;- Global
Global quit.i, q1, spritzTH.i

;- Define
Define Event.i, EventWindow.i, EventGadget.i, EventType.i, EventMenu.i
Define a$

If CreateImage(#Image_BG, 359, 112, 24) = 0
  End
EndIf

LoadFont(#Arial24, "Arial", 24, #PB_Font_HighQuality)

Procedure OpenWindow_Window_0()
  Protected res.i
  res = #False
  If OpenWindow(#Window_0, #PB_Ignore, #PB_Ignore, 359, 112, "Spritz", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar)
    ImageGadget(#Image_spritz, 0, 0, 359, 112, 0)
    res = #True
  EndIf
  ProcedureReturn res
EndProcedure

Procedure findBestLetter(word.s)

  Protected wordLength.i, bestLetter.i

  If word <> ""

    wordLength = Len(word)

    Select wordLength

      Case 1
        bestLetter = 0 ;first

      Case 2, 3, 4, 5
        bestLetter = 1 ;second

      Case 6, 7, 8, 9
        bestLetter = 2 ;third

      Case 10, 11, 12, 13
        bestLetter = 3 ;fourth

      Default
        bestLetter = 4 ;fifth

    EndSelect

    If (Mid(word, bestLetter + 1, 1) = " ")
      bestLetter - 1
    EndIf

  EndIf

  ProcedureReturn bestLetter
EndProcedure

Procedure spritz(temp.i)

  Protected word.s, bestLetter.i, leftWidth.i, n.i, redWidth.i, wordWidth.i, wordX.i, offs.i

  NewList words.s()

  If ReadFile(0, "spritz.txt")

    While Eof(0) = 0

      word = ReadString(0)

      AddElement(words())
      words() = word

    Wend

    CloseFile(0)

  EndIf

  ResetList(words())

  Repeat

    If NextElement(words())
      word = words()
    Else
      ResetList(words())
    EndIf

    bestLetter = findBestLetter(word)

    If StartDrawing(ImageOutput(#Image_BG))

      Box(0, 0, 359, 112, RGB(219, 220, 221))

      RoundBox(11, 11, 337, 69, 3, 3, RGB(255, 255, 255))
      Box(21, 18, 317, 2, RGB(0, 0, 0))
      Box(21, 71, 317, 2, RGB(0, 0, 0))

      Box(128, 18, 2, 8, RGB(0, 0, 0))
      Box(128, 65, 2, 8, RGB(0, 0, 0))

      If word <> ""

        DrawingFont(FontID(#Arial24))
        DrawingMode(#PB_2DDrawing_Transparent)

        wordWidth = TextWidth(word)

        leftWidth = 0
        For n = 1 To bestLetter + 1
          leftWidth = leftWidth + TextWidth(Mid(word, n, 1))
        Next

        redWidth = TextWidth(Mid(word, bestletter + 1, 1))

        wordX = 128 - (leftWidth - (redWidth / 2))

        offs = 0
        For n = 1 To Len(word)
          If n = bestLetter + 1
            DrawText(wordX + offs, 30, Mid(word, n, 1), RGB(255, 0, 0))
          Else
            DrawText(wordX + offs, 30, Mid(word, n, 1), RGB(0, 0, 0))
          EndIf
          offs = offs + TextWidth(Mid(word, n, 1))
        Next n

      EndIf

      StopDrawing()

      SetGadgetState(#Image_spritz, ImageID(#Image_BG))

    EndIf

    Delay(250)

  Until quit = 1

EndProcedure

If OpenWindow_Window_0()

  spritzTH = CreateThread(@spritz(), 0)

  ;- Event loop
  Repeat

    Event       = WaitWindowEvent(100)
    EventGadget = EventGadget()
    EventType   = EventType()
    EventWindow = EventWindow()

    Select Event

      Case #PB_Event_Gadget

        If EventGadget = #Image_spritz

        EndIf

      Case #PB_Event_CloseWindow

        quit = 1

    EndSelect

    q1 = IsThread(spritzTH)

  Until quit = 1 And q1 = 0

EndIf

End

PB v5.72 x86/x64
Windows 10 Pro 64bit
Derren
Beiträge: 558
Registriert: 23.07.2011 02:08

Re: Schnelllesen via Spritz Technologie-welche Technik?

Beitrag von Derren »

- chris - hat geschrieben:
Guter Anfang.

Fehlt noch Silbentrennung. Umlaute und ß werden irgendwie nur als Kästchen dargestellt und der Text wird nur am einem Zeilenumbruch getrennt und nicht bei Leerzeichen.

Mit einer Pause-, next/previous Satz/Paragraph/Kapitel-Funktion und Positionsslider wär das ein super Tool :)
Signatur und so
Antworten