Skip to content

Instantly share code, notes, and snippets.

@wass88
Created October 27, 2018 16:19
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wass88/0351754c480c4889b324558e489fc09c to your computer and use it in GitHub Desktop.
Save wass88/0351754c480c4889b324558e489fc09c to your computer and use it in GitHub Desktop.
Keyboard配列
Display the source blob
Display the rendered blob
Raw
{
"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",
" 'ヴ':'&#12436;', 'ッ':'っ', 'ヰ':'ゐ', 'ヱ':'ゑ',\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>&#12436;</td><td></td></tr>\n",
"<tr><td>lt</td><td>&#12436;</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