Created
September 19, 2022 14:50
-
-
Save yssymmt/a9c38010cd5411326b8bae0c64af2fb6 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"id": "2a4a8a64", | |
"metadata": {}, | |
"source": [ | |
"#03: mecab" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "1af93581", | |
"metadata": {}, | |
"source": [ | |
"####パッケージの読み込み" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"id": "d4b8649e", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import pandas as pd\n", | |
"from sqlalchemy import create_engine\n", | |
"import teradatasql\n", | |
"import teradatasqlalchemy\n", | |
"import MeCab" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "cdf51c9f", | |
"metadata": {}, | |
"source": [ | |
"####Teradataへの接続、sqlalchemy エンジンを作成" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"id": "96d099c4", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"host = \"192.168.999.999\"\n", | |
"user = \"jumbo\"\n", | |
"password = \"mambo\"\n", | |
"connstr = \"teradatasql://{user}:{password}@{host}\".format(host=host, user=user, password=password)\n", | |
"engine = create_engine(connstr)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "470c6f8d", | |
"metadata": {}, | |
"source": [ | |
"####データを取得 " | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"id": "e5c0cb31", | |
"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>docid</th>\n", | |
" <th>cat</th>\n", | |
" <th>docdesc</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>19</td>\n", | |
" <td>春日</td>\n", | |
" <td>ぼる塾の人と「まあねぇ」と「トゥース!」の掛け合いは面白かった</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>17</td>\n", | |
" <td>若林</td>\n", | |
" <td>山里亮太にはツッコミでは敵わないと思っている</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>7</td>\n", | |
" <td>若林</td>\n", | |
" <td>藤井青銅「ピンクのベストじゃない方がしゃべれるんだよ」</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>15</td>\n", | |
" <td>春日</td>\n", | |
" <td>普段は靴下を履かないので、足の裏が象のようになっている</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>5</td>\n", | |
" <td>若林</td>\n", | |
" <td>プライベートのバスケットで足を怪我した</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>5</th>\n", | |
" <td>13</td>\n", | |
" <td>春日</td>\n", | |
" <td>ピンクのセーターを着た後輩の芸人から、すいません、ピンク着させてもらってますと挨拶された</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>6</th>\n", | |
" <td>3</td>\n", | |
" <td>若林</td>\n", | |
" <td>ナナメの夕暮れ他、本を出している</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>7</th>\n", | |
" <td>11</td>\n", | |
" <td>春日</td>\n", | |
" <td>六本木の社長からモンクレールのダウンをもらっていた</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>8</th>\n", | |
" <td>1</td>\n", | |
" <td>若林</td>\n", | |
" <td>若槻千夏「幾つかのテレビの番組で司会を務めるが、本番以外では人見知りで話さない」</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9</th>\n", | |
" <td>9</td>\n", | |
" <td>春日</td>\n", | |
" <td>茶々という名前のチワワ犬を飼っている</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>10</th>\n", | |
" <td>20</td>\n", | |
" <td>春日</td>\n", | |
" <td>スベる芸風なのに、スベるのを怖いと思っている</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>11</th>\n", | |
" <td>16</td>\n", | |
" <td>春日</td>\n", | |
" <td>バカリズム「存在が面白い。ウケるスベるとかじゃない」</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>12</th>\n", | |
" <td>18</td>\n", | |
" <td>若林</td>\n", | |
" <td>入船出身なのに築地出身ですと嘘をついたら、地元の人にお前入船だろとツッコミされた</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>13</th>\n", | |
" <td>14</td>\n", | |
" <td>春日</td>\n", | |
" <td>漫才ではボケを担当するが、ラジオやテレビでは全然ボケない</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>14</th>\n", | |
" <td>8</td>\n", | |
" <td>若林</td>\n", | |
" <td>mc.wakaとして、日本武道館、横浜アリーナなどで人の歌にラップで茶々を入れている</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>15</th>\n", | |
" <td>12</td>\n", | |
" <td>春日</td>\n", | |
" <td>ピンクベストを着て胸を張っていて、トゥースと大声で叫ぶ</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>16</th>\n", | |
" <td>6</td>\n", | |
" <td>若林</td>\n", | |
" <td>星野源「日本、テレビ界の希望だと思う」</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>17</th>\n", | |
" <td>10</td>\n", | |
" <td>春日</td>\n", | |
" <td>結婚直前に浮気がばれた</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>18</th>\n", | |
" <td>4</td>\n", | |
" <td>若林</td>\n", | |
" <td>深夜に一人でバスケットボールのスリーポイントを練習している</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>19</th>\n", | |
" <td>2</td>\n", | |
" <td>若林</td>\n", | |
" <td>漫才ではツッコミを担当するが、「たりないふたり」ではボケを担当していた</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" docid cat docdesc\n", | |
"0 19 春日 ぼる塾の人と「まあねぇ」と「トゥース!」の掛け合いは面白かった\n", | |
"1 17 若林 山里亮太にはツッコミでは敵わないと思っている\n", | |
"2 7 若林 藤井青銅「ピンクのベストじゃない方がしゃべれるんだよ」\n", | |
"3 15 春日 普段は靴下を履かないので、足の裏が象のようになっている\n", | |
"4 5 若林 プライベートのバスケットで足を怪我した\n", | |
"5 13 春日 ピンクのセーターを着た後輩の芸人から、すいません、ピンク着させてもらってますと挨拶された\n", | |
"6 3 若林 ナナメの夕暮れ他、本を出している\n", | |
"7 11 春日 六本木の社長からモンクレールのダウンをもらっていた\n", | |
"8 1 若林 若槻千夏「幾つかのテレビの番組で司会を務めるが、本番以外では人見知りで話さない」\n", | |
"9 9 春日 茶々という名前のチワワ犬を飼っている\n", | |
"10 20 春日 スベる芸風なのに、スベるのを怖いと思っている\n", | |
"11 16 春日 バカリズム「存在が面白い。ウケるスベるとかじゃない」\n", | |
"12 18 若林 入船出身なのに築地出身ですと嘘をついたら、地元の人にお前入船だろとツッコミされた\n", | |
"13 14 春日 漫才ではボケを担当するが、ラジオやテレビでは全然ボケない\n", | |
"14 8 若林 mc.wakaとして、日本武道館、横浜アリーナなどで人の歌にラップで茶々を入れている\n", | |
"15 12 春日 ピンクベストを着て胸を張っていて、トゥースと大声で叫ぶ\n", | |
"16 6 若林 星野源「日本、テレビ界の希望だと思う」\n", | |
"17 10 春日 結婚直前に浮気がばれた\n", | |
"18 4 若林 深夜に一人でバスケットボールのスリーポイントを練習している\n", | |
"19 2 若林 漫才ではツッコミを担当するが、「たりないふたり」ではボケを担当していた" | |
] | |
}, | |
"execution_count": 4, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"with engine.connect() as conn:\n", | |
" df = pd.read_sql(\"\"\"\n", | |
" select *\n", | |
" from jumbo.aud03_neologdn\n", | |
" \"\"\", conn)\n", | |
"df" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "6d4f8017", | |
"metadata": {}, | |
"source": [ | |
"####形態素解析、品詞など付きで" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"id": "42218d5f", | |
"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>docid</th>\n", | |
" <th>cat</th>\n", | |
" <th>docdesc</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>19</td>\n", | |
" <td>春日</td>\n", | |
" <td>ぼる塾\\t名詞,固有名詞,一般,*,*,*,ぼる塾,ボルジュク,ボルジュク\\nの\\t助詞,連...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>17</td>\n", | |
" <td>若林</td>\n", | |
" <td>山里亮太\\t名詞,固有名詞,人名,一般,*,*,山里亮太,ヤマサトリョウタ,ヤマサトリョータ...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>7</td>\n", | |
" <td>若林</td>\n", | |
" <td>藤井青銅\\t名詞,固有名詞,人名,一般,*,*,藤井青銅,フジイセイドウ,フジーセイドー\\n...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>15</td>\n", | |
" <td>春日</td>\n", | |
" <td>普段\\t名詞,副詞可能,*,*,*,*,普段,フダン,フダン\\nは\\t助詞,係助詞,*,*,...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>5</td>\n", | |
" <td>若林</td>\n", | |
" <td>プライベート\\t名詞,一般,*,*,*,*,プライベート,プライベート,プライベート\\nの\\...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>5</th>\n", | |
" <td>13</td>\n", | |
" <td>春日</td>\n", | |
" <td>ピンク\\t名詞,一般,*,*,*,*,ピンク,ピンク,ピンク\\nの\\t助詞,連体化,*,*,...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>6</th>\n", | |
" <td>3</td>\n", | |
" <td>若林</td>\n", | |
" <td>ナナメ\\t名詞,固有名詞,一般,*,*,*,ナナメ,ナナメ,ナナメ\\nの\\t助詞,連体化,*...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>7</th>\n", | |
" <td>11</td>\n", | |
" <td>春日</td>\n", | |
" <td>六本木\\t名詞,固有名詞,地域,一般,*,*,六本木,ロッポンギ,ロッポンギ\\nの\\t助詞,...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>8</th>\n", | |
" <td>1</td>\n", | |
" <td>若林</td>\n", | |
" <td>若槻千夏\\t名詞,固有名詞,人名,一般,*,*,若槻千夏,ワカツキチナツ,ワカツキチナツ\\n...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9</th>\n", | |
" <td>9</td>\n", | |
" <td>春日</td>\n", | |
" <td>茶々\\t名詞,一般,*,*,*,*,茶々,チャチャ,チャチャ\\nという\\t助詞,格助詞,連語...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>10</th>\n", | |
" <td>20</td>\n", | |
" <td>春日</td>\n", | |
" <td>スベる\\t名詞,固有名詞,一般,*,*,*,スベる,スベル,スベル\\n芸風\\t名詞,一般,*...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>11</th>\n", | |
" <td>16</td>\n", | |
" <td>春日</td>\n", | |
" <td>バカリズム\\t名詞,固有名詞,人名,一般,*,*,バカリズム,バカリズム,バカリズム\\n「\\...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>12</th>\n", | |
" <td>18</td>\n", | |
" <td>若林</td>\n", | |
" <td>入船\\t名詞,一般,*,*,*,*,入船,イリフネ,イリフネ\\n出身\\t名詞,一般,*,*,...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>13</th>\n", | |
" <td>14</td>\n", | |
" <td>春日</td>\n", | |
" <td>漫才\\t名詞,一般,*,*,*,*,漫才,マンザイ,マンザイ\\nで\\t助詞,格助詞,一般,*...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>14</th>\n", | |
" <td>8</td>\n", | |
" <td>若林</td>\n", | |
" <td>mc\\t名詞,固有名詞,一般,*,*,*,MC,エムシー,エムシー\\n.\\t名詞,サ変接続,...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>15</th>\n", | |
" <td>12</td>\n", | |
" <td>春日</td>\n", | |
" <td>ピンク\\t名詞,一般,*,*,*,*,ピンク,ピンク,ピンク\\nベスト\\t名詞,一般,*,*...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>16</th>\n", | |
" <td>6</td>\n", | |
" <td>若林</td>\n", | |
" <td>星野源\\t名詞,固有名詞,人名,一般,*,*,星野源,ホシノゲン,ホシノゲン\\n「\\t記号,...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>17</th>\n", | |
" <td>10</td>\n", | |
" <td>春日</td>\n", | |
" <td>結婚\\t名詞,サ変接続,*,*,*,*,結婚,ケッコン,ケッコン\\n直前\\t名詞,一般,*,...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>18</th>\n", | |
" <td>4</td>\n", | |
" <td>若林</td>\n", | |
" <td>深夜\\t名詞,副詞可能,*,*,*,*,深夜,シンヤ,シンヤ\\nに\\t助詞,格助詞,一般,*...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>19</th>\n", | |
" <td>2</td>\n", | |
" <td>若林</td>\n", | |
" <td>漫才\\t名詞,一般,*,*,*,*,漫才,マンザイ,マンザイ\\nで\\t助詞,格助詞,一般,*...</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" docid cat docdesc\n", | |
"0 19 春日 ぼる塾\\t名詞,固有名詞,一般,*,*,*,ぼる塾,ボルジュク,ボルジュク\\nの\\t助詞,連...\n", | |
"1 17 若林 山里亮太\\t名詞,固有名詞,人名,一般,*,*,山里亮太,ヤマサトリョウタ,ヤマサトリョータ...\n", | |
"2 7 若林 藤井青銅\\t名詞,固有名詞,人名,一般,*,*,藤井青銅,フジイセイドウ,フジーセイドー\\n...\n", | |
"3 15 春日 普段\\t名詞,副詞可能,*,*,*,*,普段,フダン,フダン\\nは\\t助詞,係助詞,*,*,...\n", | |
"4 5 若林 プライベート\\t名詞,一般,*,*,*,*,プライベート,プライベート,プライベート\\nの\\...\n", | |
"5 13 春日 ピンク\\t名詞,一般,*,*,*,*,ピンク,ピンク,ピンク\\nの\\t助詞,連体化,*,*,...\n", | |
"6 3 若林 ナナメ\\t名詞,固有名詞,一般,*,*,*,ナナメ,ナナメ,ナナメ\\nの\\t助詞,連体化,*...\n", | |
"7 11 春日 六本木\\t名詞,固有名詞,地域,一般,*,*,六本木,ロッポンギ,ロッポンギ\\nの\\t助詞,...\n", | |
"8 1 若林 若槻千夏\\t名詞,固有名詞,人名,一般,*,*,若槻千夏,ワカツキチナツ,ワカツキチナツ\\n...\n", | |
"9 9 春日 茶々\\t名詞,一般,*,*,*,*,茶々,チャチャ,チャチャ\\nという\\t助詞,格助詞,連語...\n", | |
"10 20 春日 スベる\\t名詞,固有名詞,一般,*,*,*,スベる,スベル,スベル\\n芸風\\t名詞,一般,*...\n", | |
"11 16 春日 バカリズム\\t名詞,固有名詞,人名,一般,*,*,バカリズム,バカリズム,バカリズム\\n「\\...\n", | |
"12 18 若林 入船\\t名詞,一般,*,*,*,*,入船,イリフネ,イリフネ\\n出身\\t名詞,一般,*,*,...\n", | |
"13 14 春日 漫才\\t名詞,一般,*,*,*,*,漫才,マンザイ,マンザイ\\nで\\t助詞,格助詞,一般,*...\n", | |
"14 8 若林 mc\\t名詞,固有名詞,一般,*,*,*,MC,エムシー,エムシー\\n.\\t名詞,サ変接続,...\n", | |
"15 12 春日 ピンク\\t名詞,一般,*,*,*,*,ピンク,ピンク,ピンク\\nベスト\\t名詞,一般,*,*...\n", | |
"16 6 若林 星野源\\t名詞,固有名詞,人名,一般,*,*,星野源,ホシノゲン,ホシノゲン\\n「\\t記号,...\n", | |
"17 10 春日 結婚\\t名詞,サ変接続,*,*,*,*,結婚,ケッコン,ケッコン\\n直前\\t名詞,一般,*,...\n", | |
"18 4 若林 深夜\\t名詞,副詞可能,*,*,*,*,深夜,シンヤ,シンヤ\\nに\\t助詞,格助詞,一般,*...\n", | |
"19 2 若林 漫才\\t名詞,一般,*,*,*,*,漫才,マンザイ,マンザイ\\nで\\t助詞,格助詞,一般,*..." | |
] | |
}, | |
"execution_count": 5, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"tagger = MeCab.Tagger()\n", | |
"df['docdesc'] = df['docdesc'].apply(tagger.parse)\n", | |
"df" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "8c03bcf1", | |
"metadata": {}, | |
"source": [ | |
"####最大文字数を確認" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"id": "32bd866d", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"740" | |
] | |
}, | |
"execution_count": 6, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"max(map(len, df['docdesc']))" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "84ed91c0", | |
"metadata": {}, | |
"source": [ | |
"####格納用テーブルを用意" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"id": "848d7cf1", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"with engine.connect() as conn:\n", | |
" x1 = pd.read_sql(\"\"\"\n", | |
" create multiset table jumbo.aud04_mecab (\n", | |
" docid integer, \n", | |
" cat varchar(10) character set unicode, \n", | |
" docdesc varchar(1000) character set unicode \n", | |
" ) primary index (docid) \n", | |
" \"\"\", conn)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "2df2a9f2", | |
"metadata": {}, | |
"source": [ | |
"####形態素解析後データの格納" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 8, | |
"id": "59ad1738", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"1" | |
] | |
}, | |
"execution_count": 8, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"df.to_sql('aud04_mecab',engine,if_exists='append',index=False)" | |
] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3 (ipykernel)", | |
"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.9.12" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 5 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment