diff options
Diffstat (limited to 'lulua/stats.py')
-rw-r--r-- | lulua/stats.py | 56 |
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') |