summaryrefslogtreecommitdiff
path: root/lulua/stats.py
diff options
context:
space:
mode:
Diffstat (limited to 'lulua/stats.py')
-rw-r--r--lulua/stats.py56
1 files changed, 7 insertions, 49 deletions
diff --git a/lulua/stats.py b/lulua/stats.py
index 1d051b3..9d6c537 100644
--- a/lulua/stats.py
+++ b/lulua/stats.py
@@ -28,7 +28,7 @@ from .layout import *
from .keyboard import defaultKeyboards
from .writer import SkipEvent, Writer
from .carpalx import Carpalx, models
-from .plot import letterfreq, triadfreq
+from .plot import letterfreq, triadfreq, triadEffortPlot, triadEffortData
from .util import displayText
def updateDictOp (a, b, op):
@@ -315,47 +315,6 @@ def keyHeatmap (args):
buttons[k.name] = v
yaml.dump (data, sys.stdout)
-def sentenceStats (keyboard, layout, text):
- """
- Calculate effort for every character (button) in a text
- """
-
- writer = Writer (layout)
-
- effort = Carpalx (models['mod01'], writer)
- _ignored = frozenset (keyboard[x] for x in ('Fl_space', 'Fr_space', 'CD_ret', 'Cl_tab'))
- writtenText = []
- skipped = 0
- for match, event in writer.type (StringIO (text)):
- if isinstance (event, SkipEvent):
- skipped += 1
- writtenText.append ([event.char, None, 0])
- if not isinstance (event, ButtonCombination):
- continue
-
- writtenText.append ([match, event, 0])
-
- triad = list (filter (lambda x: x[1] is not None and first (x[1].buttons) not in _ignored, writtenText))[-3:]
- if len (triad) == 3:
- matchTriad, buttonTriad, _ = zip (*triad)
- triadEffort = effort._triadEffort (tuple (buttonTriad))
-
- # now walk the existing text backwards to find the original matches and add the computed effort
- writtenTextIt = iter (reversed (writtenText))
- matchTriad = list (matchTriad)
- while matchTriad:
- t = next (writtenTextIt)
- if t[0] == matchTriad[-1]:
- matchTriad.pop ()
- t[2] += triadEffort
-
- effort.addTriad (buttonTriad, 1)
-
- # normalize efforts to [0, 1]
- s = max (map (lambda x: x[2], writtenText))
- writtenText = list (map (lambda x: (x[0], x[2]/s if x[1] is not None else None), writtenText))
- return (writtenText, effort.effort, skipped)
-
from .text import mapChars, charMap
def layoutstats (args):
@@ -378,12 +337,6 @@ def layoutstats (args):
asymmetry = hands[LEFT]/buttonPresses - hands[RIGHT]/buttonPresses
- sentences = [
- 'أَوْ كَصَيِّبٍ مِّنَ السَّمَاءِ فِيهِ ظُلُمَاتٌ وَرَعْدٌ وَبَرْقٌ يَجْعَلُونَ أَصَابِعَهُمْ فِي آذَانِهِم مِّنَ الصَّوَاعِقِ حَذَرَ الْمَوْتِ وَاللَّهُ مُحِيطٌ بِالْكَافِرِينَ',
- 'اللغة العربية هي أكثرُ اللغاتِ السامية تحدثاً، وإحدى أكثر اللغات انتشاراً في العالم، يتحدثُها أكثرُ من 467 مليون نسمة.',
- ]
- sentences = [sentenceStats (keyboard, layout, mapChars (s, charMap).replace ('\r\n', '\n')) for s in sentences]
-
# Impact of hamza
yah = '\u064a'
waw = '\u0648'
@@ -411,7 +364,6 @@ def layoutstats (args):
fingers=dict (fingers),
buttonPresses=buttonPresses,
asymmetry=asymmetry,
- sentences=sentences,
hamzaImpact=hamzaImpact,
hamzaOnAlef=hamzaOnAlef,
), sys.stdout.buffer)
@@ -472,6 +424,12 @@ def main ():
sp.add_argument('-s', '--sort', choices={'weight', 'effort', 'combined'}, default='weight', help='Sorter')
sp.add_argument('-n', '--limit', type=int, default=0, help='Sorter')
sp.set_defaults (func=triadfreq)
+
+ sp = subparsers.add_parser('triadeffortdata')
+ sp.set_defaults (func=triadEffortData)
+ sp = subparsers.add_parser('triadeffortplot')
+ sp.set_defaults (func=triadEffortPlot)
+
sp = subparsers.add_parser('keyheatmap')
sp.set_defaults (func=keyHeatmap)
sp = subparsers.add_parser('layoutstats')