-
-
Save wass88/0351754c480c4889b324558e489fc09c to your computer and use it in GitHub Desktop.
Keyboard配列
This file contains hidden or 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