-
-
Save wass88/0351754c480c4889b324558e489fc09c to your computer and use it in GitHub Desktop.
Keyboard配列
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"TOKEN = \"\"" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 458, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Requirement already satisfied: pandas in /usr/local/lib/python3.6/site-packages\n", | |
"Requirement already satisfied: matplotlib in /usr/local/lib/python3.6/site-packages\n", | |
"Requirement already satisfied: numpy in /Users/admin/Library/Python/3.6/lib/python/site-packages\n", | |
"Requirement already satisfied: slackclient in /usr/local/lib/python3.6/site-packages\n", | |
"Collecting tabulate\n", | |
" Downloading https://files.pythonhosted.org/packages/12/c2/11d6845db5edf1295bc08b2f488cf5937806586afe42936c3f34c097ebdc/tabulate-0.8.2.tar.gz (45kB)\n", | |
"\u001b[K 100% |████████████████████████████████| 51kB 1.3MB/s ta 0:00:01\n", | |
"\u001b[?25hRequirement already satisfied: python-dateutil>=2.5.0 in /usr/local/lib/python3.6/site-packages (from pandas)\n", | |
"Requirement already satisfied: pytz>=2011k in /usr/local/lib/python3.6/site-packages (from pandas)\n", | |
"Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.6/site-packages (from matplotlib)\n", | |
"Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.6/site-packages (from matplotlib)\n", | |
"Requirement already satisfied: six>=1.10 in /usr/local/lib/python3.6/site-packages (from matplotlib)\n", | |
"Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /usr/local/lib/python3.6/site-packages (from matplotlib)\n", | |
"Requirement already satisfied: websocket-client<1.0a0,>=0.35 in /usr/local/lib/python3.6/site-packages (from slackclient)\n", | |
"Requirement already satisfied: requests<3.0a0,>=2.11 in /usr/local/lib/python3.6/site-packages (from slackclient)\n", | |
"Requirement already satisfied: setuptools in /usr/local/lib/python3.6/site-packages (from kiwisolver>=1.0.1->matplotlib)\n", | |
"Requirement already satisfied: idna<2.8,>=2.5 in /usr/local/lib/python3.6/site-packages (from requests<3.0a0,>=2.11->slackclient)\n", | |
"Requirement already satisfied: chardet<3.1.0,>=3.0.2 in /usr/local/lib/python3.6/site-packages (from requests<3.0a0,>=2.11->slackclient)\n", | |
"Requirement already satisfied: urllib3<1.24,>=1.21.1 in /usr/local/lib/python3.6/site-packages (from requests<3.0a0,>=2.11->slackclient)\n", | |
"Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.6/site-packages (from requests<3.0a0,>=2.11->slackclient)\n", | |
"Building wheels for collected packages: tabulate\n", | |
" Running setup.py bdist_wheel for tabulate ... \u001b[?25ldone\n", | |
"\u001b[?25h Stored in directory: /Users/admin/Library/Caches/pip/wheels/2a/85/33/2f6da85d5f10614cbe5a625eab3b3aebfdf43e7b857f25f829\n", | |
"Successfully built tabulate\n", | |
"Installing collected packages: tabulate\n", | |
"Successfully installed tabulate-0.8.2\n", | |
"\u001b[33mYou are using pip version 9.0.3, however version 18.1 is available.\n", | |
"You should consider upgrading via the 'pip install --upgrade pip' command.\u001b[0m\n" | |
] | |
} | |
], | |
"source": [ | |
"!pip3 install pandas matplotlib numpy slackclient tabulate" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 421, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import matplotlib.pyplot as plt\n", | |
"import pandas as pd\n", | |
"from time import sleep\n", | |
"import itertools as it\n", | |
"import json" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"from slackclient import SlackClient\n", | |
"slack_token = TOKEN\n", | |
"sc = SlackClient(slack_token)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 59, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def fetch_msg(page = 1, count = 100):\n", | |
" try:\n", | |
" res = sc.api_call(\n", | |
" \"search.all\",\n", | |
" query = \"from:@wass80\",\n", | |
" count = count,\n", | |
" highlight = False,\n", | |
" page = page\n", | |
" )\n", | |
" except e:\n", | |
" print(\"Retry\")\n", | |
" sleep(10)\n", | |
" yield from fetch(page, count)\n", | |
" if \"messages\" not in res:\n", | |
" print(\"missing\", res)\n", | |
" return\n", | |
" res = res[\"messages\"][\"matches\"]\n", | |
" for r in res:\n", | |
" yield r[\"text\"]\n", | |
"\n", | |
"def fetch_all(count = 3, batch = 100):\n", | |
" for i in range(1, count + 1):\n", | |
" print(\"Fetch: %d\" % i)\n", | |
" yield from fetch_msg(i, batch)\n", | |
" sleep(10)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 60, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Fetch: 1\n", | |
"Fetch: 2\n", | |
"Fetch: 3\n", | |
"Fetch: 4\n", | |
"Fetch: 5\n", | |
"Fetch: 6\n", | |
"Fetch: 7\n", | |
"Fetch: 8\n", | |
"Fetch: 9\n", | |
"Fetch: 10\n", | |
"Fetch: 11\n", | |
"Fetch: 12\n", | |
"Fetch: 13\n", | |
"Fetch: 14\n", | |
"Fetch: 15\n", | |
"Fetch: 16\n", | |
"Fetch: 17\n", | |
"Fetch: 18\n", | |
"Fetch: 19\n", | |
"Fetch: 20\n", | |
"Fetch: 21\n", | |
"Fetch: 22\n", | |
"Fetch: 23\n", | |
"Fetch: 24\n", | |
"Fetch: 25\n", | |
"Fetch: 26\n", | |
"Fetch: 27\n", | |
"Fetch: 28\n", | |
"Fetch: 29\n", | |
"Fetch: 30\n", | |
"Fetch: 31\n", | |
"Fetch: 32\n", | |
"Fetch: 33\n", | |
"Fetch: 34\n", | |
"Fetch: 35\n", | |
"Fetch: 36\n", | |
"Fetch: 37\n", | |
"Fetch: 38\n", | |
"Fetch: 39\n", | |
"Fetch: 40\n", | |
"Fetch: 41\n", | |
"Fetch: 42\n", | |
"Fetch: 43\n", | |
"Fetch: 44\n", | |
"Fetch: 45\n", | |
"Fetch: 46\n", | |
"Fetch: 47\n", | |
"Fetch: 48\n", | |
"Fetch: 49\n", | |
"Fetch: 50\n", | |
"Fetch: 51\n", | |
"Fetch: 52\n", | |
"Fetch: 53\n", | |
"Fetch: 54\n", | |
"Fetch: 55\n", | |
"Fetch: 56\n", | |
"Fetch: 57\n", | |
"Fetch: 58\n", | |
"Fetch: 59\n", | |
"Fetch: 60\n", | |
"Fetch: 61\n", | |
"Fetch: 62\n", | |
"Fetch: 63\n", | |
"Fetch: 64\n", | |
"Fetch: 65\n", | |
"Fetch: 66\n", | |
"Fetch: 67\n", | |
"Fetch: 68\n", | |
"Fetch: 69\n", | |
"Fetch: 70\n", | |
"Fetch: 71\n", | |
"Fetch: 72\n", | |
"Fetch: 73\n", | |
"Fetch: 74\n", | |
"Fetch: 75\n", | |
"Fetch: 76\n", | |
"Fetch: 77\n", | |
"Fetch: 78\n", | |
"Fetch: 79\n", | |
"Fetch: 80\n", | |
"Fetch: 81\n", | |
"Fetch: 82\n", | |
"Fetch: 83\n", | |
"Fetch: 84\n", | |
"Fetch: 85\n", | |
"Fetch: 86\n", | |
"Fetch: 87\n", | |
"Fetch: 88\n", | |
"Fetch: 89\n", | |
"Fetch: 90\n", | |
"Fetch: 91\n", | |
"Fetch: 92\n", | |
"Fetch: 93\n", | |
"Fetch: 94\n", | |
"Fetch: 95\n", | |
"Fetch: 96\n", | |
"Fetch: 97\n", | |
"Fetch: 98\n", | |
"Fetch: 99\n", | |
"Fetch: 100\n", | |
"Fetch: 101\n", | |
"Fetch: 102\n", | |
"Fetch: 103\n", | |
"Fetch: 104\n", | |
"Fetch: 105\n", | |
"Fetch: 106\n", | |
"Fetch: 107\n", | |
"Fetch: 108\n", | |
"Fetch: 109\n", | |
"Fetch: 110\n", | |
"Fetch: 111\n", | |
"Fetch: 112\n", | |
"Fetch: 113\n", | |
"Fetch: 114\n", | |
"Fetch: 115\n", | |
"Fetch: 116\n", | |
"Fetch: 117\n", | |
"Fetch: 118\n", | |
"Fetch: 119\n", | |
"Fetch: 120\n", | |
"Fetch: 121\n", | |
"Fetch: 122\n", | |
"Fetch: 123\n", | |
"Fetch: 124\n", | |
"Fetch: 125\n", | |
"Fetch: 126\n", | |
"Fetch: 127\n", | |
"Fetch: 128\n", | |
"Fetch: 129\n", | |
"Fetch: 130\n", | |
"Fetch: 131\n", | |
"Fetch: 132\n", | |
"Fetch: 133\n", | |
"Fetch: 134\n", | |
"Fetch: 135\n", | |
"Fetch: 136\n", | |
"Fetch: 137\n", | |
"Fetch: 138\n", | |
"Fetch: 139\n", | |
"Fetch: 140\n", | |
"Fetch: 141\n", | |
"Fetch: 142\n", | |
"Fetch: 143\n", | |
"Fetch: 144\n", | |
"Fetch: 145\n", | |
"Fetch: 146\n", | |
"Fetch: 147\n", | |
"Fetch: 148\n", | |
"Fetch: 149\n", | |
"Fetch: 150\n", | |
"Fetch: 151\n", | |
"Fetch: 152\n", | |
"Fetch: 153\n", | |
"Fetch: 154\n", | |
"Fetch: 155\n", | |
"Fetch: 156\n", | |
"Fetch: 157\n", | |
"Fetch: 158\n", | |
"Fetch: 159\n", | |
"Fetch: 160\n", | |
"Fetch: 161\n", | |
"Fetch: 162\n", | |
"Fetch: 163\n", | |
"Fetch: 164\n", | |
"Fetch: 165\n", | |
"Fetch: 166\n", | |
"Fetch: 167\n", | |
"Fetch: 168\n", | |
"Fetch: 169\n", | |
"Fetch: 170\n" | |
] | |
} | |
], | |
"source": [ | |
"with open(\"msg.txt\", \"w\") as f:\n", | |
" for m in fetch_all(170):\n", | |
" f.write(json.dumps(m) + \"\\n\")\n", | |
" #f.writelines(map(lambda x : json.dumps(x) + \"\\n\", fetch_all(1000)))" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 61, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"with open(\"msg.txt\", \"r\") as f:\n", | |
" msgs = f.readlines()\n", | |
"msgs = map(json.loads, msgs)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 62, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import re" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 63, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def remove_symbols(s):\n", | |
" s = re.sub(re.compile(r\"```.+```\", re.MULTILINE | re.DOTALL), \" \", s)\n", | |
" s = re.sub(r\"<[^>]+>\", \" \", s)\n", | |
" s = re.sub(r\"`[^`]+`\", \" \", s)\n", | |
" s = re.sub(r\":[^:]+:\", \" \", s)\n", | |
" return s" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 64, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"'hoge hoge hoge \\nhoge\\n '" | |
] | |
}, | |
"execution_count": 64, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"remove_symbols(\"hoge<piyo>hoge`piyo`hoge```\\npiyo\\n```\\nhoge\\n:piyo:\")" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 65, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"msgs = map(remove_symbols, msgs)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 66, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"with open(\"clean.txt\", \"w\") as f:\n", | |
" for m in msgs:\n", | |
" f.write(m + \"\\n\")" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 67, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Requirement already satisfied: janome in /usr/local/lib/python3.6/site-packages\n", | |
"\u001b[33mYou are using pip version 9.0.3, however version 18.1 is available.\n", | |
"You should consider upgrading via the 'pip install --upgrade pip' command.\u001b[0m\n" | |
] | |
} | |
], | |
"source": [ | |
"!pip3 install janome" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 68, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"from janome.tokenizer import Tokenizer\n", | |
"tk = Tokenizer()\n", | |
"\n", | |
"def reading(s):\n", | |
" res = \"\"\n", | |
" for t in tk.tokenize(s):\n", | |
" if t.reading != \"*\":\n", | |
" res += t.reading\n", | |
" else:\n", | |
" res += \" \"\n", | |
" return res" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 69, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"'マルタケエビスニ '" | |
] | |
}, | |
"execution_count": 69, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"reading(\"丸竹夷に押御池\")" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 70, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"with open(\"clean.txt\", \"r\") as f:\n", | |
" msgs = f.readlines()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 71, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"msgs = map(reading, msgs)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 72, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"with open(\"reading.txt\", \"w\") as f:\n", | |
" for m in msgs:\n", | |
" f.write(m + \"\\n\")" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 875, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"with open(\"reading.txt\", \"r\") as f:\n", | |
" msgs = f.readlines()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 911, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"40 18 38.0\n" | |
] | |
} | |
], | |
"source": [ | |
"class Keys():\n", | |
" def __init__(self):\n", | |
" raw = \\\n", | |
" \"ア$イ$ウ$エ$オ$\" \\\n", | |
" \"カ$キギクグケゲコ$\" \\\n", | |
" \"サザシ$スズセゼソゾ\" \\\n", | |
" \"タ$チヂッツテ$トド\" \\\n", | |
" \"ナ$ニ$ヌ$ネ$ノ$\" \\\n", | |
" \"ハバヒビフブヘペホボ\" \\\n", | |
" \"パ$ピ$プ$ペ$ポ$\" \\\n", | |
" \"マ$ミ$ム$メ$モ$\" \\\n", | |
" \"ャヤュユョ$\" \\\n", | |
" \"ラ$リ$ル$レ$ロ$\" \\\n", | |
" \"ワ$ヲ$ン$\"\\\n", | |
" \"ー〜ヅ$\"\\\n", | |
" \"デ$ガ$ジ$ダ$ヨ$\"\n", | |
" \n", | |
" self.meta = [(\"@\", \"@\")]\n", | |
" self.shift = [(\"゛\", None), (\"゛\", None)]\n", | |
" self.save = self.meta + self.shift\n", | |
" \n", | |
" self.keys = []\n", | |
" for i in range(0, len(raw), 2):\n", | |
" self.keys.append((raw[i],raw[i+1] if raw[i+1] != \"$\" else None))\n", | |
" self.double = list(filter(lambda x: x[1] is not None, self.keys))\n", | |
" self.single = list(filter(lambda x: x[1] is None, self.keys))\n", | |
" self.keys.extend(self.save)\n", | |
" self.chars = [k for k,_ in self.keys] + [k for _,k in self.keys if k is not None]\n", | |
"keys = Keys()\n", | |
"ks, kd = len(keys.single), len(keys.double)\n", | |
"print(ks, kd, ks / 2 + kd) # There are 47keys" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 912, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def typing(s):\n", | |
" for (a, b) in keys.double:\n", | |
" s = s.replace(b, \"゛\" + a)\n", | |
" return s" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 913, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def add_ngram(dic, s, n):\n", | |
" for i in range(len(s) - n + 1):\n", | |
" dic[s[i:i+n]] += 1\n", | |
"from collections import defaultdict" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 914, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"defaultdict(int,\n", | |
" {'あえ': 1,\n", | |
" 'えい': 1,\n", | |
" 'いう': 1,\n", | |
" 'うえ': 1,\n", | |
" 'えお': 1,\n", | |
" 'おあ': 1,\n", | |
" 'あお': 1,\n", | |
" 'おう': 1,\n", | |
" 'あう': 2,\n", | |
" 'うあ': 1})" | |
] | |
}, | |
"execution_count": 914, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"gram2 = defaultdict(int)\n", | |
"add_ngram(gram2, \"あえいうえおあおう\", 2)\n", | |
"add_ngram(gram2, \"あうあう\", 2)\n", | |
"gram2" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 915, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"gram1_pure = defaultdict(int)\n", | |
"gram1 = defaultdict(int)\n", | |
"gram2 = defaultdict(int)\n", | |
"for m in msgs:\n", | |
" add_ngram(gram1_pure, m, 1)\n", | |
" m = typing(m)\n", | |
" add_ngram(gram1, m, 1)\n", | |
" add_ngram(gram2, m, 2)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 916, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"with open(\"gram1_pure.txt\", \"w\") as f:\n", | |
" f.write(json.dumps(dict(gram1_pure.items())))\n", | |
"with open(\"gram1.txt\", \"w\") as f:\n", | |
" f.write(json.dumps(dict(gram1.items())))\n", | |
"with open(\"gram2.txt\", \"w\") as f:\n", | |
" f.write(json.dumps(dict(gram2.items())))" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 917, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"with open(\"gram1_pure.txt\") as f:\n", | |
" gram1_pure = json.load(f)\n", | |
"with open(\"gram1.txt\") as f:\n", | |
" gram1 = json.load(f)\n", | |
"with open(\"gram2.txt\") as f:\n", | |
" gram2 = json.load(f)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 918, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"gram1_pure_sum = sum(v for (k, v) in gram1.items())\n", | |
"gram1_pure = dict((k, v/gram1_pure_sum) for (k, v) in gram1_pure.items())\n", | |
"gram1_sum = sum(v for (k, v) in gram1.items())\n", | |
"gram1 = dict((k, v/gram1_sum) for (k, v) in gram1.items())\n", | |
"gram2_sum = sum(v for (k, v) in gram2.items())\n", | |
"gram2 = dict((k, v/gram2_sum) for (k, v) in gram2.items())" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 978, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<table>\n", | |
"<tbody>\n", | |
"<tr><td style=\"text-align: right;\"> 0</td><td>(' ', 0.12064553464826859) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\"> 1</td><td>('\\n', 0.05489620804149756) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\"> 2</td><td>('イ', 0.05481930374696949) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\"> 3</td><td>('ン', 0.03936346315419119) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\"> 4</td><td>('ウ', 0.036396879992771) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\"> 5</td><td>('カ', 0.031144316676504007) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\"> 6</td><td>('シ', 0.027889342410603563) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\"> 7</td><td>('ト', 0.022169585505078568) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\"> 8</td><td>('ノ', 0.021583190259302054) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\"> 9</td><td>('ナ', 0.021502440750047584) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">10</td><td>('タ', 0.021452452958604342) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">11</td><td>('デ', 0.021317870443180224) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">12</td><td>('テ', 0.02065072568814924) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">13</td><td>('ク', 0.018333983815491218) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">14</td><td>('ス', 0.01794946234285088) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">15</td><td>('ル', 0.017828338078969174) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">16</td><td>('ハ', 0.016788207495477065) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">17</td><td>('マ', 0.016032622801738807) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">18</td><td>('ニ', 0.01594802807775793) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">19</td><td>('ガ', 0.01577307080770658) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">20</td><td>('キ', 0.015550048353575185) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">21</td><td>('ッ', 0.014969420929888278) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">22</td><td>('コ', 0.013854308659231302) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">23</td><td>('ジ', 0.01239697227792443) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">24</td><td>('リ', 0.01180096399533191) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">25</td><td>('ツ', 0.011358764301795523) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">26</td><td>('サ', 0.010868499424179095) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">27</td><td>('ョ', 0.01082812466955186) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">28</td><td>('ア', 0.01082812466955186) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">29</td><td>('ダ', 0.010774291663382212) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">30</td><td>('ラ', 0.010755065589750196) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">31</td><td>('オ', 0.010328246755119423) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">32</td><td>('チ', 0.010201354669148111) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">33</td><td>('モ', 0.009882201846856634) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">34</td><td>('レ', 0.009666869822178044) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">35</td><td>('ヨ', 0.00945346040486266) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">36</td><td>('ケ', 0.008484466293809011) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">37</td><td>('ー', 0.007488555679670542) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">38</td><td>('、', 0.007236694115091122) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">39</td><td>('セ', 0.007121337673299021) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">40</td><td>('エ', 0.0069829099431485) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">41</td><td>('ヲ', 0.006148498347518972) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">42</td><td>('メ', 0.005971618470104417) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">43</td><td>('ド', 0.005890868960849946) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">44</td><td>('。', 0.005592864819553686) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">45</td><td>('ソ', 0.005312164144526241) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">46</td><td>('ュ', 0.005291015463531022) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">47</td><td>('ホ', 0.005067993009399628) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">48</td><td>('ヒ', 0.0045873411685992075) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">49</td><td>('ミ', 0.0045834959538728045) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">50</td><td>('ヤ', 0.004445068223722283) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">51</td><td>('ワ', 0.00439508043227904) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">52</td><td>('ム', 0.004264343131581325) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">53</td><td>('ゴ', 0.004181671014963653) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">54</td><td>('バ', 0.004129760616157207) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">55</td><td>('ネ', 0.003966338990285065) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">56</td><td>('ブ', 0.003785613898144107) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">57</td><td>('ロ', 0.0036529539900831912) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">58</td><td>('ャ', 0.0030165709528634354) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">59</td><td>('フ', 0.0028243102165432673) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">60</td><td>('ズ', 0.0027224120262935784) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">61</td><td>('ベ', 0.0026493529464919146) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">62</td><td>('ゼ', 0.002214843682408335) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">63</td><td>('ギ', 0.00195721429573931) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">64</td><td>('ゲ', 0.0017168883753390998) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">65</td><td>('グ', 0.0016726684059854612) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">66</td><td>('…', 0.0015457763200141504) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">67</td><td>('ヘ', 0.0015169372095661252) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">68</td><td>('ビ', 0.0014169616266796379) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">69</td><td>('ゾ', 0.0012535400008074952) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">70</td><td>('」', 0.0011958617799114448) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">71</td><td>('ザ', 0.001061279264487327) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">72</td><td>('ボ', 0.0009766845405064532) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">73</td><td>('ユ', 0.0009632262889640415) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">74</td><td>('「', 0.0007959594483654954) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">75</td><td>('ポ', 0.0007094421170214198) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">76</td><td>('プ', 0.0007075195096582181) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">77</td><td>('パ', 0.0006729125771205879) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">78</td><td>('(', 0.000653686503488571) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">79</td><td>('・', 0.000653686503488571) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">80</td><td>('ェ', 0.0006517638961253694) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">81</td><td>(')', 0.000647918681398966) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">82</td><td>('\\u3000', 0.0006017761046821258)</td></tr>\n", | |
"<tr><td style=\"text-align: right;\">83</td><td>('!', 0.0004614257671684031) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">84</td><td>('※', 0.00042105101254116784) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">85</td><td>('ヅ', 0.0004114379757251594) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">86</td><td>('ペ', 0.00039413450945634433) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">87</td><td>('〜', 0.00029608153393305864) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">88</td><td>('ァ', 0.0002749328529378402) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">89</td><td>('ピ', 0.00026147460139542845) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">90</td><td>('ィ', 0.00025955199403222677) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">91</td><td>('ヌ', 0.00024993895721621835) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">92</td><td>('‥', 0.0002153320246785881) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">93</td><td>('?', 0.000198028558409773) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">94</td><td>('ォ', 0.00019226073632016796) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">95</td><td>('】', 0.00013842773015052093) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">96</td><td>('【', 0.00013842773015052093) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">97</td><td>('←', 0.00013842773015052093) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">98</td><td>(',', 5.191039880644535e-05) </td></tr>\n", | |
"<tr><td style=\"text-align: right;\">99</td><td>('.', 3.652953990083191e-05) </td></tr>\n", | |
"</tbody>\n", | |
"</table>" | |
], | |
"text/plain": [ | |
"<IPython.core.display.HTML object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"g1 = list(zip(range(100), reversed(sorted(((k, v) for k, v in gram1_pure.items()), key=lambda x:x[1]))))\n", | |
"from IPython.display import HTML, display\n", | |
"import tabulate\n", | |
"def display_table(t):\n", | |
" return display(HTML(tabulate.tabulate(t, tablefmt='html')))\n", | |
"display_table(g1)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1080, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"kata = {\n", | |
" 'ア':'あ', 'イ':'い', 'ウ':'う', 'エ':'え', 'オ':'お',\n", | |
" 'カ':'か', 'キ':'き', 'ク':'く', 'ケ':'け', 'コ':'こ',\n", | |
" 'サ':'さ', 'シ':'し', 'ス':'す', 'セ':'せ', 'ソ':'そ',\n", | |
" 'タ':'た', 'チ':'ち', 'ツ':'つ', 'テ':'て', 'ト':'と',\n", | |
" 'ナ':'な', 'ニ':'に', 'ヌ':'ぬ', 'ネ':'ね', 'ノ':'の',\n", | |
" 'ハ':'は', 'ヒ':'ひ', 'フ':'ふ', 'ヘ':'へ', 'ホ':'ほ',\n", | |
" 'マ':'ま', 'ミ':'み', 'ム':'む', 'メ':'め', 'モ':'も',\n", | |
" 'ヤ':'や', 'ユ':'ゆ', 'ヨ':'よ', 'ラ':'ら', 'リ':'り',\n", | |
" 'ル':'る', 'レ':'れ', 'ロ':'ろ', 'ワ':'わ', 'ヲ':'を',\n", | |
" 'ン':'ん',\n", | |
" \n", | |
" 'ガ':'が', 'ギ':'ぎ', 'グ':'ぐ', 'ゲ':'げ', 'ゴ':'ご',\n", | |
" 'ザ':'ざ', 'ジ':'じ', 'ズ':'ず', 'ゼ':'ぜ', 'ゾ':'ぞ',\n", | |
" 'ダ':'だ', 'ヂ':'ぢ', 'ヅ':'づ', 'デ':'で', 'ド':'ど',\n", | |
" 'バ':'ば', 'ビ':'び', 'ブ':'ぶ', 'ベ':'べ', 'ボ':'ぼ',\n", | |
" 'パ':'ぱ', 'ピ':'ぴ', 'プ':'ぷ', 'ペ':'ぺ', 'ポ':'ぽ',\n", | |
" \n", | |
" 'ァ':'ぁ', 'ィ':'ぃ', 'ゥ':'ぅ', 'ェ':'ぇ', 'ォ':'ぉ',\n", | |
" 'ャ':'ゃ', 'ュ':'ゅ', 'ョ':'ょ',\n", | |
" 'ヴ':'ゔ', 'ッ':'っ', 'ヰ':'ゐ', 'ヱ':'ゑ',\n", | |
" } " | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1087, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>x</th>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>c</th>\n", | |
" <th></th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>t</th>\n", | |
" <td>0.124227</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>x</th>\n", | |
" <td>0.120734</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>k</th>\n", | |
" <td>0.112669</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>n</th>\n", | |
" <td>0.110756</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>s</th>\n", | |
" <td>0.088790</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>r</th>\n", | |
" <td>0.068674</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>h</th>\n", | |
" <td>0.043743</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>m</th>\n", | |
" <td>0.043480</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>y</th>\n", | |
" <td>0.035999</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>w</th>\n", | |
" <td>0.010544</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" x\n", | |
"c \n", | |
"t 0.124227\n", | |
"x 0.120734\n", | |
"k 0.112669\n", | |
"n 0.110756\n", | |
"s 0.088790\n", | |
"r 0.068674\n", | |
"h 0.043743\n", | |
"m 0.043480\n", | |
"y 0.035999\n", | |
"w 0.010544" | |
] | |
}, | |
"execution_count": 1087, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"master = {\n", | |
" 'xa' :'ア', 'xi' :'イ', 'xu' :'ウ', 'xe' :'エ', 'xo' :'オ',\n", | |
" 'ka' :'カ', 'ki' :'キ', 'ku' :'ク', 'ke' :'ケ', 'ko' :'コ',\n", | |
" 'sa' :'サ', 'si':'シ', 'su' :'ス', 'se' :'セ', 'so' :'ソ',\n", | |
" 'ta' :'タ', 'ti':'チ', 'tu' :'ツ', 'te' :'テ', 'to' :'ト',\n", | |
" 'na' :'ナ', 'ni' :'ニ', 'nu' :'ヌ', 'ne' :'ネ', 'no' :'ノ',\n", | |
" 'ha' :'ハ', 'hi' :'ヒ', 'hu' :'フ', 'he' :'ヘ', 'ho' :'ホ',\n", | |
" 'ma' :'マ', 'mi' :'ミ', 'mu' :'ム', 'me' :'メ', 'mo' :'モ',\n", | |
" 'ya' :'ヤ', 'yu' :'ユ', 'yo' :'ヨ',\n", | |
" 'ra' :'ラ', 'ri' :'リ', 'ru' :'ル', 're' :'レ', 'ro' :'ロ',\n", | |
" 'wa' :'ワ', 'wo' :'ヲ',\n", | |
" '#xa' :'ァ', '#xi' :'ィ', '#xu' :'ゥ', '#xe' :'ェ', '#xo' :'ォ',\n", | |
" '#ka' :'ガ', '#ki' :'ギ', '#ku' :'グ', '#ke' :'ゲ', '#ko' :'ゴ',\n", | |
" '#sa' :'ザ', '#si' :'ジ', '#su' :'ズ', '#se' :'ゼ', '#so' :'ゾ',\n", | |
" '#ta' :'ダ', '#ti' :'ヂ', '#tu' :'ヅ', '#te' :'デ', '#to' :'ド',\n", | |
" '#ha' :'バ', '#hi' :'ビ', '#hu' :'ブ', '#he' :'ベ', '#ho' :'ボ',\n", | |
" '#ma' :'パ', '#mi' :'ピ', '#mu' :'プ', '#me' :'ペ', '#mo' :'ポ',\n", | |
" '#ya' :'ャ', '#yu' :'ュ', '#yo' :'ョ',\n", | |
" '#ru': 'ッ',\n", | |
" '#na': 'ヵ','#ni': 'ー', '#nu': 'ン', '#ne': '・', '#no': 'ヶ',\n", | |
" '#yi': '。', '#yo': '、',\n", | |
" 'wu': 'ヴ', 'wi': 'ゐ', 'we': 'ゑ'\n", | |
"}\n", | |
"def ps(k):\n", | |
" d, c, v = list(\" \"+ k)[len(k) - 2 : len(k) + 1]\n", | |
" if d == \" \": return (c, v, False)\n", | |
" return (c, v, True)\n", | |
"rev = dict((v, ps(k)) for k, v in master.items())\n", | |
"cv1 = [[*rev[c], x] for k, (c, x) in g1 if c in rev]\n", | |
"import pandas as pd\n", | |
"cv1 = pd.DataFrame(cv1, columns=[\"c\",\"v\",\"s\",\"x\"])\n", | |
"cv1[[\"c\", \"x\"]].groupby(\"c\").sum().sort_values(\"x\", ascending=False)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1088, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>x</th>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>v</th>\n", | |
" <th></th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>a</th>\n", | |
" <td>0.183915</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>u</th>\n", | |
" <td>0.179093</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>i</th>\n", | |
" <td>0.174753</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>o</th>\n", | |
" <td>0.127894</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>e</th>\n", | |
" <td>0.093960</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" x\n", | |
"v \n", | |
"a 0.183915\n", | |
"u 0.179093\n", | |
"i 0.174753\n", | |
"o 0.127894\n", | |
"e 0.093960" | |
] | |
}, | |
"execution_count": 1088, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"cv1[[\"v\",\"x\"]].groupby(\"v\").sum().sort_values(\"x\", ascending=False)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1089, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<table>\n", | |
"<tbody>\n", | |
"<tr><td>dj</td><td>あ </td><td></td></tr>\n", | |
"<tr><td>jd</td><td>あ </td><td></td></tr>\n", | |
"<tr><td>dk</td><td>い </td><td></td></tr>\n", | |
"<tr><td>kd</td><td>い </td><td></td></tr>\n", | |
"<tr><td>dl</td><td>う </td><td></td></tr>\n", | |
"<tr><td>ld</td><td>う </td><td></td></tr>\n", | |
"<tr><td>dh</td><td>え </td><td></td></tr>\n", | |
"<tr><td>hd</td><td>え </td><td></td></tr>\n", | |
"<tr><td>d;</td><td>お </td><td></td></tr>\n", | |
"<tr><td>;d</td><td>お </td><td></td></tr>\n", | |
"<tr><td>du</td><td>ぁ </td><td></td></tr>\n", | |
"<tr><td>ud</td><td>ぁ </td><td></td></tr>\n", | |
"<tr><td>di</td><td>ぃ </td><td></td></tr>\n", | |
"<tr><td>id</td><td>ぃ </td><td></td></tr>\n", | |
"<tr><td>do</td><td>ぅ </td><td></td></tr>\n", | |
"<tr><td>od</td><td>ぅ </td><td></td></tr>\n", | |
"<tr><td>dy</td><td>ぇ </td><td></td></tr>\n", | |
"<tr><td>yd</td><td>ぇ </td><td></td></tr>\n", | |
"<tr><td>dp</td><td>ぉ </td><td></td></tr>\n", | |
"<tr><td>pd</td><td>ぉ </td><td></td></tr>\n", | |
"<tr><td>sj</td><td>か </td><td></td></tr>\n", | |
"<tr><td>js</td><td>か </td><td></td></tr>\n", | |
"<tr><td>sk</td><td>き </td><td></td></tr>\n", | |
"<tr><td>ks</td><td>き </td><td></td></tr>\n", | |
"<tr><td>sl</td><td>く </td><td></td></tr>\n", | |
"<tr><td>ls</td><td>く </td><td></td></tr>\n", | |
"<tr><td>sh</td><td>け </td><td></td></tr>\n", | |
"<tr><td>hs</td><td>け </td><td></td></tr>\n", | |
"<tr><td>s;</td><td>こ </td><td></td></tr>\n", | |
"<tr><td>;s</td><td>こ </td><td></td></tr>\n", | |
"<tr><td>su</td><td>が </td><td></td></tr>\n", | |
"<tr><td>us</td><td>が </td><td></td></tr>\n", | |
"<tr><td>si</td><td>ぎ </td><td></td></tr>\n", | |
"<tr><td>is</td><td>ぎ </td><td></td></tr>\n", | |
"<tr><td>so</td><td>ぐ </td><td></td></tr>\n", | |
"<tr><td>os</td><td>ぐ </td><td></td></tr>\n", | |
"<tr><td>sy</td><td>げ </td><td></td></tr>\n", | |
"<tr><td>ys</td><td>げ </td><td></td></tr>\n", | |
"<tr><td>sp</td><td>ご </td><td></td></tr>\n", | |
"<tr><td>ps</td><td>ご </td><td></td></tr>\n", | |
"<tr><td>gj</td><td>さ </td><td></td></tr>\n", | |
"<tr><td>jg</td><td>さ </td><td></td></tr>\n", | |
"<tr><td>gk</td><td>し </td><td></td></tr>\n", | |
"<tr><td>kg</td><td>し </td><td></td></tr>\n", | |
"<tr><td>gl</td><td>す </td><td></td></tr>\n", | |
"<tr><td>lg</td><td>す </td><td></td></tr>\n", | |
"<tr><td>gh</td><td>せ </td><td></td></tr>\n", | |
"<tr><td>hg</td><td>せ </td><td></td></tr>\n", | |
"<tr><td>g;</td><td>そ </td><td></td></tr>\n", | |
"<tr><td>;g</td><td>そ </td><td></td></tr>\n", | |
"<tr><td>gu</td><td>ざ </td><td></td></tr>\n", | |
"<tr><td>ug</td><td>ざ </td><td></td></tr>\n", | |
"<tr><td>gi</td><td>じ </td><td></td></tr>\n", | |
"<tr><td>ig</td><td>じ </td><td></td></tr>\n", | |
"<tr><td>go</td><td>ず </td><td></td></tr>\n", | |
"<tr><td>og</td><td>ず </td><td></td></tr>\n", | |
"<tr><td>gy</td><td>ぜ </td><td></td></tr>\n", | |
"<tr><td>yg</td><td>ぜ </td><td></td></tr>\n", | |
"<tr><td>gp</td><td>ぞ </td><td></td></tr>\n", | |
"<tr><td>pg</td><td>ぞ </td><td></td></tr>\n", | |
"<tr><td>fj</td><td>た </td><td></td></tr>\n", | |
"<tr><td>jf</td><td>た </td><td></td></tr>\n", | |
"<tr><td>fk</td><td>ち </td><td></td></tr>\n", | |
"<tr><td>kf</td><td>ち </td><td></td></tr>\n", | |
"<tr><td>fl</td><td>つ </td><td></td></tr>\n", | |
"<tr><td>lf</td><td>つ </td><td></td></tr>\n", | |
"<tr><td>fh</td><td>て </td><td></td></tr>\n", | |
"<tr><td>hf</td><td>て </td><td></td></tr>\n", | |
"<tr><td>f;</td><td>と </td><td></td></tr>\n", | |
"<tr><td>;f</td><td>と </td><td></td></tr>\n", | |
"<tr><td>fu</td><td>だ </td><td></td></tr>\n", | |
"<tr><td>uf</td><td>だ </td><td></td></tr>\n", | |
"<tr><td>fi</td><td>ぢ </td><td></td></tr>\n", | |
"<tr><td>if</td><td>ぢ </td><td></td></tr>\n", | |
"<tr><td>fo</td><td>づ </td><td></td></tr>\n", | |
"<tr><td>of</td><td>づ </td><td></td></tr>\n", | |
"<tr><td>fy</td><td>で </td><td></td></tr>\n", | |
"<tr><td>yf</td><td>で </td><td></td></tr>\n", | |
"<tr><td>fp</td><td>ど </td><td></td></tr>\n", | |
"<tr><td>pf</td><td>ど </td><td></td></tr>\n", | |
"<tr><td>aj</td><td>な </td><td></td></tr>\n", | |
"<tr><td>ja</td><td>な </td><td></td></tr>\n", | |
"<tr><td>ak</td><td>に </td><td></td></tr>\n", | |
"<tr><td>ka</td><td>に </td><td></td></tr>\n", | |
"<tr><td>al</td><td>ぬ </td><td></td></tr>\n", | |
"<tr><td>la</td><td>ぬ </td><td></td></tr>\n", | |
"<tr><td>ah</td><td>ね </td><td></td></tr>\n", | |
"<tr><td>ha</td><td>ね </td><td></td></tr>\n", | |
"<tr><td>a;</td><td>の </td><td></td></tr>\n", | |
"<tr><td>;a</td><td>の </td><td></td></tr>\n", | |
"<tr><td>au</td><td>ヵ </td><td></td></tr>\n", | |
"<tr><td>ua</td><td>ヵ </td><td></td></tr>\n", | |
"<tr><td>ai</td><td>ー </td><td></td></tr>\n", | |
"<tr><td>ia</td><td>ー </td><td></td></tr>\n", | |
"<tr><td>ao</td><td>ん </td><td></td></tr>\n", | |
"<tr><td>oa</td><td>ん </td><td></td></tr>\n", | |
"<tr><td>ay</td><td>・ </td><td></td></tr>\n", | |
"<tr><td>ya</td><td>・ </td><td></td></tr>\n", | |
"<tr><td>ap</td><td>ヶ </td><td></td></tr>\n", | |
"<tr><td>pa</td><td>ヶ </td><td></td></tr>\n", | |
"<tr><td>ej</td><td>は </td><td></td></tr>\n", | |
"<tr><td>je</td><td>は </td><td></td></tr>\n", | |
"<tr><td>ek</td><td>ひ </td><td></td></tr>\n", | |
"<tr><td>ke</td><td>ひ </td><td></td></tr>\n", | |
"<tr><td>el</td><td>ふ </td><td></td></tr>\n", | |
"<tr><td>le</td><td>ふ </td><td></td></tr>\n", | |
"<tr><td>eh</td><td>へ </td><td></td></tr>\n", | |
"<tr><td>he</td><td>へ </td><td></td></tr>\n", | |
"<tr><td>e;</td><td>ほ </td><td></td></tr>\n", | |
"<tr><td>;e</td><td>ほ </td><td></td></tr>\n", | |
"<tr><td>eu</td><td>ば </td><td></td></tr>\n", | |
"<tr><td>ue</td><td>ば </td><td></td></tr>\n", | |
"<tr><td>ei</td><td>び </td><td></td></tr>\n", | |
"<tr><td>ie</td><td>び </td><td></td></tr>\n", | |
"<tr><td>eo</td><td>ぶ </td><td></td></tr>\n", | |
"<tr><td>oe</td><td>ぶ </td><td></td></tr>\n", | |
"<tr><td>ey</td><td>べ </td><td></td></tr>\n", | |
"<tr><td>ye</td><td>べ </td><td></td></tr>\n", | |
"<tr><td>ep</td><td>ぼ </td><td></td></tr>\n", | |
"<tr><td>pe</td><td>ぼ </td><td></td></tr>\n", | |
"<tr><td>wj</td><td>ま </td><td></td></tr>\n", | |
"<tr><td>jw</td><td>ま </td><td></td></tr>\n", | |
"<tr><td>wk</td><td>み </td><td></td></tr>\n", | |
"<tr><td>kw</td><td>み </td><td></td></tr>\n", | |
"<tr><td>wl</td><td>む </td><td></td></tr>\n", | |
"<tr><td>lw</td><td>む </td><td></td></tr>\n", | |
"<tr><td>wh</td><td>め </td><td></td></tr>\n", | |
"<tr><td>hw</td><td>め </td><td></td></tr>\n", | |
"<tr><td>w;</td><td>も </td><td></td></tr>\n", | |
"<tr><td>;w</td><td>も </td><td></td></tr>\n", | |
"<tr><td>wu</td><td>ぱ </td><td></td></tr>\n", | |
"<tr><td>uw</td><td>ぱ </td><td></td></tr>\n", | |
"<tr><td>wi</td><td>ぴ </td><td></td></tr>\n", | |
"<tr><td>iw</td><td>ぴ </td><td></td></tr>\n", | |
"<tr><td>wo</td><td>ぷ </td><td></td></tr>\n", | |
"<tr><td>ow</td><td>ぷ </td><td></td></tr>\n", | |
"<tr><td>wy</td><td>ぺ </td><td></td></tr>\n", | |
"<tr><td>yw</td><td>ぺ </td><td></td></tr>\n", | |
"<tr><td>wp</td><td>ぽ </td><td></td></tr>\n", | |
"<tr><td>pw</td><td>ぽ </td><td></td></tr>\n", | |
"<tr><td>qj</td><td>や </td><td></td></tr>\n", | |
"<tr><td>jq</td><td>や </td><td></td></tr>\n", | |
"<tr><td>ql</td><td>ゆ </td><td></td></tr>\n", | |
"<tr><td>lq</td><td>ゆ </td><td></td></tr>\n", | |
"<tr><td>q;</td><td>よ </td><td></td></tr>\n", | |
"<tr><td>;q</td><td>よ </td><td></td></tr>\n", | |
"<tr><td>qu</td><td>ゃ </td><td></td></tr>\n", | |
"<tr><td>uq</td><td>ゃ </td><td></td></tr>\n", | |
"<tr><td>qi</td><td>。 </td><td></td></tr>\n", | |
"<tr><td>iq</td><td>。 </td><td></td></tr>\n", | |
"<tr><td>qo</td><td>ゅ </td><td></td></tr>\n", | |
"<tr><td>oq</td><td>ゅ </td><td></td></tr>\n", | |
"<tr><td>qp</td><td>、 </td><td></td></tr>\n", | |
"<tr><td>pq</td><td>、 </td><td></td></tr>\n", | |
"<tr><td>rj</td><td>ら </td><td></td></tr>\n", | |
"<tr><td>jr</td><td>ら </td><td></td></tr>\n", | |
"<tr><td>rk</td><td>り </td><td></td></tr>\n", | |
"<tr><td>kr</td><td>り </td><td></td></tr>\n", | |
"<tr><td>rl</td><td>る </td><td></td></tr>\n", | |
"<tr><td>lr</td><td>る </td><td></td></tr>\n", | |
"<tr><td>rh</td><td>れ </td><td></td></tr>\n", | |
"<tr><td>hr</td><td>れ </td><td></td></tr>\n", | |
"<tr><td>r;</td><td>ろ </td><td></td></tr>\n", | |
"<tr><td>;r</td><td>ろ </td><td></td></tr>\n", | |
"<tr><td>ro</td><td>っ </td><td></td></tr>\n", | |
"<tr><td>or</td><td>っ </td><td></td></tr>\n", | |
"<tr><td>tj</td><td>わ </td><td></td></tr>\n", | |
"<tr><td>jt</td><td>わ </td><td></td></tr>\n", | |
"<tr><td>tk</td><td>ゐ </td><td></td></tr>\n", | |
"<tr><td>kt</td><td>ゐ </td><td></td></tr>\n", | |
"<tr><td>tl</td><td>ゔ</td><td></td></tr>\n", | |
"<tr><td>lt</td><td>ゔ</td><td></td></tr>\n", | |
"<tr><td>th</td><td>ゑ </td><td></td></tr>\n", | |
"<tr><td>ht</td><td>ゑ </td><td></td></tr>\n", | |
"<tr><td>t;</td><td>を </td><td></td></tr>\n", | |
"<tr><td>;t</td><td>を </td><td></td></tr>\n", | |
"</tbody>\n", | |
"</table>" | |
], | |
"text/plain": [ | |
"<IPython.core.display.HTML object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"keyboard_c_raw = \"xdkssgtfnahemwyqrrwt\"\n", | |
"keyboard_c = dict((keyboard_c_raw[i:i+2]) for i in range(0, 20, 2))\n", | |
"keyboard_v_raw = \"ajikuleho;AuIiUoEyOp\"\n", | |
"keyboard_v = dict((keyboard_v_raw[i:i+2]) for i in range(0, 20, 2))\n", | |
"def conv_keyboard(cs):\n", | |
" c, v = list(cs)\n", | |
" if v.isupper():\n", | |
" return (\"#\" + c + v.lower(), c, \"z\" + v.lower())\n", | |
" else:\n", | |
" return (c + v, c, v)\n", | |
"res = []\n", | |
"\n", | |
"for c, kc in keyboard_c.items():\n", | |
" for v, kv in keyboard_v.items():\n", | |
" k, tc, tv = conv_keyboard(c+v)\n", | |
" if k in master:\n", | |
" m = master[k]\n", | |
" h = kata.get(m, m)\n", | |
" res.append([kc+kv, h, \"\"])\n", | |
" res.append([kv+kc, h, \"\"])\n", | |
"\n", | |
"display_table(res)\n", | |
"with open(\"wass-phonix.tsv\", \"w\") as f:\n", | |
" for l in res:\n", | |
" f.write(\"\\t\".join(l)+\"\\n\")" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1090, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"[('キ', 'ギ'),\n", | |
" ('ク', 'グ'),\n", | |
" ('ケ', 'ゲ'),\n", | |
" ('サ', 'ザ'),\n", | |
" ('ス', 'ズ'),\n", | |
" ('セ', 'ゼ'),\n", | |
" ('ソ', 'ゾ'),\n", | |
" ('チ', 'ヂ'),\n", | |
" ('ッ', 'ツ'),\n", | |
" ('ト', 'ド'),\n", | |
" ('ハ', 'バ'),\n", | |
" ('ヒ', 'ビ'),\n", | |
" ('ブ', 'フ'),\n", | |
" ('ヘ', 'ペ'),\n", | |
" ('ホ', 'ボ'),\n", | |
" ('ヤ', 'ャ'),\n", | |
" ('ュ', 'ユ'),\n", | |
" ('ー', '〜')]" | |
] | |
}, | |
"execution_count": 1090, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"keys.double = [(k, b) if gram1_pure.get(k, 1) > gram1_pure.get(b, 0) else (b, k) for k, b in keys.double]\n", | |
"keys.double" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 921, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"['ヌ',\n", | |
" 'ピ',\n", | |
" 'ペ',\n", | |
" 'ヅ',\n", | |
" 'パ',\n", | |
" 'プ',\n", | |
" 'ポ',\n", | |
" 'ロ',\n", | |
" 'ネ',\n", | |
" 'ム',\n", | |
" 'ワ',\n", | |
" 'ミ',\n", | |
" 'メ',\n", | |
" 'ヲ',\n", | |
" 'エ',\n", | |
" 'ヨ',\n", | |
" 'レ',\n", | |
" 'モ',\n", | |
" 'オ',\n", | |
" 'ラ',\n", | |
" 'ダ',\n", | |
" 'ア',\n", | |
" 'ョ',\n", | |
" 'リ',\n", | |
" 'ジ',\n", | |
" 'コ',\n", | |
" 'ガ',\n", | |
" 'ニ',\n", | |
" 'マ',\n", | |
" 'ル',\n", | |
" 'テ',\n", | |
" 'デ',\n", | |
" 'タ',\n", | |
" 'ナ',\n", | |
" 'ノ',\n", | |
" 'シ',\n", | |
" 'カ',\n", | |
" 'ウ',\n", | |
" 'ン',\n", | |
" 'イ']" | |
] | |
}, | |
"execution_count": 921, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"keys.singles = [k for k, _ in keys.single if k != \"゛\"] + [k for _, k in keys.single if k is not None]\n", | |
"keys.singles.sort(key=lambda x: gram1_pure.get(x, 0))\n", | |
"keys.singles" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 922, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"g1 = list(reversed(sorted(((k, v) for k, v in gram1.items()), key=lambda x:x[1])))\n", | |
"c1, g1 = list(map(list, zip(*g1)))" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 923, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"class Key:\n", | |
" def __init__(self, key, back):\n", | |
" self.key = key\n", | |
" self.back = back\n", | |
" self.single = None\n", | |
" def string(self):\n", | |
" return \"%s%s\" % \\\n", | |
" (self.key, self.back if self.back is not None else \"-\")\n", | |
" def copy(self):\n", | |
" k = Key(self.key, self.back)\n", | |
" k.single = self.single\n", | |
" return k" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 924, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"class Info:\n", | |
" def __init__(self, y, x):\n", | |
" self.pos = (y, x)\n", | |
" self.press = [100, 10, 0, 20][y] + [1, 0, 0, 0, 1, 1, 0, 0, 0, 10, 20, 30][x]\n", | |
" self.finger = [1, 2, 3, 4, 4, 5, 5, 6, 7, 8, 8, 8][x]\n", | |
" self.hand = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1][x]" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 925, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import random\n", | |
"from copy import deepcopy\n", | |
"LAYOUT_H = 4\n", | |
"LAYOUT_W=12\n", | |
"HOLD = [((2, 9), (\"@\", None)), ((2, 8), (\"゛\", None)), ((2, 0), (\"゛\", None))]\n", | |
"class Layout:\n", | |
" def __init__(self):\n", | |
" self.layout = [[Key(\"A\", \"B\") for j in range(LAYOUT_W)] for i in range(LAYOUT_H)]\n", | |
" self.info = [[Info(i, j) for j in range(LAYOUT_W)] for i in range(LAYOUT_H)]\n", | |
" def set_single(self):\n", | |
" singles = list(map(lambda x:x[0], keys.single))\n", | |
" for k, _ in self.keys():\n", | |
" k.single = k.key in singles\n", | |
" def keys(self):\n", | |
" return (k for l, i in zip(self.layout, self.info) for k in zip(l, i))\n", | |
" def evaluate(self):\n", | |
" gram1_w = 1\n", | |
" back_w = 0.5\n", | |
" samehand_w = 1\n", | |
" samefinger_w = 5\n", | |
" \n", | |
" press = 0\n", | |
" back_press = 0\n", | |
" for k, f in self.keys():\n", | |
" press += gram1_pure.get(k.key, 0) * f.press * gram1_w\n", | |
" back_press += back_w * gram1_pure.get(k.back, 0) * f.press * gram1_w\n", | |
"\n", | |
" hand_res = 0\n", | |
" finger_res = 0\n", | |
" for k1, f1 in self.keys():\n", | |
" for k2, f2 in self.keys():\n", | |
" c = typing(k1.key + k2.key)[0:2]\n", | |
" w = gram2.get(c, 0)\n", | |
" if f1.hand == f2.hand:\n", | |
" hand_res += samehand_w * w\n", | |
" if f1.finger == f2.finger:\n", | |
" finger_res += samefinger_w * w\n", | |
" return (hand_res + finger_res + press + back_press, {\n", | |
" \"hand\": hand_res,\n", | |
" \"finger\": finger_res,\n", | |
" \"front\": press,\n", | |
" \"back\": back_press\n", | |
" })\n", | |
" def swap(self, x, y):\n", | |
" k = self.layout[x[0]][x[1]]\n", | |
" self.layout[x[0]][x[1]] = self.layout[y[0]][y[1]]\n", | |
" self.layout[y[0]][y[1]] = k\n", | |
" def swap_key(self, x):\n", | |
" k = self.layout[x[0]][x[1]]\n", | |
" t = k.key\n", | |
" k.key = k.back\n", | |
" k.back = t\n", | |
" def swap_back(self, x, y):\n", | |
" k = self.layout[x[0]][x[1]].back\n", | |
" self.layout[x[0]][x[1]].back = self.layout[y[0]][y[1]].back\n", | |
" self.layout[y[0]][y[1]].back = k\n", | |
" def random_swap(self):\n", | |
" def remove_hold(xs):\n", | |
" return [x for x in xs if x not in [p for p, _ in HOLD]]\n", | |
" def randpos():\n", | |
" c = remove_hold((y, x) for y in range(LAYOUT_H) for x in range(LAYOUT_W))\n", | |
" return random.choice(c)\n", | |
" def rand_single():\n", | |
" c = remove_hold([p.pos for k, p in self.keys() if k.single])\n", | |
" return random.choice(c)\n", | |
" l = self.copy()\n", | |
" if random.random() < 0.5:\n", | |
" l.swap(randpos(), randpos())\n", | |
" else:\n", | |
" l.swap_back(rand_single(), rand_single())\n", | |
" return l\n", | |
" def random_step(self, swap = 5, step = 100):\n", | |
" l = self\n", | |
" e = self.evaluate()[0]\n", | |
" for i in range(step):\n", | |
" t = l\n", | |
" for _ in range(random.randint(1, swap)):\n", | |
" t = l.random_swap()\n", | |
" f = t.evaluate()[0]\n", | |
" if f < e:\n", | |
" l = t\n", | |
" e = f\n", | |
" return l\n", | |
" def random_climb(self, climb = 100, step = 100, swap = 5):\n", | |
" l = self\n", | |
" e = self.evaluate()\n", | |
" g = self\n", | |
" for i in range(climb):\n", | |
" t = self.random_step(swap, step)\n", | |
" f = t.evaluate()\n", | |
" l = t\n", | |
" if f[0] < e[0]:\n", | |
" print(f)\n", | |
" g = t\n", | |
" e = f\n", | |
" return g\n", | |
" def print(self):\n", | |
" for y in self.layout:\n", | |
" for x in y:\n", | |
" print(x.string(), end=\"|\")\n", | |
" print()\n", | |
" def print_layout(self):\n", | |
" table = [[k.key for k in l] for l in self.layout] + \\\n", | |
" [[]] + \\\n", | |
" [[k.back if k.back is not None else \"-\" for k in l] for l in self.layout]\n", | |
" display_table(table)\n", | |
" def copy(self):\n", | |
" l = Layout()\n", | |
" l.layout = [[k.copy() for k in l] for l in self.layout] \n", | |
" return l\n", | |
" @staticmethod\n", | |
" def random():\n", | |
" layout = Layout()\n", | |
" ks = [(k, None) for k in keys.singles] + keys.double\n", | |
" hold = HOLD[:]\n", | |
" for k, p in layout.keys():\n", | |
" if len(hold) > 0 and p.pos == hold[len(hold)-1][0]:\n", | |
" c = hold.pop()[1]\n", | |
" else:\n", | |
" c = ks.pop()\n", | |
" k.key = c[0]\n", | |
" k.back = c[1]\n", | |
" for k, p in layout.keys():\n", | |
" if len(ks) == 0: break\n", | |
" if k.back is not None: continue\n", | |
" c = ks.pop()\n", | |
" k.back = c[0]\n", | |
" layout.set_single()\n", | |
" return layout" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 927, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<table>\n", | |
"<tbody>\n", | |
"<tr><td>ー</td><td>ュ</td><td>ヤ</td><td>ホ</td><td>ヘ</td><td>ブ</td><td>ヒ</td><td>ハ</td><td>ト</td><td>ッ</td><td>チ</td><td>ソ</td></tr>\n", | |
"<tr><td>セ</td><td>ス</td><td>サ</td><td>ケ</td><td>ク</td><td>キ</td><td>イ</td><td>ン</td><td>ウ</td><td>カ</td><td>シ</td><td>ノ</td></tr>\n", | |
"<tr><td>゛</td><td>ナ</td><td>タ</td><td>デ</td><td>テ</td><td>ル</td><td>マ</td><td>ニ</td><td>゛</td><td>@ </td><td>ガ</td><td>コ</td></tr>\n", | |
"<tr><td>ジ</td><td>リ</td><td>ョ</td><td>ア</td><td>ダ</td><td>ラ</td><td>オ</td><td>モ</td><td>レ</td><td>ヨ</td><td>エ</td><td>ヲ</td></tr>\n", | |
"<tr><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>\n", | |
"<tr><td>〜</td><td>ユ</td><td>ャ</td><td>ボ</td><td>ペ</td><td>フ</td><td>ビ</td><td>バ</td><td>ド</td><td>ツ</td><td>ヂ</td><td>ゾ</td></tr>\n", | |
"<tr><td>ゼ</td><td>ズ</td><td>ザ</td><td>ゲ</td><td>グ</td><td>ギ</td><td>メ</td><td>ミ</td><td>ワ</td><td>ム</td><td>ネ</td><td>ロ</td></tr>\n", | |
"<tr><td>ポ</td><td>プ</td><td>パ</td><td>ヅ</td><td>ペ</td><td>ピ</td><td>ヌ</td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td></tr>\n", | |
"<tr><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td></tr>\n", | |
"</tbody>\n", | |
"</table>" | |
], | |
"text/plain": [ | |
"<IPython.core.display.HTML object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"(21.629534099116793, {'hand': 0.39129205368876097, 'finger': 0.4639484594384564, 'front': 18.760037452391433, 'back': 2.0142561335981406})\n" | |
] | |
} | |
], | |
"source": [ | |
"l = Layout.random()\n", | |
"l.print_layout()\n", | |
"print(l.evaluate())" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 928, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<table>\n", | |
"<tbody>\n", | |
"<tr><td>ュ</td><td>ー</td><td>ヤ</td><td>ホ</td><td>ヘ</td><td>ブ</td><td>ヒ</td><td>ハ</td><td>ト</td><td>ッ</td><td>チ</td><td>ソ</td></tr>\n", | |
"<tr><td>セ</td><td>ス</td><td>サ</td><td>ケ</td><td>ク</td><td>キ</td><td>イ</td><td>ン</td><td>ウ</td><td>カ</td><td>シ</td><td>ノ</td></tr>\n", | |
"<tr><td>゛</td><td>ナ</td><td>タ</td><td>デ</td><td>テ</td><td>ル</td><td>マ</td><td>ニ</td><td>゛</td><td>@ </td><td>ガ</td><td>コ</td></tr>\n", | |
"<tr><td>ジ</td><td>リ</td><td>ョ</td><td>ア</td><td>ダ</td><td>ラ</td><td>オ</td><td>モ</td><td>レ</td><td>ヨ</td><td>エ</td><td>ヲ</td></tr>\n", | |
"<tr><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>\n", | |
"<tr><td>ユ</td><td>〜</td><td>ャ</td><td>ボ</td><td>ペ</td><td>フ</td><td>ビ</td><td>バ</td><td>ド</td><td>ツ</td><td>ヂ</td><td>ゾ</td></tr>\n", | |
"<tr><td>ゼ</td><td>ズ</td><td>ザ</td><td>ゲ</td><td>グ</td><td>ギ</td><td>メ</td><td>ミ</td><td>ワ</td><td>ム</td><td>ネ</td><td>ロ</td></tr>\n", | |
"<tr><td>ポ</td><td>プ</td><td>パ</td><td>ヅ</td><td>ペ</td><td>ピ</td><td>ヌ</td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td></tr>\n", | |
"<tr><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td></tr>\n", | |
"</tbody>\n", | |
"</table>" | |
], | |
"text/plain": [ | |
"<IPython.core.display.HTML object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"(21.642774673015523, {'hand': 0.39129205368876097, 'finger': 0.4790530011758144, 'front': 18.757839912175292, 'back': 2.014589705975656})\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/html": [ | |
"<table>\n", | |
"<tbody>\n", | |
"<tr><td>ユ</td><td>ー</td><td>ヤ</td><td>ホ</td><td>ヘ</td><td>ブ</td><td>ヒ</td><td>ハ</td><td>ト</td><td>ッ</td><td>チ</td><td>ソ</td></tr>\n", | |
"<tr><td>セ</td><td>ス</td><td>サ</td><td>ケ</td><td>ク</td><td>キ</td><td>イ</td><td>ン</td><td>ウ</td><td>カ</td><td>シ</td><td>ノ</td></tr>\n", | |
"<tr><td>゛</td><td>ナ</td><td>タ</td><td>デ</td><td>テ</td><td>ル</td><td>マ</td><td>ニ</td><td>゛</td><td>@ </td><td>ガ</td><td>コ</td></tr>\n", | |
"<tr><td>ジ</td><td>リ</td><td>ョ</td><td>ア</td><td>ダ</td><td>ラ</td><td>オ</td><td>モ</td><td>レ</td><td>ヨ</td><td>エ</td><td>ヲ</td></tr>\n", | |
"<tr><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>\n", | |
"<tr><td>ュ</td><td>〜</td><td>ャ</td><td>ボ</td><td>ペ</td><td>フ</td><td>ビ</td><td>バ</td><td>ド</td><td>ツ</td><td>ヂ</td><td>ゾ</td></tr>\n", | |
"<tr><td>ゼ</td><td>ズ</td><td>ザ</td><td>ゲ</td><td>グ</td><td>ギ</td><td>メ</td><td>ミ</td><td>ワ</td><td>ム</td><td>ネ</td><td>ロ</td></tr>\n", | |
"<tr><td>ポ</td><td>プ</td><td>パ</td><td>ヅ</td><td>ペ</td><td>ピ</td><td>ヌ</td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td></tr>\n", | |
"<tr><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td></tr>\n", | |
"</tbody>\n", | |
"</table>" | |
], | |
"text/plain": [ | |
"<IPython.core.display.HTML object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"(21.467994993653356, {'hand': 0.4195136439274633, 'finger': 0.4946050848905754, 'front': 18.320733205544027, 'back': 2.2331430592912884})\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/html": [ | |
"<table>\n", | |
"<tbody>\n", | |
"<tr><td>ユ</td><td>ー</td><td>ヤ</td><td>ホ</td><td>ヘ</td><td>ブ</td><td>ヒ</td><td>ハ</td><td>ト</td><td>ッ</td><td>チ</td><td>ソ</td></tr>\n", | |
"<tr><td>セ</td><td>ス</td><td>サ</td><td>ケ</td><td>ク</td><td>キ</td><td>イ</td><td>ン</td><td>ウ</td><td>カ</td><td>シ</td><td>ノ</td></tr>\n", | |
"<tr><td>゛</td><td>ナ</td><td>タ</td><td>デ</td><td>テ</td><td>ル</td><td>マ</td><td>ニ</td><td>゛</td><td>@ </td><td>ガ</td><td>コ</td></tr>\n", | |
"<tr><td>ジ</td><td>リ</td><td>ョ</td><td>ア</td><td>ダ</td><td>ラ</td><td>オ</td><td>モ</td><td>レ</td><td>ヨ</td><td>エ</td><td>ヲ</td></tr>\n", | |
"<tr><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>\n", | |
"<tr><td>〜</td><td>ュ</td><td>ャ</td><td>ボ</td><td>ペ</td><td>フ</td><td>ビ</td><td>バ</td><td>ド</td><td>ツ</td><td>ヂ</td><td>ゾ</td></tr>\n", | |
"<tr><td>ゼ</td><td>ズ</td><td>ザ</td><td>ゲ</td><td>グ</td><td>ギ</td><td>メ</td><td>ミ</td><td>ワ</td><td>ム</td><td>ネ</td><td>ロ</td></tr>\n", | |
"<tr><td>ポ</td><td>プ</td><td>パ</td><td>ヅ</td><td>ペ</td><td>ピ</td><td>ヌ</td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td></tr>\n", | |
"<tr><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td></tr>\n", | |
"</tbody>\n", | |
"</table>" | |
], | |
"text/plain": [ | |
"<IPython.core.display.HTML object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"(21.465497526688555, {'hand': 0.4195136439274633, 'finger': 0.4946050848905754, 'front': 18.320733205544027, 'back': 2.2306455923264896})\n" | |
] | |
} | |
], | |
"source": [ | |
"l.swap((0,0), (0, 1))\n", | |
"l.print_layout()\n", | |
"print(l.evaluate())\n", | |
"l.swap_key((0,0))\n", | |
"l.print_layout()\n", | |
"print(l.evaluate())\n", | |
"l.swap_back((0,0),(0,1))\n", | |
"l.print_layout()\n", | |
"print(l.evaluate())" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 929, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<table>\n", | |
"<tbody>\n", | |
"<tr><td>ユ</td><td>ー</td><td>ヤ</td><td>ホ</td><td>ヘ</td><td>ブ</td><td>ヒ</td><td>ハ</td><td>ト</td><td>ッ</td><td>チ</td><td>ソ</td></tr>\n", | |
"<tr><td>セ</td><td>ス</td><td>サ</td><td>ケ</td><td>ク</td><td>キ</td><td>イ</td><td>ン</td><td>ウ</td><td>カ</td><td>シ</td><td>ノ</td></tr>\n", | |
"<tr><td>゛</td><td>ナ</td><td>タ</td><td>デ</td><td>テ</td><td>ル</td><td>マ</td><td>ニ</td><td>゛</td><td>@ </td><td>ガ</td><td>コ</td></tr>\n", | |
"<tr><td>ジ</td><td>リ</td><td>ョ</td><td>ア</td><td>ダ</td><td>ラ</td><td>オ</td><td>モ</td><td>レ</td><td>ヨ</td><td>エ</td><td>ヲ</td></tr>\n", | |
"<tr><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>\n", | |
"<tr><td>〜</td><td>ュ</td><td>ャ</td><td>ボ</td><td>ペ</td><td>フ</td><td>ビ</td><td>バ</td><td>ド</td><td>ツ</td><td>ヂ</td><td>ゾ</td></tr>\n", | |
"<tr><td>ゼ</td><td>ズ</td><td>ザ</td><td>ゲ</td><td>グ</td><td>ギ</td><td>メ</td><td>ミ</td><td>ワ</td><td>ム</td><td>ネ</td><td>ロ</td></tr>\n", | |
"<tr><td>ポ</td><td>プ</td><td>パ</td><td>ヅ</td><td>ペ</td><td>ピ</td><td>ヌ</td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td></tr>\n", | |
"<tr><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td></tr>\n", | |
"</tbody>\n", | |
"</table>" | |
], | |
"text/plain": [ | |
"<IPython.core.display.HTML object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"data": { | |
"text/html": [ | |
"<table>\n", | |
"<tbody>\n", | |
"<tr><td>ユ</td><td>ー</td><td>ヤ</td><td>ホ</td><td>ヘ</td><td>ブ</td><td>ヒ</td><td>ハ</td><td>ト</td><td>ッ</td><td>チ</td><td>ソ</td></tr>\n", | |
"<tr><td>セ</td><td>ス</td><td>サ</td><td>ケ</td><td>ク</td><td>キ</td><td>イ</td><td>ン</td><td>ウ</td><td>カ</td><td>シ</td><td>ノ</td></tr>\n", | |
"<tr><td>゛</td><td>ナ</td><td>モ</td><td>デ</td><td>テ</td><td>ル</td><td>マ</td><td>ニ</td><td>゛</td><td>@ </td><td>ガ</td><td>コ</td></tr>\n", | |
"<tr><td>ジ</td><td>リ</td><td>ョ</td><td>ア</td><td>ダ</td><td>ラ</td><td>オ</td><td>タ</td><td>レ</td><td>ヨ</td><td>エ</td><td>ヲ</td></tr>\n", | |
"<tr><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>\n", | |
"<tr><td>〜</td><td>ュ</td><td>ャ</td><td>ボ</td><td>ペ</td><td>フ</td><td>ビ</td><td>バ</td><td>ド</td><td>ツ</td><td>ヂ</td><td>ゾ</td></tr>\n", | |
"<tr><td>ゼ</td><td>ズ</td><td>ザ</td><td>ゲ</td><td>グ</td><td>ギ</td><td>メ</td><td>ミ</td><td>ワ</td><td>ム</td><td>ネ</td><td>ロ</td></tr>\n", | |
"<tr><td>ポ</td><td>プ</td><td>- </td><td>ヅ</td><td>ペ</td><td>ピ</td><td>ヌ</td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td></tr>\n", | |
"<tr><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td><td>パ</td><td>- </td><td>- </td><td>- </td><td>- </td></tr>\n", | |
"</tbody>\n", | |
"</table>" | |
], | |
"text/plain": [ | |
"<IPython.core.display.HTML object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"u = l.random_swap()\n", | |
"l.print_layout()\n", | |
"u.print_layout()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 930, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"(21.629534099116793, {'hand': 0.39129205368876097, 'finger': 0.4639484594384564, 'front': 18.760037452391433, 'back': 2.0142561335981406})\n", | |
"(18.24274589849027, {'hand': 0.36372143359900916, 'finger': 0.34568549190966125, 'front': 16.662167124567656, 'back': 0.8711718484139452})\n" | |
] | |
} | |
], | |
"source": [ | |
"l = Layout.random()\n", | |
"print(l.evaluate())\n", | |
"g = l.random_step()\n", | |
"print(g.evaluate())" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 933, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"(15.34576342215877, {'hand': 0.32902675894168393, 'finger': 0.27405843270799496, 'front': 13.842226994560948, 'back': 0.9004512359481434})\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/html": [ | |
"<table>\n", | |
"<tbody>\n", | |
"<tr><td>ー</td><td>ソ</td><td>ヲ</td><td>レ</td><td>セ</td><td>ブ</td><td>ヤ</td><td>ュ</td><td>エ</td><td>ホ</td><td>ヒ</td><td>ヘ</td></tr>\n", | |
"<tr><td>テ</td><td>ス</td><td>ク</td><td>ル</td><td>ッ</td><td>ハ</td><td>タ</td><td>デ</td><td>ナ</td><td>ガ</td><td>モ</td><td>チ</td></tr>\n", | |
"<tr><td>゛</td><td>ン</td><td>イ</td><td>シ</td><td>ウ</td><td>ノ</td><td>ト</td><td>カ</td><td>゛</td><td>@ </td><td>オ</td><td>ョ</td></tr>\n", | |
"<tr><td>ラ</td><td>リ</td><td>キ</td><td>ジ</td><td>ニ</td><td>ア</td><td>マ</td><td>コ</td><td>ダ</td><td>サ</td><td>ヨ</td><td>ケ</td></tr>\n", | |
"<tr><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>\n", | |
"<tr><td>〜</td><td>ゾ</td><td>- </td><td>- </td><td>ゼ</td><td>フ</td><td>ャ</td><td>ユ</td><td>- </td><td>ボ</td><td>ビ</td><td>ペ</td></tr>\n", | |
"<tr><td>ヌ</td><td>ズ</td><td>グ</td><td>ペ</td><td>ツ</td><td>バ</td><td>プ</td><td>ヅ</td><td>パ</td><td>- </td><td>- </td><td>ヂ</td></tr>\n", | |
"<tr><td>ポ</td><td>ミ</td><td>メ</td><td>ワ</td><td>ム</td><td>ロ</td><td>ド</td><td>ネ</td><td>- </td><td>- </td><td>- </td><td>- </td></tr>\n", | |
"<tr><td>- </td><td>ピ</td><td>ギ</td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td><td>ザ</td><td>- </td><td>ゲ</td></tr>\n", | |
"</tbody>\n", | |
"</table>" | |
], | |
"text/plain": [ | |
"<IPython.core.display.HTML object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"(15.345614420088122, {'hand': 0.32902675894168393, 'finger': 0.27405843270799496, 'front': 13.842226994560948, 'back': 0.9003022338774952})\n", | |
"(15.333889262546261, {'hand': 0.32902675894168393, 'finger': 0.26372428159341216, 'front': 13.840886937228793, 'back': 0.9002512847823704})\n", | |
"(15.328559363338911, {'hand': 0.3290267589416841, 'finger': 0.2638565099049177, 'front': 13.826630803630653, 'back': 0.9090452908616549})\n", | |
"(15.324164519279378, {'hand': 0.31718927363936955, 'finger': 0.2676606167128447, 'front': 13.838881657748972, 'back': 0.9004329711781929})\n", | |
"(15.316119231773085, {'hand': 0.321371756846374, 'finger': 0.2682912440446402, 'front': 13.82555606611462, 'back': 0.9009001647674509})\n", | |
"(15.315595024318366, {'hand': 0.32902675894168415, 'finger': 0.24389003486758876, 'front': 13.84222699456095, 'back': 0.9004512359481434})\n", | |
"(15.315595024318366, {'hand': 0.32902675894168415, 'finger': 0.24389003486758876, 'front': 13.84222699456095, 'back': 0.9004512359481434})\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/html": [ | |
"<table>\n", | |
"<tbody>\n", | |
"<tr><td>ー</td><td>ソ</td><td>ヲ</td><td>レ</td><td>セ</td><td>ブ</td><td>ヤ</td><td>ュ</td><td>エ</td><td>ホ</td><td>ヒ</td><td>ヘ</td></tr>\n", | |
"<tr><td>テ</td><td>ス</td><td>ク</td><td>ル</td><td>ッ</td><td>ハ</td><td>タ</td><td>デ</td><td>ナ</td><td>コ</td><td>モ</td><td>チ</td></tr>\n", | |
"<tr><td>゛</td><td>ン</td><td>イ</td><td>シ</td><td>ウ</td><td>ノ</td><td>ト</td><td>カ</td><td>゛</td><td>@ </td><td>オ</td><td>ア</td></tr>\n", | |
"<tr><td>ラ</td><td>リ</td><td>キ</td><td>ジ</td><td>ニ</td><td>ョ</td><td>マ</td><td>ガ</td><td>ダ</td><td>サ</td><td>ヨ</td><td>ケ</td></tr>\n", | |
"<tr><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>\n", | |
"<tr><td>〜</td><td>ゾ</td><td>- </td><td>- </td><td>ゼ</td><td>フ</td><td>ャ</td><td>ユ</td><td>- </td><td>ボ</td><td>ビ</td><td>ペ</td></tr>\n", | |
"<tr><td>ヌ</td><td>ズ</td><td>グ</td><td>ペ</td><td>ツ</td><td>バ</td><td>プ</td><td>ヅ</td><td>パ</td><td>- </td><td>- </td><td>ヂ</td></tr>\n", | |
"<tr><td>ポ</td><td>ミ</td><td>メ</td><td>ワ</td><td>ム</td><td>ロ</td><td>ド</td><td>ネ</td><td>- </td><td>- </td><td>- </td><td>- </td></tr>\n", | |
"<tr><td>- </td><td>ピ</td><td>ギ</td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td><td>ザ</td><td>- </td><td>ゲ</td></tr>\n", | |
"</tbody>\n", | |
"</table>" | |
], | |
"text/plain": [ | |
"<IPython.core.display.HTML object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"(15.2991416710638, {'hand': 0.32137175684637415, 'finger': 0.23885518762180277, 'front': 13.838210667779219, 'back': 0.9007040588164045})\n", | |
"(15.295740691759764, {'hand': 0.3260750161725386, 'finger': 0.23326091290426276, 'front': 13.836101567501785, 'back': 0.9003031951811769})\n", | |
"(15.295740691759764, {'hand': 0.3260750161725386, 'finger': 0.23326091290426276, 'front': 13.836101567501785, 'back': 0.9003031951811769})\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/html": [ | |
"<table>\n", | |
"<tbody>\n", | |
"<tr><td>エ</td><td>ソ</td><td>ー</td><td>レ</td><td>セ</td><td>ブ</td><td>ヤ</td><td>ュ</td><td>ヲ</td><td>ホ</td><td>ヒ</td><td>ヘ</td></tr>\n", | |
"<tr><td>テ</td><td>ス</td><td>ク</td><td>ル</td><td>ッ</td><td>ハ</td><td>タ</td><td>デ</td><td>ナ</td><td>コ</td><td>モ</td><td>チ</td></tr>\n", | |
"<tr><td>゛</td><td>ン</td><td>イ</td><td>シ</td><td>ウ</td><td>ノ</td><td>ト</td><td>カ</td><td>゛</td><td>@ </td><td>ニ</td><td>ア</td></tr>\n", | |
"<tr><td>ラ</td><td>リ</td><td>キ</td><td>ジ</td><td>オ</td><td>ョ</td><td>マ</td><td>ガ</td><td>ダ</td><td>サ</td><td>ヨ</td><td>ケ</td></tr>\n", | |
"<tr><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>\n", | |
"<tr><td>- </td><td>ゾ</td><td>〜</td><td>- </td><td>ゼ</td><td>フ</td><td>ャ</td><td>ユ</td><td>- </td><td>ボ</td><td>ビ</td><td>ペ</td></tr>\n", | |
"<tr><td>ヌ</td><td>ズ</td><td>グ</td><td>ペ</td><td>ツ</td><td>バ</td><td>プ</td><td>ヅ</td><td>パ</td><td>- </td><td>- </td><td>ヂ</td></tr>\n", | |
"<tr><td>ポ</td><td>ミ</td><td>メ</td><td>ワ</td><td>ム</td><td>ロ</td><td>ド</td><td>ネ</td><td>- </td><td>- </td><td>- </td><td>- </td></tr>\n", | |
"<tr><td>- </td><td>ピ</td><td>ギ</td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td><td>ザ</td><td>- </td><td>ゲ</td></tr>\n", | |
"</tbody>\n", | |
"</table>" | |
], | |
"text/plain": [ | |
"<IPython.core.display.HTML object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"(15.286402839180342, {'hand': 0.3270779170582651, 'finger': 0.22306916150976264, 'front': 13.836101567501785, 'back': 0.9001541931105287})\n", | |
"(15.263862775871354, {'hand': 0.3088283757887919, 'finger': 0.21788174313531644, 'front': 13.836768712256816, 'back': 0.9003839446904313})\n", | |
"(15.263862775871354, {'hand': 0.3088283757887919, 'finger': 0.21788174313531644, 'front': 13.836768712256816, 'back': 0.9003839446904313})\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/html": [ | |
"<table>\n", | |
"<tbody>\n", | |
"<tr><td>エ</td><td>ソ</td><td>ー</td><td>レ</td><td>セ</td><td>ブ</td><td>ヤ</td><td>ュ</td><td>ヲ</td><td>ホ</td><td>ヒ</td><td>ヘ</td></tr>\n", | |
"<tr><td>デ</td><td>ス</td><td>ク</td><td>ル</td><td>ッ</td><td>ハ</td><td>タ</td><td>テ</td><td>ナ</td><td>コ</td><td>モ</td><td>チ</td></tr>\n", | |
"<tr><td>゛</td><td>ン</td><td>イ</td><td>シ</td><td>ウ</td><td>ノ</td><td>ト</td><td>カ</td><td>゛</td><td>@ </td><td>ジ</td><td>ア</td></tr>\n", | |
"<tr><td>ラ</td><td>リ</td><td>キ</td><td>ニ</td><td>オ</td><td>ョ</td><td>マ</td><td>ガ</td><td>ダ</td><td>サ</td><td>ヨ</td><td>ケ</td></tr>\n", | |
"<tr><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>\n", | |
"<tr><td>- </td><td>ゾ</td><td>〜</td><td>- </td><td>ゼ</td><td>フ</td><td>ャ</td><td>ユ</td><td>- </td><td>ボ</td><td>ビ</td><td>ペ</td></tr>\n", | |
"<tr><td>ヅ</td><td>ズ</td><td>グ</td><td>ペ</td><td>ツ</td><td>バ</td><td>プ</td><td>ヌ</td><td>パ</td><td>- </td><td>- </td><td>ヂ</td></tr>\n", | |
"<tr><td>ポ</td><td>ミ</td><td>メ</td><td>ワ</td><td>ム</td><td>ロ</td><td>ド</td><td>ネ</td><td>- </td><td>- </td><td>- </td><td>- </td></tr>\n", | |
"<tr><td>- </td><td>ピ</td><td>ギ</td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td><td>ザ</td><td>- </td><td>ゲ</td></tr>\n", | |
"</tbody>\n", | |
"</table>" | |
], | |
"text/plain": [ | |
"<IPython.core.display.HTML object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"(15.261205901229165, {'hand': 0.30882837578879185, 'finger': 0.2137521512529143, 'front': 13.838241429497028, 'back': 0.9003839446904313})\n", | |
"(15.260109526106314, {'hand': 0.30882837578879185, 'finger': 0.2141284933702761, 'front': 13.836768712256816, 'back': 0.9003839446904313})\n", | |
"(15.259960524035666, {'hand': 0.30882837578879185, 'finger': 0.2141284933702761, 'front': 13.836768712256816, 'back': 0.9002349426197831})\n", | |
"(15.252237067009535, {'hand': 0.3088283757887919, 'finger': 0.20433342691029233, 'front': 13.840631230449489, 'back': 0.8984440338609608})\n", | |
"(15.252237067009535, {'hand': 0.3088283757887919, 'finger': 0.20433342691029233, 'front': 13.840631230449489, 'back': 0.8984440338609608})\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/html": [ | |
"<table>\n", | |
"<tbody>\n", | |
"<tr><td>エ</td><td>ソ</td><td>ー</td><td>レ</td><td>セ</td><td>ブ</td><td>ヤ</td><td>ュ</td><td>ヲ</td><td>ホ</td><td>ヒ</td><td>ヘ</td></tr>\n", | |
"<tr><td>デ</td><td>ス</td><td>ク</td><td>ル</td><td>ッ</td><td>テ</td><td>タ</td><td>ハ</td><td>ナ</td><td>コ</td><td>モ</td><td>チ</td></tr>\n", | |
"<tr><td>゛</td><td>ン</td><td>イ</td><td>シ</td><td>ウ</td><td>ノ</td><td>ト</td><td>カ</td><td>゛</td><td>@ </td><td>ジ</td><td>ア</td></tr>\n", | |
"<tr><td>ラ</td><td>リ</td><td>キ</td><td>ニ</td><td>オ</td><td>ョ</td><td>マ</td><td>ガ</td><td>ダ</td><td>サ</td><td>ヨ</td><td>ケ</td></tr>\n", | |
"<tr><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>\n", | |
"<tr><td>- </td><td>ゾ</td><td>〜</td><td>- </td><td>ゼ</td><td>フ</td><td>ャ</td><td>ユ</td><td>- </td><td>ボ</td><td>ビ</td><td>ペ</td></tr>\n", | |
"<tr><td>ヅ</td><td>ズ</td><td>グ</td><td>ペ</td><td>ツ</td><td>ヌ</td><td>プ</td><td>バ</td><td>パ</td><td>- </td><td>- </td><td>ヂ</td></tr>\n", | |
"<tr><td>ポ</td><td>ミ</td><td>メ</td><td>ワ</td><td>ム</td><td>ロ</td><td>ド</td><td>ネ</td><td>- </td><td>- </td><td>- </td><td>- </td></tr>\n", | |
"<tr><td>- </td><td>ピ</td><td>ギ</td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td><td>- </td><td>ザ</td><td>- </td><td>ゲ</td></tr>\n", | |
"</tbody>\n", | |
"</table>" | |
], | |
"text/plain": [ | |
"<IPython.core.display.HTML object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"#l = Layout.random()\n", | |
"print(l.evaluate())\n", | |
"l.print_layout()\n", | |
"l = l.random_climb(climb=50, step=100)\n", | |
"print(l.evaluate())\n", | |
"l.print_layout()\n", | |
"l = l.random_climb(climb=50, step=100)\n", | |
"print(l.evaluate())\n", | |
"l.print_layout()\n", | |
"l = l.random_climb(climb=50, step=100)\n", | |
"print(l.evaluate())\n", | |
"l.print_layout()\n", | |
"l = l.random_climb(climb=50, step=100)\n", | |
"print(l.evaluate())\n", | |
"l.print_layout()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 975, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def output_google(layout):\n", | |
" keyboard = [\n", | |
" \"1234567890-^\",\n", | |
" \"qwertyuiop@[\",\n", | |
" \"asdfghjkl;:]\",\n", | |
" \"zxcvbnm,./_\\\\\",\n", | |
" ]\n", | |
" hira = \"あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをんがぎぐげござじずぜぞだぢづでぞばびぶべぼぱぴぷぺぽゃゅょっ\"\n", | |
" kana = \"アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンガギグゲゴザジズゼゾダヂヅデゾバビブベボパピプペポャュョッ\"\n", | |
" trans = str.maketrans(kana, hira)\n", | |
" keyboard = [list(l) for l in keyboard]\n", | |
" shift = [\"a\", \";\"]\n", | |
" meta = [\"゛\", \"@\"]\n", | |
" res = []\n", | |
" for k, p in layout.keys():\n", | |
" ky = keyboard[p.pos[0]][p.pos[1]]\n", | |
" if k.key not in meta:\n", | |
" res.append([ky, k.key.translate(trans), \"\"])\n", | |
" if k.back is not None:\n", | |
" res.extend( [[s + ky, k.back.translate(trans), \"\"] for s in shift])\n", | |
" return res" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 976, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<table>\n", | |
"<tbody>\n", | |
"<tr><td>1 </td><td>え</td><td></td></tr>\n", | |
"<tr><td>2 </td><td>そ</td><td></td></tr>\n", | |
"<tr><td>a2</td><td>ぞ</td><td></td></tr>\n", | |
"<tr><td>;2</td><td>ぞ</td><td></td></tr>\n", | |
"<tr><td>3 </td><td>ー</td><td></td></tr>\n", | |
"<tr><td>a3</td><td>〜</td><td></td></tr>\n", | |
"<tr><td>;3</td><td>〜</td><td></td></tr>\n", | |
"<tr><td>4 </td><td>れ</td><td></td></tr>\n", | |
"<tr><td>5 </td><td>せ</td><td></td></tr>\n", | |
"<tr><td>a5</td><td>ぜ</td><td></td></tr>\n", | |
"<tr><td>;5</td><td>ぜ</td><td></td></tr>\n", | |
"<tr><td>6 </td><td>ぶ</td><td></td></tr>\n", | |
"<tr><td>a6</td><td>ふ</td><td></td></tr>\n", | |
"<tr><td>;6</td><td>ふ</td><td></td></tr>\n", | |
"<tr><td>7 </td><td>や</td><td></td></tr>\n", | |
"<tr><td>a7</td><td>ゃ</td><td></td></tr>\n", | |
"<tr><td>;7</td><td>ゃ</td><td></td></tr>\n", | |
"<tr><td>8 </td><td>ゅ</td><td></td></tr>\n", | |
"<tr><td>a8</td><td>ゆ</td><td></td></tr>\n", | |
"<tr><td>;8</td><td>ゆ</td><td></td></tr>\n", | |
"<tr><td>9 </td><td>を</td><td></td></tr>\n", | |
"<tr><td>0 </td><td>ほ</td><td></td></tr>\n", | |
"<tr><td>a0</td><td>ぼ</td><td></td></tr>\n", | |
"<tr><td>;0</td><td>ぼ</td><td></td></tr>\n", | |
"<tr><td>- </td><td>ひ</td><td></td></tr>\n", | |
"<tr><td>a-</td><td>び</td><td></td></tr>\n", | |
"<tr><td>;-</td><td>び</td><td></td></tr>\n", | |
"<tr><td>^ </td><td>へ</td><td></td></tr>\n", | |
"<tr><td>a^</td><td>ぺ</td><td></td></tr>\n", | |
"<tr><td>;^</td><td>ぺ</td><td></td></tr>\n", | |
"<tr><td>q </td><td>で</td><td></td></tr>\n", | |
"<tr><td>aq</td><td>づ</td><td></td></tr>\n", | |
"<tr><td>;q</td><td>づ</td><td></td></tr>\n", | |
"<tr><td>w </td><td>す</td><td></td></tr>\n", | |
"<tr><td>aw</td><td>ず</td><td></td></tr>\n", | |
"<tr><td>;w</td><td>ず</td><td></td></tr>\n", | |
"<tr><td>e </td><td>く</td><td></td></tr>\n", | |
"<tr><td>ae</td><td>ぐ</td><td></td></tr>\n", | |
"<tr><td>;e</td><td>ぐ</td><td></td></tr>\n", | |
"<tr><td>r </td><td>る</td><td></td></tr>\n", | |
"<tr><td>ar</td><td>ぺ</td><td></td></tr>\n", | |
"<tr><td>;r</td><td>ぺ</td><td></td></tr>\n", | |
"<tr><td>t </td><td>っ</td><td></td></tr>\n", | |
"<tr><td>at</td><td>つ</td><td></td></tr>\n", | |
"<tr><td>;t</td><td>つ</td><td></td></tr>\n", | |
"<tr><td>y </td><td>て</td><td></td></tr>\n", | |
"<tr><td>ay</td><td>ぬ</td><td></td></tr>\n", | |
"<tr><td>;y</td><td>ぬ</td><td></td></tr>\n", | |
"<tr><td>u </td><td>た</td><td></td></tr>\n", | |
"<tr><td>au</td><td>ぷ</td><td></td></tr>\n", | |
"<tr><td>;u</td><td>ぷ</td><td></td></tr>\n", | |
"<tr><td>i </td><td>は</td><td></td></tr>\n", | |
"<tr><td>ai</td><td>ば</td><td></td></tr>\n", | |
"<tr><td>;i</td><td>ば</td><td></td></tr>\n", | |
"<tr><td>o </td><td>な</td><td></td></tr>\n", | |
"<tr><td>ao</td><td>ぱ</td><td></td></tr>\n", | |
"<tr><td>;o</td><td>ぱ</td><td></td></tr>\n", | |
"<tr><td>p </td><td>こ</td><td></td></tr>\n", | |
"<tr><td>@ </td><td>も</td><td></td></tr>\n", | |
"<tr><td>[ </td><td>ち</td><td></td></tr>\n", | |
"<tr><td>a[</td><td>ぢ</td><td></td></tr>\n", | |
"<tr><td>;[</td><td>ぢ</td><td></td></tr>\n", | |
"<tr><td>aa</td><td>ぽ</td><td></td></tr>\n", | |
"<tr><td>;a</td><td>ぽ</td><td></td></tr>\n", | |
"<tr><td>s </td><td>ん</td><td></td></tr>\n", | |
"<tr><td>as</td><td>み</td><td></td></tr>\n", | |
"<tr><td>;s</td><td>み</td><td></td></tr>\n", | |
"<tr><td>d </td><td>い</td><td></td></tr>\n", | |
"<tr><td>ad</td><td>め</td><td></td></tr>\n", | |
"<tr><td>;d</td><td>め</td><td></td></tr>\n", | |
"<tr><td>f </td><td>し</td><td></td></tr>\n", | |
"<tr><td>af</td><td>わ</td><td></td></tr>\n", | |
"<tr><td>;f</td><td>わ</td><td></td></tr>\n", | |
"<tr><td>g </td><td>う</td><td></td></tr>\n", | |
"<tr><td>ag</td><td>む</td><td></td></tr>\n", | |
"<tr><td>;g</td><td>む</td><td></td></tr>\n", | |
"<tr><td>h </td><td>の</td><td></td></tr>\n", | |
"<tr><td>ah</td><td>ろ</td><td></td></tr>\n", | |
"<tr><td>;h</td><td>ろ</td><td></td></tr>\n", | |
"<tr><td>j </td><td>と</td><td></td></tr>\n", | |
"<tr><td>aj</td><td>ド</td><td></td></tr>\n", | |
"<tr><td>;j</td><td>ド</td><td></td></tr>\n", | |
"<tr><td>k </td><td>か</td><td></td></tr>\n", | |
"<tr><td>ak</td><td>ね</td><td></td></tr>\n", | |
"<tr><td>;k</td><td>ね</td><td></td></tr>\n", | |
"<tr><td>: </td><td>じ</td><td></td></tr>\n", | |
"<tr><td>] </td><td>あ</td><td></td></tr>\n", | |
"<tr><td>z </td><td>ら</td><td></td></tr>\n", | |
"<tr><td>x </td><td>り</td><td></td></tr>\n", | |
"<tr><td>ax</td><td>ぴ</td><td></td></tr>\n", | |
"<tr><td>;x</td><td>ぴ</td><td></td></tr>\n", | |
"<tr><td>c </td><td>き</td><td></td></tr>\n", | |
"<tr><td>ac</td><td>ぎ</td><td></td></tr>\n", | |
"<tr><td>;c</td><td>ぎ</td><td></td></tr>\n", | |
"<tr><td>v </td><td>に</td><td></td></tr>\n", | |
"<tr><td>b </td><td>お</td><td></td></tr>\n", | |
"<tr><td>n </td><td>ょ</td><td></td></tr>\n", | |
"<tr><td>m </td><td>ま</td><td></td></tr>\n", | |
"<tr><td>, </td><td>が</td><td></td></tr>\n", | |
"<tr><td>. </td><td>だ</td><td></td></tr>\n", | |
"<tr><td>/ </td><td>さ</td><td></td></tr>\n", | |
"<tr><td>a/</td><td>ざ</td><td></td></tr>\n", | |
"<tr><td>;/</td><td>ざ</td><td></td></tr>\n", | |
"<tr><td>_ </td><td>よ</td><td></td></tr>\n", | |
"<tr><td>\\ </td><td>け</td><td></td></tr>\n", | |
"<tr><td>a\\</td><td>げ</td><td></td></tr>\n", | |
"<tr><td>;\\</td><td>げ</td><td></td></tr>\n", | |
"</tbody>\n", | |
"</table>" | |
], | |
"text/plain": [ | |
"<IPython.core.display.HTML object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"import pickle\n", | |
"with open(\"layout\", \"wb\") as f:\n", | |
" pickle.dump(l, f)\n", | |
"g = output_google(l)\n", | |
"with open(\"roman.txt\", \"w\") as f:\n", | |
" for line in g:\n", | |
" f.write(\"\\t\".join(line) + \"\\n\")\n", | |
"display_table(g)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3", | |
"language": "python", | |
"name": "python3" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": "3.6.5" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 2 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment