├── README.md ├── data.zip ├── email_classification.ipynb ├── life_coach_application.ipynb ├── python_hour_july_2019.pdf └── python_hour_life_coach_app_april_2019.pdf /README.md: -------------------------------------------------------------------------------- 1 | **Contact:** aycignl@gmail.com
2 | 3 | ## References 4 | 5 | [1] **Word2Vec Turkish:** https://github.com/akoksal/Turkish-Word2Vec
6 | [2] **Word2Vec English:** https://nlp.stanford.edu/projects/glove/
7 | [3] **Life Coach Application:** https://uzay00.github.io/kahve/uzmanlik.html
8 | [4] **Life Coach Application:** https://github.com/uzay00/KaVe-Egitim/tree/master/VeriBilimi
9 | [5] **Word2Vec Paper:** Mikolov, Tomas, et al. "Distributed representations of words and phrases and their compositionality." Advances in neural information processing systems. 2013.
10 | [6] **Word2Vec Paper:** Mikolov, Tomas, et al. "Efficient estimation of word representations in vector space." arXiv preprint arXiv:1301.3781 (2013). 11 | -------------------------------------------------------------------------------- /data.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aycignl/python_hour/b016728e4dcf2dc3058344f6f355146ede57864e/data.zip -------------------------------------------------------------------------------- /email_classification.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "raw", 5 | "metadata": {}, 6 | "source": [ 7 | "Gönül Aycı\n", 8 | "Python Saati #94\n", 9 | "16 July 2019" 10 | ] 11 | }, 12 | { 13 | "cell_type": "code", 14 | "execution_count": 1, 15 | "metadata": {}, 16 | "outputs": [ 17 | { 18 | "name": "stderr", 19 | "output_type": "stream", 20 | "text": [ 21 | "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/sklearn/ensemble/weight_boosting.py:29: DeprecationWarning: numpy.core.umath_tests is an internal NumPy module and should not be imported. It will be removed in a future NumPy release.\n", 22 | " from numpy.core.umath_tests import inner1d\n" 23 | ] 24 | } 25 | ], 26 | "source": [ 27 | "import os\n", 28 | "import time\n", 29 | "import itertools\n", 30 | "import numpy as np\n", 31 | "from collections import Counter\n", 32 | "import matplotlib.pyplot as plt\n", 33 | "\n", 34 | "from sklearn import tree\n", 35 | "from sklearn.svm import LinearSVC\n", 36 | "from sklearn.naive_bayes import MultinomialNB\n", 37 | "from sklearn.neighbors import KNeighborsClassifier \n", 38 | "from sklearn.linear_model import LogisticRegression\n", 39 | "from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier\n", 40 | "from sklearn.metrics import accuracy_score, f1_score, precision_score, recall_score, confusion_matrix, precision_recall_fscore_support, classification_report\n" 41 | ] 42 | }, 43 | { 44 | "cell_type": "code", 45 | "execution_count": 2, 46 | "metadata": {}, 47 | "outputs": [], 48 | "source": [ 49 | "start = time.time()\n", 50 | "\n", 51 | "# read a given file for training\n", 52 | "# content of the email starts from the 3rd row of the file\n", 53 | "\n", 54 | "def read_mail_paths(path_directory):\n", 55 | " mail_paths = []\n", 56 | " for f in os.listdir(path_directory):\n", 57 | " mail_paths.append(os.path.join(path_directory, f)) \n", 58 | " \n", 59 | " return mail_paths\n" 60 | ] 61 | }, 62 | { 63 | "cell_type": "code", 64 | "execution_count": 3, 65 | "metadata": {}, 66 | "outputs": [], 67 | "source": [ 68 | "# constants\n", 69 | "# training, test dataset paths, \n", 70 | "# the number of training and test data sets\n", 71 | "\n", 72 | "train_paths = '/Users/brain/Desktop/academic/yeterlik/data/train_emails'\n", 73 | "test_paths = '/Users/brain/Desktop/academic/yeterlik/data/test_emails'\n", 74 | "no_of_training_set = len(read_mail_paths(train_paths))\n", 75 | "no_of_test_set = len(read_mail_paths(test_paths))\n" 76 | ] 77 | }, 78 | { 79 | "cell_type": "code", 80 | "execution_count": 4, 81 | "metadata": {}, 82 | "outputs": [], 83 | "source": [ 84 | "# this function returns word_list with their frequency\n", 85 | "# I use this function to construct feature matrix for training and test data sets\n", 86 | "\n", 87 | "def prepare_words(path1):\n", 88 | " mail_paths = read_mail_paths(path1)\n", 89 | " print('Successful to read paths of a dataset...')\n", 90 | " \n", 91 | " all_words = [] \n", 92 | " for mails in mail_paths: \n", 93 | " with open(mails) as mail:\n", 94 | " for i, line in enumerate(mail):\n", 95 | " if i == 2: \n", 96 | " words = line.split()\n", 97 | " all_words += words\n", 98 | " \n", 99 | " candidate_words_dictionary = Counter(all_words)\n", 100 | "\n", 101 | " # remove words from candidate_words_dictionary whether \n", 102 | " # the string consists of non-alphabetic characters,\n", 103 | " # invalid words,\n", 104 | " # and if a length of a word equal to one \n", 105 | " # (such as punctuation, meaningless words, and so on).\n", 106 | " for item in list(candidate_words_dictionary):\n", 107 | " if len(item) == 1: \n", 108 | " del candidate_words_dictionary[item]\n", 109 | " elif item.isalpha() == False:\n", 110 | " del candidate_words_dictionary[item]\n", 111 | " \n", 112 | " candidate_words_dictionary = candidate_words_dictionary.most_common(len(candidate_words_dictionary))\n", 113 | "\n", 114 | " return candidate_words_dictionary\n" 115 | ] 116 | }, 117 | { 118 | "cell_type": "code", 119 | "execution_count": 5, 120 | "metadata": {}, 121 | "outputs": [ 122 | { 123 | "name": "stdout", 124 | "output_type": "stream", 125 | "text": [ 126 | "Successful to read paths of a dataset...\n" 127 | ] 128 | } 129 | ], 130 | "source": [ 131 | "# this function returns input for classifiers \n", 132 | "# input is a feature matrix \n", 133 | "# that is constructed by using term frequency method\n", 134 | "\n", 135 | "valid_word_dictionary = prepare_words(train_paths)\n", 136 | "\n", 137 | "def extract_features(path2): \n", 138 | " # read given files for training and test\n", 139 | " mail_paths = read_mail_paths(path2)\n", 140 | "\n", 141 | " # create a feature matrix \n", 142 | " features_matrix = np.zeros((len(mail_paths), len(valid_word_dictionary)))\n", 143 | " mail_id = 0\n", 144 | " \n", 145 | " for mails in mail_paths:\n", 146 | " with open(mails) as mail:\n", 147 | " for i, line in enumerate(mail):\n", 148 | " if i == 2:\n", 149 | " words = line.split()\n", 150 | " for word in words:\n", 151 | " word_id = 0\n", 152 | " for i, x in enumerate(valid_word_dictionary):\n", 153 | " if x[0] == word:\n", 154 | " word_id = i\n", 155 | " # we can also use Boolean matrix\n", 156 | "# features_matrix[mail_id, word_id] = 1\n", 157 | " \n", 158 | " # we use term frequency of each word\n", 159 | " features_matrix[mail_id, word_id] = words.count(word)\n", 160 | " mail_id += 1 \n", 161 | " return features_matrix\n" 162 | ] 163 | }, 164 | { 165 | "cell_type": "code", 166 | "execution_count": 8, 167 | "metadata": {}, 168 | "outputs": [], 169 | "source": [ 170 | "# Create a dictionary of words with its frequency\n", 171 | "\n", 172 | "def train_classifier_model(train_paths):\n", 173 | " train_matrix = extract_features(train_paths)\n", 174 | " \n", 175 | " print('Successful to extract features for training data...')\n", 176 | "\n", 177 | " # Prepare feature vectors per training email and its labels\n", 178 | " # 240 --> legitimate: 1\n", 179 | " # 240 --> spam: 0\n", 180 | "\n", 181 | " train_labels = np.zeros(no_of_training_set)\n", 182 | " train_labels[:int(np.divide(no_of_training_set, 2))] = 1\n", 183 | "\n", 184 | " model6 = RandomForestClassifier(n_estimators=40, random_state = 42, n_jobs=-1)\n", 185 | " model6.fit(train_matrix, train_labels)\n", 186 | "\n", 187 | " return model6\n", 188 | " " 189 | ] 190 | }, 191 | { 192 | "cell_type": "code", 193 | "execution_count": 9, 194 | "metadata": {}, 195 | "outputs": [], 196 | "source": [ 197 | "# test a model using three selected supervised learning algorithm\n", 198 | "\n", 199 | "def test_classifier_model(test_paths):\n", 200 | " test_matrix = extract_features(test_paths)\n", 201 | " print('Successful to extract features for test data...')\n", 202 | "\n", 203 | " # Prepare feature vectors per test email and its labels\n", 204 | " test_labels = np.zeros(no_of_test_set)\n", 205 | " test_labels[:int(np.divide(no_of_test_set, 2))] = 1\n", 206 | "\n", 207 | " model6 = train_classifier_model(train_paths)\n", 208 | " print('Successful to train data...')\n", 209 | " \n", 210 | " prediction6 = model6.predict(test_matrix)\n", 211 | " \n", 212 | " return test_labels, prediction6 \n" 213 | ] 214 | }, 215 | { 216 | "cell_type": "code", 217 | "execution_count": 10, 218 | "metadata": {}, 219 | "outputs": [ 220 | { 221 | "name": "stdout", 222 | "output_type": "stream", 223 | "text": [ 224 | "Successful to extract features for test data...\n", 225 | "Successful to extract features for training data...\n", 226 | "Successful to train data...\n", 227 | "Successful to test data...\n", 228 | "total time: 1013.2684652805328\n" 229 | ] 230 | }, 231 | { 232 | "data": { 233 | "text/plain": [ 234 | "array([[236, 4],\n", 235 | " [ 8, 232]])" 236 | ] 237 | }, 238 | "execution_count": 10, 239 | "metadata": {}, 240 | "output_type": "execute_result" 241 | } 242 | ], 243 | "source": [ 244 | "# test_labels, prediction1, prediction2, prediction3, prediction4, prediction5, prediction6, prediction7 = test_classifier_model(test_paths)\n", 245 | "test_labels, prediction6 = test_classifier_model(test_paths)\n", 246 | "print('Successful to test data...')\n", 247 | "\n", 248 | "done = time.time()\n", 249 | "elapsed = done - start\n", 250 | "print(\"total time: \", elapsed)\n", 251 | "\n", 252 | "confusion_matrix(test_labels, prediction6)" 253 | ] 254 | }, 255 | { 256 | "cell_type": "code", 257 | "execution_count": 14, 258 | "metadata": {}, 259 | "outputs": [ 260 | { 261 | "name": "stdout", 262 | "output_type": "stream", 263 | "text": [ 264 | "Accuracy Score: 0.975\n", 265 | "F1 Score: 0.9747899159663865\n", 266 | "Precision Score: 0.9830508474576272\n", 267 | "Recall Score: 0.9666666666666667\n" 268 | ] 269 | } 270 | ], 271 | "source": [ 272 | "print(\"Accuracy Score: \", accuracy_score(test_labels, prediction6))\n", 273 | "print(\"F1 Score: \", f1_score(test_labels, prediction6))\n", 274 | "print(\"Precision Score: \", precision_score(test_labels, prediction6))\n", 275 | "print(\"Recall Score: \", recall_score(test_labels, prediction6))\n" 276 | ] 277 | }, 278 | { 279 | "cell_type": "code", 280 | "execution_count": 17, 281 | "metadata": {}, 282 | "outputs": [ 283 | { 284 | "name": "stdout", 285 | "output_type": "stream", 286 | "text": [ 287 | "Confusion matrix, without normalization\n" 288 | ] 289 | }, 290 | { 291 | "data": { 292 | "image/png": "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\n", 293 | "text/plain": [ 294 | "" 295 | ] 296 | }, 297 | "metadata": {}, 298 | "output_type": "display_data" 299 | } 300 | ], 301 | "source": [ 302 | "def plot_confusion_matrix(cm, classes,\n", 303 | " normalize=False,\n", 304 | " title='Confusion matrix',\n", 305 | " cmap=plt.cm.Blues):\n", 306 | " \n", 307 | " if normalize:\n", 308 | " cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]\n", 309 | " #print(\"Normalized confusion matrix\")\n", 310 | " else:\n", 311 | " print('Confusion matrix, without normalization')\n", 312 | "\n", 313 | "\n", 314 | " plt.imshow(cm, interpolation='nearest', cmap=cmap)\n", 315 | " plt.title(title)\n", 316 | " plt.colorbar()\n", 317 | " tick_marks = np.arange(len(classes))\n", 318 | " plt.xticks(tick_marks, classes, rotation=45)\n", 319 | " plt.yticks(tick_marks, classes)\n", 320 | "\n", 321 | " fmt = '.2f' if normalize else 'd'\n", 322 | " thresh = cm.max() / 2.\n", 323 | " for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):\n", 324 | " plt.text(j, i, format(cm[i, j], fmt),\n", 325 | " horizontalalignment=\"center\",\n", 326 | " color=\"white\" if cm[i, j] > thresh else \"black\")\n", 327 | "\n", 328 | " plt.tight_layout()\n", 329 | " plt.ylabel('Actual')\n", 330 | " plt.xlabel('Predicted')\n", 331 | "\n", 332 | "plt.figure()\n", 333 | "plot_confusion_matrix(confusion_matrix(test_labels, prediction6), classes=['0', '1'], normalize=False)\n", 334 | "plt.show()" 335 | ] 336 | } 337 | ], 338 | "metadata": { 339 | "kernelspec": { 340 | "display_name": "Python 3", 341 | "language": "python", 342 | "name": "python3" 343 | }, 344 | "language_info": { 345 | "codemirror_mode": { 346 | "name": "ipython", 347 | "version": 3 348 | }, 349 | "file_extension": ".py", 350 | "mimetype": "text/x-python", 351 | "name": "python", 352 | "nbconvert_exporter": "python", 353 | "pygments_lexer": "ipython3", 354 | "version": "3.6.0" 355 | } 356 | }, 357 | "nbformat": 4, 358 | "nbformat_minor": 2 359 | } 360 | -------------------------------------------------------------------------------- /life_coach_application.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "### Life Coach Application (Yaşam Koçu Uygulaması) [1]
\n", 8 | "\n", 9 | "#### Veri Hazirligi\n", 10 | "* Özlü söz listeleri olustur (ipucu: split('\\n'))\n", 11 | "* Listeleri birlestirelim, soz ve kategori listesi olustur\n", 12 | "* Sozluk olustur (ipucu: {\"Sozler\": sozler, \"kategori\":kategori})\n", 13 | "* Listelerden sozluk kullanarak veri cercevesi olustur\n", 14 | "\n", 15 | "#### Islemler\n", 16 | "* Rastgele tavsiye\n", 17 | "* Secilen kategoride rastgele tavsiye\n", 18 | "* Jaccard Benzerligi\n", 19 | "$$\n", 20 | "benzerlik(A,B) = \\frac{|A \\cap B|}{|A \\cup B|}\n", 21 | "$$\n", 22 | "* Kullanicidan girdi olarak bir cevap al (ipucu: cevap = input(\"Merhaba insan ne istiyorsun?))\n", 23 | "* Kullanici cevabi tek kelimeyse ve bilinen kategorilerden biri ise\n", 24 | " * rastgele bir tavsiye ver\n", 25 | "* Kullanici cevabi uzun bir cumleyse ve verimizdeki sozler ile Jaccard benzerligini hesapla\n", 26 | " * ve en yakin sozu dondur\n", 27 | "\n", 28 | "+ ##### Sözcüklerin anlamsal yakınlıklarına göre tavsiyede bulunalım" 29 | ] 30 | }, 31 | { 32 | "cell_type": "code", 33 | "execution_count": null, 34 | "metadata": {}, 35 | "outputs": [], 36 | "source": [ 37 | "import re\n", 38 | "import time\n", 39 | "import numpy as np\n", 40 | "import pandas as pd\n", 41 | "from gensim.models import KeyedVectors\n", 42 | "from sklearn.metrics.pairwise import cosine_similarity" 43 | ] 44 | }, 45 | { 46 | "cell_type": "code", 47 | "execution_count": null, 48 | "metadata": {}, 49 | "outputs": [], 50 | "source": [ 51 | "Hayat = \"\"\"\n", 52 | "Olumlu düşünen, bütün olası dünyaların en iyisinde yaşadığımızı söyler ve olumsuz düşünen, bunun gerçek olmasından korkar. James Cabell\n", 53 | "\n", 54 | "Bu dünyaya gelmenin sadece tek bir yolu vardır, terk etmenin ise çok fazla yolu. Donald Harington\n", 55 | "\n", 56 | "Birisinin ‘Hayat zor.’ diye yakındığını duyduğumda, her zaman, ‘Neye kıyasla?’ diye sormayı isterim. Sidney Harris\n", 57 | "\n", 58 | "Mutsuz olmamamız gerekir. Kimsenin hayatla bir kontratı yok. DavidHeath\n", 59 | "\n", 60 | "Hayatını kazanırken yaşamasını bilmeyen bir adam, servetini kazanmadan öncesine göre daha fakirdir. Josiah Holland\n", 61 | "\n", 62 | "Yarının ne olacağını sormaktan vazgeç. Her gün, sana verilen bir hazinedir. Eline geçtikçe değerlendir. Horace\n", 63 | "\n", 64 | "Hayatınızı yaşamanın en iyi yolu, sizden sonra da kalıcı olacak şeyler için harcamaktır. William James\n", 65 | "\n", 66 | "Biz Japonlar, küçük zevklerden hoşlanırız, israftan değil. Daha fazlasını karşılayabilirse de, insanın basit bir yaşam tarzı olması kanısındayım. Massaru Ibuka\n", 67 | "\n", 68 | "Benim sanatım ve mesleğim yaşamaktır. Montaigne\n", 69 | "\n", 70 | "Hayat, çikolata ile dolu bir kutu gibidir. Ne çıkacağını asla bilemezsiniz. Forrest Gump Filmi\n", 71 | "\n", 72 | "Hayat, büyük bir sürprizdir. Ölümün neden daha büyük bir sürpriz olması gerektiğini anlayamıyorum. Vladimir Nabokov\n", 73 | "\"\"\"" 74 | ] 75 | }, 76 | { 77 | "cell_type": "code", 78 | "execution_count": null, 79 | "metadata": {}, 80 | "outputs": [], 81 | "source": [ 82 | "Sevgi = \"\"\"\n", 83 | "Karım, benim ‘Seni seviyorum.’ dememi binlerce kez duydu ama, hiçbir zaman ‘Üzgünüm.’ dediğimi duymadı. Bruce Willis\n", 84 | "\n", 85 | "Büyüklerine saygı, küçüklerine şevkat göstermeyenler, bizden değildir. Hz, Muhammed\n", 86 | "\n", 87 | "Sevip de kaybetmek, sevmemiş olmaktan daha iyidir. Seneca\n", 88 | "\n", 89 | "Sevgiyle düşünün, sevgiyle konuşun, sevgiyle davranın. Her ihtiyaç karşılanacaktır. James Ailen\n", 90 | "\n", 91 | "Sevgi, insanı birliğe, bencillik ise yalnızlığa götürür. Schiller\n", 92 | "\n", 93 | "Sevdiği kadını ve sevdiği işi bulan bir erkek, yeryüzünde cenneti bulmuş demektir. Helen Rowland\n", 94 | "\n", 95 | "Kızgınlık, kırgınlık ya da acıya tutunmayın. Enerjinizi çalarlar ve sizi sevmekten alıkoyarlar. Leo Buscaglia\n", 96 | "\n", 97 | "Herkes temel bir şeyi unutuyor; insanlar sizi, siz onları sevmeden sevmeyecekler. Pat Carroll\n", 98 | "\n", 99 | "Sevgi, dünyadaki yaşamın aktığı nehirdir. Henry Beecher\n", 100 | "\n", 101 | "Sevmeden verebilirsiniz ama, vermeden sevemezsiniz. Amy Carmichael\n", 102 | "\n", 103 | "\"\"\"" 104 | ] 105 | }, 106 | { 107 | "cell_type": "code", 108 | "execution_count": null, 109 | "metadata": {}, 110 | "outputs": [], 111 | "source": [ 112 | "Gayret = \"\"\"\n", 113 | "Dileyin verilecektir; arayın bulacaksınız; kapıyı çalın size açılacaktır. Hz.İsa (a.s.)\n", 114 | "\n", 115 | "Damlayan su, mermeri, yürüyen de dağları deler. Ovidius\n", 116 | "\n", 117 | "Hazine, eziyet çekene gözükür. Hz. Mevlâna\n", 118 | "\n", 119 | "Beklenen gün gelecekse, çekilen çile kutsaldır.V. Hugo\n", 120 | "\n", 121 | "Yarınlar yorgun ve bezgin kimseler değil, rahatını terk edebilen gayretli insanlara aittir. Cicero\n", 122 | "\n", 123 | "Emek olmadan, yemek olmaz. Atasözü\n", 124 | "\n", 125 | "Kötülüğün hakim olmaması için tek şart, iyilerin gayret göstermeleridir. Kelâmı Kibar\n", 126 | "\n", 127 | "İnsan bir şeyi çok ciddi olarak arzu etmeye görsün; hiçbir şey erişilemeyecek kadar yükseklerde değildir. H. Andersen\n", 128 | "\n", 129 | "Ümitsizlik ve korkaklık, çalışma azminden yoksun insanlara göredir. A. Mourois\n", 130 | "\n", 131 | "Bir çığlık, bir çığ meydana getirir. Soljenitsin\n", 132 | "\n", 133 | "Kıramıyacağm zinciri, hiç olmazsa kemir. C. Şehabettin\n", 134 | "\n", 135 | "Basit bir insanın elinden geleni yapması; bilgili ve zeki bir insanın tembelliğinden çok daha değerlidir.\n", 136 | "\n", 137 | "Taşı delen, suyun kuvveti değil; dalgaların sürekliliğidir.\n", 138 | "\n", 139 | "Damlayan su, taşı deler. Ovidius\n", 140 | "\"\"\"" 141 | ] 142 | }, 143 | { 144 | "cell_type": "code", 145 | "execution_count": null, 146 | "metadata": {}, 147 | "outputs": [], 148 | "source": [ 149 | "Umut = \"\"\"\n", 150 | "Başlangıçta fazla umut ederiz ama, sonrasında yeteri kadar değil. Joesph Roux\n", 151 | "\n", 152 | "Hayatta umutsuz durumlar yoktur, sadece umutsuzluk besleyen insanlar vardır. Booth\n", 153 | "\n", 154 | "Şafaktan önce her yer karanlıktır. Katherine Mansfield\n", 155 | "\n", 156 | "Umut, gözle görülemeyeni görür, elle tutulamayanı hisseder ve imkansızı başarır. Anonim\n", 157 | "\n", 158 | "Büyük umutlar, büyük adamlar yaratır. Thomas Fuller\n", 159 | "\n", 160 | "Umut, fakirin ekmeğidir. Thales Miletus\n", 161 | "\n", 162 | "Kazanmayı umut etmeyen, daha baştan kaybetmiştir. Jose Olmedo\n", 163 | "\n", 164 | "Umut etmeyen, hiçbir zaman umutsuzluğa kapılmaz. George Bernard Shaw\n", 165 | "\n", 166 | "Hiçbir kış, sonsuza kadar sürmez. Hal Borland\n", 167 | "\n", 168 | "Umut, şüphe etmek daha kolayken, inanmaya devam etmektir. Anonim\n", 169 | "\n", 170 | "Umut, mutluluktan alınmış bir miktar borçtur. Joseph İoubert\n", 171 | "\"\"\"" 172 | ] 173 | }, 174 | { 175 | "cell_type": "code", 176 | "execution_count": null, 177 | "metadata": {}, 178 | "outputs": [], 179 | "source": [ 180 | "Idare = \"\"\"\n", 181 | "Çok söyleyen değil, çok iş yapan yöneticiye muhtaçsınız. Hz. Ömer (r.a.)\n", 182 | "\n", 183 | "Sevginin kurduğu devleti, adalet devam ettirir. Farabi\n", 184 | "\n", 185 | "Her memleketin hakettiği bir hükümeti vardır. J. Maistere\n", 186 | "\n", 187 | "Hükümetlerin en kötüsü, suçsuzu korkutandır.\n", 188 | "\n", 189 | "Kendinizi yönetirken kafanızı, başkalarını yönetirken kalbinizi kullanın.\n", 190 | "\n", 191 | "Evi ev eden avrat, yurdu şen eden devlet. Atasözü\n", 192 | "\n", 193 | "Mal cimrilerde, silah korkanlarda, idare de zayıflarda olursa, işler bozulur. Hz. Ebubekir\n", 194 | "\n", 195 | "İnsanlar üç sınıftır: İdareciler, din alimleri ve halk. İdareciler bozulunca, geçim; alimler bozulunca, din; halk bozulunca da hak bozulur. Ebu Bekir Verrak\n", 196 | "\n", 197 | "Kendini yönet, dünyayı yönetecek gücü bulabilirsin. Plato\n", 198 | "\n", 199 | "Kötü idarecilerin başarısı, halkın ıstırabıdır.\n", 200 | "\n", 201 | "Bir memlekette ayaklar baş olursa, başlar ayaklar altında mahvolur.\n", 202 | "\n", 203 | "\"\"\"" 204 | ] 205 | }, 206 | { 207 | "cell_type": "code", 208 | "execution_count": null, 209 | "metadata": {}, 210 | "outputs": [], 211 | "source": [ 212 | "categories = [Hayat,Sevgi,Gayret,Umut,Idare]\n", 213 | "categories_name = [\"hayat\", \"sevgi\", \"gayret\", \"umut\", \"idare\"]" 214 | ] 215 | }, 216 | { 217 | "cell_type": "code", 218 | "execution_count": 8, 219 | "metadata": {}, 220 | "outputs": [], 221 | "source": [ 222 | "for i in range(len(categories)):\n", 223 | " categories[i] = categories[i].split(\"\\n\")\n" 224 | ] 225 | }, 226 | { 227 | "cell_type": "code", 228 | "execution_count": 9, 229 | "metadata": {}, 230 | "outputs": [], 231 | "source": [ 232 | "df = pd.DataFrame(columns=['sentence','category'])" 233 | ] 234 | }, 235 | { 236 | "cell_type": "code", 237 | "execution_count": 11, 238 | "metadata": {}, 239 | "outputs": [], 240 | "source": [ 241 | "for i in range(len(categories_name)):\n", 242 | " for k in range(len(categories[i])):\n", 243 | " df = df.append({'sentence': categories[i][k], 'category': categories_name[i]}, ignore_index=True)\n", 244 | " \n", 245 | " df = df[df['sentence']!=\"\"]\n", 246 | " df.reset_index(drop=True, inplace=True)\n", 247 | " " 248 | ] 249 | }, 250 | { 251 | "cell_type": "code", 252 | "execution_count": 12, 253 | "metadata": {}, 254 | "outputs": [ 255 | { 256 | "data": { 257 | "text/html": [ 258 | "
\n", 259 | "\n", 272 | "\n", 273 | " \n", 274 | " \n", 275 | " \n", 276 | " \n", 277 | " \n", 278 | " \n", 279 | " \n", 280 | " \n", 281 | " \n", 282 | " \n", 283 | " \n", 284 | " \n", 285 | " \n", 286 | " \n", 287 | " \n", 288 | " \n", 289 | " \n", 290 | " \n", 291 | " \n", 292 | " \n", 293 | " \n", 294 | " \n", 295 | " \n", 296 | " \n", 297 | " \n", 298 | " \n", 299 | " \n", 300 | " \n", 301 | " \n", 302 | " \n", 303 | " \n", 304 | " \n", 305 | " \n", 306 | " \n", 307 | " \n", 308 | " \n", 309 | " \n", 310 | " \n", 311 | " \n", 312 | " \n", 313 | " \n", 314 | " \n", 315 | " \n", 316 | " \n", 317 | " \n", 318 | " \n", 319 | " \n", 320 | " \n", 321 | " \n", 322 | " \n", 323 | " \n", 324 | " \n", 325 | " \n", 326 | " \n", 327 | " \n", 328 | " \n", 329 | " \n", 330 | " \n", 331 | " \n", 332 | " \n", 333 | " \n", 334 | " \n", 335 | " \n", 336 | " \n", 337 | " \n", 338 | " \n", 339 | " \n", 340 | " \n", 341 | " \n", 342 | " \n", 343 | " \n", 344 | " \n", 345 | " \n", 346 | " \n", 347 | " \n", 348 | " \n", 349 | " \n", 350 | " \n", 351 | " \n", 352 | " \n", 353 | " \n", 354 | " \n", 355 | " \n", 356 | " \n", 357 | " \n", 358 | " \n", 359 | " \n", 360 | " \n", 361 | " \n", 362 | " \n", 363 | " \n", 364 | " \n", 365 | " \n", 366 | " \n", 367 | " \n", 368 | " \n", 369 | " \n", 370 | " \n", 371 | " \n", 372 | " \n", 373 | " \n", 374 | " \n", 375 | " \n", 376 | " \n", 377 | " \n", 378 | " \n", 379 | " \n", 380 | " \n", 381 | " \n", 382 | " \n", 383 | " \n", 384 | " \n", 385 | " \n", 386 | " \n", 387 | " \n", 388 | " \n", 389 | " \n", 390 | " \n", 391 | " \n", 392 | " \n", 393 | " \n", 394 | " \n", 395 | " \n", 396 | " \n", 397 | " \n", 398 | " \n", 399 | " \n", 400 | " \n", 401 | " \n", 402 | " \n", 403 | " \n", 404 | " \n", 405 | " \n", 406 | " \n", 407 | " \n", 408 | " \n", 409 | " \n", 410 | " \n", 411 | " \n", 412 | " \n", 413 | " \n", 414 | " \n", 415 | " \n", 416 | " \n", 417 | " \n", 418 | " \n", 419 | " \n", 420 | " \n", 421 | " \n", 422 | " \n", 423 | " \n", 424 | " \n", 425 | " \n", 426 | " \n", 427 | " \n", 428 | " \n", 429 | " \n", 430 | " \n", 431 | " \n", 432 | " \n", 433 | " \n", 434 | " \n", 435 | " \n", 436 | " \n", 437 | " \n", 438 | " \n", 439 | " \n", 440 | " \n", 441 | " \n", 442 | " \n", 443 | " \n", 444 | " \n", 445 | " \n", 446 | " \n", 447 | " \n", 448 | " \n", 449 | " \n", 450 | " \n", 451 | " \n", 452 | " \n", 453 | " \n", 454 | " \n", 455 | " \n", 456 | " \n", 457 | " \n", 458 | " \n", 459 | " \n", 460 | " \n", 461 | " \n", 462 | " \n", 463 | " \n", 464 | " \n", 465 | " \n", 466 | " \n", 467 | " \n", 468 | " \n", 469 | " \n", 470 | " \n", 471 | " \n", 472 | " \n", 473 | " \n", 474 | " \n", 475 | " \n", 476 | " \n", 477 | " \n", 478 | " \n", 479 | " \n", 480 | " \n", 481 | " \n", 482 | " \n", 483 | " \n", 484 | " \n", 485 | " \n", 486 | " \n", 487 | " \n", 488 | " \n", 489 | " \n", 490 | " \n", 491 | " \n", 492 | " \n", 493 | " \n", 494 | " \n", 495 | " \n", 496 | " \n", 497 | " \n", 498 | " \n", 499 | " \n", 500 | " \n", 501 | " \n", 502 | " \n", 503 | " \n", 504 | " \n", 505 | " \n", 506 | " \n", 507 | " \n", 508 | " \n", 509 | " \n", 510 | " \n", 511 | " \n", 512 | " \n", 513 | " \n", 514 | " \n", 515 | " \n", 516 | " \n", 517 | " \n", 518 | " \n", 519 | " \n", 520 | " \n", 521 | " \n", 522 | " \n", 523 | " \n", 524 | " \n", 525 | " \n", 526 | " \n", 527 | " \n", 528 | " \n", 529 | " \n", 530 | " \n", 531 | " \n", 532 | " \n", 533 | " \n", 534 | " \n", 535 | " \n", 536 | " \n", 537 | " \n", 538 | " \n", 539 | " \n", 540 | " \n", 541 | " \n", 542 | " \n", 543 | " \n", 544 | " \n", 545 | " \n", 546 | " \n", 547 | " \n", 548 | " \n", 549 | " \n", 550 | " \n", 551 | " \n", 552 | " \n", 553 | " \n", 554 | " \n", 555 | " \n", 556 | " \n", 557 | " \n", 558 | " \n", 559 | " \n", 560 | " \n", 561 | " \n", 562 | " \n", 563 | " \n", 564 | " \n", 565 | " \n", 566 | " \n", 567 | "
sentencecategory
0Olumlu düşünen, bütün olası dünyaların en iyis...hayat
1Bu dünyaya gelmenin sadece tek bir yolu vardır...hayat
2Birisinin ‘Hayat zor.’ diye yakındığını duyduğ...hayat
3Mutsuz olmamamız gerekir. Kimsenin hayatla bir...hayat
4Hayatını kazanırken yaşamasını bilmeyen bir ad...hayat
5Yarının ne olacağını sormaktan vazgeç. Her gün...hayat
6Hayatınızı yaşamanın en iyi yolu, sizden sonra...hayat
7Biz Japonlar, küçük zevklerden hoşlanırız, isr...hayat
8Benim sanatım ve mesleğim yaşamaktır. Montaignehayat
9Hayat, çikolata ile dolu bir kutu gibidir. Ne ...hayat
10Hayat, büyük bir sürprizdir. Ölümün neden daha...hayat
11Karım, benim ‘Seni seviyorum.’ dememi binle...sevgi
12Büyüklerine saygı, küçüklerine şevkat gösterme...sevgi
13Sevip de kaybetmek, sevmemiş olmaktan daha iyi...sevgi
14Sevgiyle düşünün, sevgiyle konuşun, sevgiyle d...sevgi
15Sevgi, insanı birliğe, bencillik ise yalnızlığ...sevgi
16Sevdiği kadını ve sevdiği işi bulan bir erkek,...sevgi
17Kızgınlık, kırgınlık ya da acıya tutunmayın. E...sevgi
18Herkes temel bir şeyi unutuyor; insanlar sizi,...sevgi
19Sevgi, dünyadaki yaşamın aktığı nehirdir. Henr...sevgi
20Sevmeden verebilirsiniz ama, vermeden sevemezs...sevgi
21Dileyin verilecektir; arayın bulacaksınız; kap...gayret
22Damlayan su, mermeri, yürüyen de dağları deler...gayret
23Hazine, eziyet çekene gözükür. Hz. Mevlânagayret
24Beklenen gün gelecekse, çekilen çile kutsaldır...gayret
25Yarınlar yorgun ve bezgin kimseler değil, raha...gayret
26Emek olmadan, yemek olmaz. Atasözügayret
27Kötülüğün hakim olmaması için tek şart, iyiler...gayret
28İnsan bir şeyi çok ciddi olarak arzu etmeye gö...gayret
29Ümitsizlik ve korkaklık, çalışma azminden yoks...gayret
30Bir çığlık, bir çığ meydana getirir. Soljenitsingayret
31Kıramıyacağm zinciri, hiç olmazsa kemir. C. Şe...gayret
32Basit bir insanın elinden geleni yapması; bilg...gayret
33Taşı delen, suyun kuvveti değil; dalgaların sü...gayret
34Damlayan su, taşı deler. Ovidiusgayret
35Başlangıçta fazla umut ederiz ama, sonrasında ...umut
36Hayatta umutsuz durumlar yoktur, sadece umuts...umut
37Şafaktan önce her yer karanlıktır. Katherine M...umut
38Umut, gözle görülemeyeni görür, elle tutulamay...umut
39Büyük umutlar, büyük adamlar yaratır. Thomas F...umut
40Umut, fakirin ekmeğidir. Thales Miletusumut
41Kazanmayı umut etmeyen, daha baştan kaybetmişt...umut
42Umut etmeyen, hiçbir zaman umutsuzluğa kapılma...umut
43Hiçbir kış, sonsuza kadar sürmez. Hal Borlandumut
44Umut, şüphe etmek daha kolayken, inanmaya deva...umut
45Umut, mutluluktan alınmış bir miktar borçtur. ...umut
46Çok söyleyen değil, çok iş yapan yöneticiye mu...idare
47Sevginin kurduğu devleti, adalet devam ettirir...idare
48Her memleketin hakettiği bir hükümeti vardır. ...idare
49Hükümetlerin en kötüsü, suçsuzu korkutandır.idare
50Kendinizi yönetirken kafanızı, başkalarını yön...idare
51Evi ev eden avrat, yurdu şen eden devlet. Atasözüidare
52Mal cimrilerde, silah korkanlarda, idare de za...idare
53İnsanlar üç sınıftır: İdareciler, din alimleri...idare
54Kendini yönet, dünyayı yönetecek gücü bulabili...idare
55Kötü idarecilerin başarısı, halkın ıstırabıdır.idare
56Bir memlekette ayaklar baş olursa, başlar ayak...idare
\n", 568 | "
" 569 | ], 570 | "text/plain": [ 571 | " sentence category\n", 572 | "0 Olumlu düşünen, bütün olası dünyaların en iyis... hayat\n", 573 | "1 Bu dünyaya gelmenin sadece tek bir yolu vardır... hayat\n", 574 | "2 Birisinin ‘Hayat zor.’ diye yakındığını duyduğ... hayat\n", 575 | "3 Mutsuz olmamamız gerekir. Kimsenin hayatla bir... hayat\n", 576 | "4 Hayatını kazanırken yaşamasını bilmeyen bir ad... hayat\n", 577 | "5 Yarının ne olacağını sormaktan vazgeç. Her gün... hayat\n", 578 | "6 Hayatınızı yaşamanın en iyi yolu, sizden sonra... hayat\n", 579 | "7 Biz Japonlar, küçük zevklerden hoşlanırız, isr... hayat\n", 580 | "8 Benim sanatım ve mesleğim yaşamaktır. Montaigne hayat\n", 581 | "9 Hayat, çikolata ile dolu bir kutu gibidir. Ne ... hayat\n", 582 | "10 Hayat, büyük bir sürprizdir. Ölümün neden daha... hayat\n", 583 | "11 Karım, benim ‘Seni seviyorum.’ dememi binle... sevgi\n", 584 | "12 Büyüklerine saygı, küçüklerine şevkat gösterme... sevgi\n", 585 | "13 Sevip de kaybetmek, sevmemiş olmaktan daha iyi... sevgi\n", 586 | "14 Sevgiyle düşünün, sevgiyle konuşun, sevgiyle d... sevgi\n", 587 | "15 Sevgi, insanı birliğe, bencillik ise yalnızlığ... sevgi\n", 588 | "16 Sevdiği kadını ve sevdiği işi bulan bir erkek,... sevgi\n", 589 | "17 Kızgınlık, kırgınlık ya da acıya tutunmayın. E... sevgi\n", 590 | "18 Herkes temel bir şeyi unutuyor; insanlar sizi,... sevgi\n", 591 | "19 Sevgi, dünyadaki yaşamın aktığı nehirdir. Henr... sevgi\n", 592 | "20 Sevmeden verebilirsiniz ama, vermeden sevemezs... sevgi\n", 593 | "21 Dileyin verilecektir; arayın bulacaksınız; kap... gayret\n", 594 | "22 Damlayan su, mermeri, yürüyen de dağları deler... gayret\n", 595 | "23 Hazine, eziyet çekene gözükür. Hz. Mevlâna gayret\n", 596 | "24 Beklenen gün gelecekse, çekilen çile kutsaldır... gayret\n", 597 | "25 Yarınlar yorgun ve bezgin kimseler değil, raha... gayret\n", 598 | "26 Emek olmadan, yemek olmaz. Atasözü gayret\n", 599 | "27 Kötülüğün hakim olmaması için tek şart, iyiler... gayret\n", 600 | "28 İnsan bir şeyi çok ciddi olarak arzu etmeye gö... gayret\n", 601 | "29 Ümitsizlik ve korkaklık, çalışma azminden yoks... gayret\n", 602 | "30 Bir çığlık, bir çığ meydana getirir. Soljenitsin gayret\n", 603 | "31 Kıramıyacağm zinciri, hiç olmazsa kemir. C. Şe... gayret\n", 604 | "32 Basit bir insanın elinden geleni yapması; bilg... gayret\n", 605 | "33 Taşı delen, suyun kuvveti değil; dalgaların sü... gayret\n", 606 | "34 Damlayan su, taşı deler. Ovidius gayret\n", 607 | "35 Başlangıçta fazla umut ederiz ama, sonrasında ... umut\n", 608 | "36 Hayatta umutsuz durumlar yoktur, sadece umuts... umut\n", 609 | "37 Şafaktan önce her yer karanlıktır. Katherine M... umut\n", 610 | "38 Umut, gözle görülemeyeni görür, elle tutulamay... umut\n", 611 | "39 Büyük umutlar, büyük adamlar yaratır. Thomas F... umut\n", 612 | "40 Umut, fakirin ekmeğidir. Thales Miletus umut\n", 613 | "41 Kazanmayı umut etmeyen, daha baştan kaybetmişt... umut\n", 614 | "42 Umut etmeyen, hiçbir zaman umutsuzluğa kapılma... umut\n", 615 | "43 Hiçbir kış, sonsuza kadar sürmez. Hal Borland umut\n", 616 | "44 Umut, şüphe etmek daha kolayken, inanmaya deva... umut\n", 617 | "45 Umut, mutluluktan alınmış bir miktar borçtur. ... umut\n", 618 | "46 Çok söyleyen değil, çok iş yapan yöneticiye mu... idare\n", 619 | "47 Sevginin kurduğu devleti, adalet devam ettirir... idare\n", 620 | "48 Her memleketin hakettiği bir hükümeti vardır. ... idare\n", 621 | "49 Hükümetlerin en kötüsü, suçsuzu korkutandır. idare\n", 622 | "50 Kendinizi yönetirken kafanızı, başkalarını yön... idare\n", 623 | "51 Evi ev eden avrat, yurdu şen eden devlet. Atasözü idare\n", 624 | "52 Mal cimrilerde, silah korkanlarda, idare de za... idare\n", 625 | "53 İnsanlar üç sınıftır: İdareciler, din alimleri... idare\n", 626 | "54 Kendini yönet, dünyayı yönetecek gücü bulabili... idare\n", 627 | "55 Kötü idarecilerin başarısı, halkın ıstırabıdır. idare\n", 628 | "56 Bir memlekette ayaklar baş olursa, başlar ayak... idare" 629 | ] 630 | }, 631 | "execution_count": 12, 632 | "metadata": {}, 633 | "output_type": "execute_result" 634 | } 635 | ], 636 | "source": [ 637 | "df" 638 | ] 639 | }, 640 | { 641 | "cell_type": "code", 642 | "execution_count": 13, 643 | "metadata": {}, 644 | "outputs": [], 645 | "source": [ 646 | "df[\"cleaned_sentence\"]=df['sentence'].copy()\n", 647 | "\n", 648 | "for i in range(len(df)):\n", 649 | " df[\"cleaned_sentence\"][i] = re.sub('[!@#’‘?.,\\'$]', '', df[\"cleaned_sentence\"][i])\n", 650 | " df[\"cleaned_sentence\"][i] = df[\"cleaned_sentence\"][i].lower()\n" 651 | ] 652 | }, 653 | { 654 | "cell_type": "markdown", 655 | "metadata": {}, 656 | "source": [ 657 | "###
Jaccard Similarity Formula [2]
\n", 658 | "![Jaccard Similarity Formula](figures/fig_jaccard3.png)" 659 | ] 660 | }, 661 | { 662 | "cell_type": "code", 663 | "execution_count": 14, 664 | "metadata": {}, 665 | "outputs": [], 666 | "source": [ 667 | "class life_coach:\n", 668 | " def jaccard_similarity(str1, str2):\n", 669 | " a = set(str1.split()) \n", 670 | " b = set(str2.split())\n", 671 | " intersection = a.intersection(b)\n", 672 | " union = len(a) + len(b) - len(intersection)\n", 673 | "\n", 674 | " return float(len(intersection) / union)\n", 675 | "\n", 676 | " def recomendation_random_jaccard():\n", 677 | " jaccard_score_list = []\n", 678 | " answer = input(\"Hi there, \\n What advice would you like? (Hayat/Sevgi/Gayret/Umut/Idare) \\n \\t Answer: \")\n", 679 | " answer = answer.lower()\n", 680 | "\n", 681 | " if len(answer.split()) > 1:\n", 682 | " for i in range(len(df)):\n", 683 | " jaccard_score_list.append(life_coach.jaccard_similarity(df[\"cleaned_sentence\"][i], answer)) \n", 684 | " max_index = jaccard_score_list.index(max(jaccard_score_list))\n", 685 | " recommendation = df['sentence'][max_index]\n", 686 | "\n", 687 | " return recommendation\n", 688 | "\n", 689 | " else:\n", 690 | " if(answer in categories_name):\n", 691 | " recommendation = df[\"sentence\"][df[\"category\"]==answer].sample(n=1).values[0]\n", 692 | "\n", 693 | " return recommendation\n", 694 | " else:\n", 695 | " recommendation = df[\"sentence\"].sample(n=1).values[0]\n", 696 | " \n", 697 | " return recommendation\n", 698 | " " 699 | ] 700 | }, 701 | { 702 | "cell_type": "code", 703 | "execution_count": 15, 704 | "metadata": {}, 705 | "outputs": [ 706 | { 707 | "name": "stdout", 708 | "output_type": "stream", 709 | "text": [ 710 | "Hi there, \n", 711 | " What advice would you like? (Hayat/Sevgi/Gayret/Umut/Idare) \n", 712 | " \t Answer: ben nasıl büyük adam olacağım?\n" 713 | ] 714 | }, 715 | { 716 | "data": { 717 | "text/plain": [ 718 | "'Büyük umutlar, büyük adamlar yaratır. Thomas Fuller'" 719 | ] 720 | }, 721 | "execution_count": 15, 722 | "metadata": {}, 723 | "output_type": "execute_result" 724 | } 725 | ], 726 | "source": [ 727 | "life_coach.recomendation_random_jaccard()" 728 | ] 729 | }, 730 | { 731 | "cell_type": "markdown", 732 | "metadata": {}, 733 | "source": [ 734 | "##
Word2Vec by Tomas Mikolov [3, 4]
\n", 735 | "![Tomas Mikolov](figures/fig_mikolov3.jpg)" 736 | ] 737 | }, 738 | { 739 | "cell_type": "code", 740 | "execution_count": 16, 741 | "metadata": {}, 742 | "outputs": [ 743 | { 744 | "name": "stdout", 745 | "output_type": "stream", 746 | "text": [ 747 | "total time: 7.967896223068237\n" 748 | ] 749 | } 750 | ], 751 | "source": [ 752 | "start = time.time()\n", 753 | "\n", 754 | "word_vectors = KeyedVectors.load_word2vec_format('trmodel', binary=True)\n", 755 | "\n", 756 | "print(\"total time: \", time.time() - start)" 757 | ] 758 | }, 759 | { 760 | "cell_type": "code", 761 | "execution_count": 17, 762 | "metadata": { 763 | "collapsed": true 764 | }, 765 | "outputs": [ 766 | { 767 | "data": { 768 | "text/plain": [ 769 | "array([ 2.68965900e-01, -2.31049150e-01, -1.39877414e-02, 5.01415670e-01,\n", 770 | " -3.87772083e-01, 9.48118344e-02, -3.41180235e-01, 6.61792755e-02,\n", 771 | " -2.00259641e-01, -2.60225773e-01, -1.54859349e-01, -2.94063717e-01,\n", 772 | " 8.81631523e-02, -6.93495691e-01, 2.62236565e-01, -7.02954233e-01,\n", 773 | " 1.48157239e-01, -2.26100516e-02, -5.08654892e-01, -3.36448401e-01,\n", 774 | " -6.55333698e-01, 6.06544673e-01, 1.45015508e-01, 5.21622837e-01,\n", 775 | " 2.30119780e-01, 5.41646898e-01, 1.21688239e-01, -8.31140950e-02,\n", 776 | " -1.70926183e-01, 6.04562238e-02, 4.95102517e-02, 4.68903482e-01,\n", 777 | " -4.21791039e-02, 2.15031639e-01, 1.06118023e-01, 2.20864788e-01,\n", 778 | " 3.78131479e-01, -9.36619285e-03, -4.38744090e-02, 2.45283589e-01,\n", 779 | " -2.29311645e-01, 2.98134089e-01, -1.47766873e-01, -6.02133453e-01,\n", 780 | " -2.42539644e-01, -3.93561304e-01, 1.41639158e-01, 2.75545299e-01,\n", 781 | " 5.86297549e-02, -2.19686255e-01, -5.91334820e-01, 1.38153091e-01,\n", 782 | " -8.34502801e-02, -6.57830834e-02, 3.52780819e-01, 3.72141123e-01,\n", 783 | " -1.29393730e-02, 1.36783198e-01, -3.29147607e-01, -1.86146080e-01,\n", 784 | " 5.81680000e-01, 8.48400891e-02, -3.56496930e-01, -1.02531433e-01,\n", 785 | " -2.30421424e-01, -2.31008261e-01, -2.23964706e-01, 5.22726357e-01,\n", 786 | " 1.06802836e-01, -1.84232950e-01, -7.50877261e-02, -1.22545786e-01,\n", 787 | " -8.33109379e-01, -1.74446955e-01, -4.84960377e-01, 1.88397795e-01,\n", 788 | " 3.63693655e-01, 2.14207008e-01, 3.70389223e-01, 3.40535462e-01,\n", 789 | " 2.29665660e-03, 1.08541094e-01, 1.09311529e-01, -3.02805770e-02,\n", 790 | " -1.21572562e-01, 3.23218971e-01, -1.52276531e-01, 2.66119063e-01,\n", 791 | " -1.83906913e-01, 4.56601322e-01, 2.50859205e-02, -2.14839518e-01,\n", 792 | " -6.84119284e-01, -2.21968263e-01, -1.28723070e-01, 3.09683979e-02,\n", 793 | " 5.89000769e-02, -1.33028641e-01, 1.97618425e-01, -4.55594391e-01,\n", 794 | " 1.67473510e-01, -3.30288202e-01, 4.77620691e-01, -3.73052359e-01,\n", 795 | " -3.33976507e-01, -2.09369004e-01, 1.98051352e-02, -4.04709667e-01,\n", 796 | " 3.37285101e-01, -3.94322462e-02, 2.04144105e-01, 3.38917077e-01,\n", 797 | " 4.85842712e-02, 2.35967666e-01, -4.58983779e-02, -2.24650636e-01,\n", 798 | " -2.31560305e-01, 3.07971478e-01, -1.58236295e-01, 5.59637733e-02,\n", 799 | " 2.96200007e-01, 1.87782869e-01, 1.91476405e-01, -9.01234448e-02,\n", 800 | " 1.34151220e-01, -4.88226712e-02, -2.13327020e-01, -2.07978845e-01,\n", 801 | " -5.80791607e-02, -1.61733359e-01, 3.30264181e-01, 4.75203693e-01,\n", 802 | " -1.49062529e-01, -2.14512557e-01, -3.79552275e-01, 4.43961531e-01,\n", 803 | " -1.30009130e-01, -1.49555534e-01, 1.52899325e-01, -2.36365110e-01,\n", 804 | " 1.33115947e-01, -4.13822860e-01, -6.53085187e-02, -1.22604787e-01,\n", 805 | " 4.20762189e-02, 1.75755396e-01, 3.07856109e-02, 1.29296631e-01,\n", 806 | " -1.53216839e-01, 7.25020245e-02, 2.63337672e-01, -1.15945451e-01,\n", 807 | " 2.60642529e-01, -1.16214484e-01, 1.26050949e-01, 3.97696793e-01,\n", 808 | " 3.51915479e-01, 1.31670132e-01, -6.33517325e-01, 3.39051224e-02,\n", 809 | " 8.69356096e-01, 1.01590507e-01, 1.72960274e-02, 1.48873135e-01,\n", 810 | " 1.32002970e-02, -4.02518839e-01, -1.16286457e-01, -4.36313272e-01,\n", 811 | " 2.14410022e-01, 1.74079880e-01, -2.70199597e-01, -4.40130197e-02,\n", 812 | " -8.84990618e-02, 1.40610948e-01, -1.88822180e-01, 2.83975452e-01,\n", 813 | " 3.69838089e-01, -1.02038220e-01, -1.60731599e-01, -7.32715502e-02,\n", 814 | " 4.59586792e-02, -6.26884103e-01, 7.47827142e-02, -4.00608540e-01,\n", 815 | " 2.79688120e-01, -1.48352310e-01, -2.02754900e-01, -3.69806498e-01,\n", 816 | " 8.05729181e-02, -2.12612422e-03, 7.15789497e-01, -3.94734070e-02,\n", 817 | " -8.72444361e-02, 3.78658548e-02, 4.96743768e-01, 8.88971016e-02,\n", 818 | " 5.62702529e-02, -3.81853543e-02, -1.06165871e-01, -4.44926232e-01,\n", 819 | " -3.41567874e-01, -2.10568592e-01, -6.72565818e-01, -1.61496982e-01,\n", 820 | " 3.46938550e-01, -2.87684761e-02, -1.27153546e-01, 1.73034102e-01,\n", 821 | " 1.76743805e-01, -1.92096695e-01, -5.85535355e-02, -2.18180031e-01,\n", 822 | " -1.74997121e-01, 2.07062364e-01, -6.67513132e-01, 1.30257219e-01,\n", 823 | " 3.38079333e-01, -2.40119800e-01, -4.05796915e-01, 1.88232847e-02,\n", 824 | " 3.82394880e-01, 1.44638553e-01, 4.38170612e-01, -3.18430513e-02,\n", 825 | " -1.23506449e-01, -2.27523446e-01, 2.08541945e-01, 1.66264430e-01,\n", 826 | " 1.12434570e-02, 1.61233336e-01, 1.53318509e-01, -1.02155171e-01,\n", 827 | " 1.82883009e-01, 6.77907020e-02, -4.02729809e-01, 3.47500980e-01,\n", 828 | " -1.85280040e-01, -2.81058848e-01, -2.62775660e-01, 1.12970978e-01,\n", 829 | " -2.43529782e-01, -1.34619996e-01, -2.43720382e-01, 3.13400145e-04,\n", 830 | " -2.55975157e-01, -2.74333209e-01, 4.51881788e-04, 3.62936780e-02,\n", 831 | " 1.45363510e-01, 3.14314455e-01, -1.94447622e-01, 3.59643072e-01,\n", 832 | " -1.50539339e-01, 5.59866838e-02, 1.26861349e-01, -2.56182581e-01,\n", 833 | " -3.15596014e-02, -3.47847641e-02, -1.20404787e-01, -9.74171702e-03,\n", 834 | " -8.63423347e-02, -1.11960411e-01, -2.26183981e-01, 3.61524552e-01,\n", 835 | " 1.00163676e-01, -7.90459931e-01, 1.23467639e-01, 1.61021128e-01,\n", 836 | " -2.00465903e-01, 3.24166626e-01, -2.45783627e-01, 1.23461336e-01,\n", 837 | " 4.01673466e-01, 1.26981884e-01, 2.65059397e-02, -2.45157808e-01,\n", 838 | " -1.50422052e-01, -5.86047880e-02, 9.63619053e-02, -3.75298291e-01,\n", 839 | " -4.49580729e-01, -1.66740134e-01, 6.98688805e-01, 1.31418839e-01,\n", 840 | " 5.10533154e-01, 1.47098657e-02, -4.18837517e-01, -4.63743657e-01,\n", 841 | " 2.04766616e-01, -3.23911071e-01, 7.85329267e-02, -3.71749192e-01,\n", 842 | " -2.98781931e-01, 1.02764659e-01, -5.96690178e-02, -1.20155491e-01,\n", 843 | " -1.75153702e-01, 1.41026795e-01, -4.96667773e-01, -5.75755015e-02,\n", 844 | " -2.49374866e-01, -3.39314014e-01, -2.55162627e-01, 4.30006266e-01,\n", 845 | " -9.96119529e-02, -1.07625216e-01, 1.18785433e-01, -6.66947439e-02,\n", 846 | " 1.82068527e-01, 2.42684469e-01, -3.58444542e-01, 6.06060922e-01,\n", 847 | " 3.57650816e-01, 3.66076440e-01, 8.56107287e-03, -1.54305901e-02,\n", 848 | " -2.31704473e-01, -3.14358175e-01, 2.30463952e-01, -1.81115776e-01,\n", 849 | " 3.16184342e-01, -2.77285397e-01, -9.52390209e-02, -4.50040430e-01,\n", 850 | " 1.75704479e-01, 4.20755953e-01, 3.45656544e-01, -5.70451021e-01,\n", 851 | " 5.95431149e-01, 2.01613650e-01, -5.36648095e-01, -2.08568305e-01,\n", 852 | " 1.58395231e-01, 9.16106701e-02, 9.98124406e-02, 1.52556166e-01,\n", 853 | " 1.82493359e-01, -4.09063324e-02, -2.59236068e-01, -1.72264308e-01,\n", 854 | " -1.76083565e-01, -8.58677030e-02, 3.46075624e-01, -4.36252616e-02,\n", 855 | " 1.20054752e-01, 1.14377081e-01, -4.11091000e-01, -2.43643284e-01,\n", 856 | " -2.79971510e-01, -1.74042717e-01, -1.81186378e-01, -2.11859182e-01,\n", 857 | " 1.74828216e-01, -2.61165369e-02, -1.28260121e-01, -2.24717006e-01,\n", 858 | " -1.95217773e-01, -1.21586666e-01, -3.12659591e-01, -1.26272485e-01,\n", 859 | " -5.17871141e-01, 2.55385101e-01, -2.62791127e-01, 2.84121275e-01,\n", 860 | " -3.93580407e-01, 3.47391218e-01, 1.32898018e-01, 2.79780149e-01,\n", 861 | " -1.79467648e-02, -8.46280903e-02, -3.96751612e-01, -2.56648928e-01,\n", 862 | " 6.66394073e-04, -4.93227839e-02, 2.05863237e-01, 1.68317288e-01,\n", 863 | " 1.47464633e-01, 1.29950941e-01, 3.37933868e-01, 5.06360680e-02,\n", 864 | " -1.24166943e-01, 3.81927341e-02, 8.75568613e-02, 1.50063083e-01,\n", 865 | " -3.09307594e-02, 3.08934510e-01, -1.36933789e-01, 8.08016717e-01,\n", 866 | " -3.97490799e-01, 4.43329573e-01, 1.27565488e-01, -3.19312029e-02,\n", 867 | " 1.73908602e-02, -9.83035937e-02, -2.11003721e-01, -1.98274165e-01,\n", 868 | " 4.80454266e-01, 1.02582522e-01, -4.35888674e-03, 3.25216025e-01],\n", 869 | " dtype=float32)" 870 | ] 871 | }, 872 | "execution_count": 17, 873 | "metadata": {}, 874 | "output_type": "execute_result" 875 | } 876 | ], 877 | "source": [ 878 | "word_vectors['motivasyon']" 879 | ] 880 | }, 881 | { 882 | "cell_type": "code", 883 | "execution_count": 19, 884 | "metadata": {}, 885 | "outputs": [ 886 | { 887 | "data": { 888 | "text/plain": [ 889 | "[('kraliçe', 0.508816123008728),\n", 890 | " ('kralı', 0.4718089699745178),\n", 891 | " ('kralın', 0.44512394070625305),\n", 892 | " ('kraliçesi', 0.4190150499343872),\n", 893 | " ('prenses', 0.40713071823120117),\n", 894 | " ('hükümdar', 0.4056030213832855),\n", 895 | " ('prens', 0.3978961706161499),\n", 896 | " ('kraliçenin', 0.39632880687713623),\n", 897 | " ('veliaht', 0.38219934701919556),\n", 898 | " ('tahtı', 0.3773398995399475)]" 899 | ] 900 | }, 901 | "execution_count": 19, 902 | "metadata": {}, 903 | "output_type": "execute_result" 904 | } 905 | ], 906 | "source": [ 907 | "word_vectors.most_similar(positive=[\"kral\",\"kadın\"], negative=[\"erkek\"])" 908 | ] 909 | }, 910 | { 911 | "cell_type": "code", 912 | "execution_count": 20, 913 | "metadata": {}, 914 | "outputs": [ 915 | { 916 | "data": { 917 | "text/plain": [ 918 | "[('gidiyor', 0.592621922492981),\n", 919 | " ('gidiyorum', 0.5690363645553589),\n", 920 | " ('gidelim', 0.5637924671173096),\n", 921 | " ('geldim', 0.5413458347320557),\n", 922 | " ('bakıyor', 0.5373592972755432),\n", 923 | " ('gittim', 0.5343414545059204),\n", 924 | " ('gideceğim', 0.5251941680908203),\n", 925 | " ('geldik', 0.5050601363182068),\n", 926 | " ('geliyoruz', 0.5047824382781982),\n", 927 | " ('gider', 0.504159688949585)]" 928 | ] 929 | }, 930 | "execution_count": 20, 931 | "metadata": {}, 932 | "output_type": "execute_result" 933 | } 934 | ], 935 | "source": [ 936 | "word_vectors.most_similar(positive=[\"geliyor\",\"gitmek\"],negative=[\"gelmek\"])" 937 | ] 938 | }, 939 | { 940 | "cell_type": "markdown", 941 | "metadata": {}, 942 | "source": [ 943 | "###
Cosine Similarity Formula [5]
\n", 944 | "![Cosine Similarity Formula](figures/fig_cosine_similarity2.png)" 945 | ] 946 | }, 947 | { 948 | "cell_type": "code", 949 | "execution_count": 21, 950 | "metadata": {}, 951 | "outputs": [], 952 | "source": [ 953 | "class life_coach_w2v:\n", 954 | " def construct_wv_matrices(df, answer):\n", 955 | " word_matrix = np.zeros((len(df), 400))\n", 956 | " for i in range(len(df)):\n", 957 | " wv_sum = np.zeros((1, 400))\n", 958 | " for j in df.iloc[i]['cleaned_sentence'].split(' '):\n", 959 | " try:\n", 960 | " wv_sum += word_vectors[j]\n", 961 | " except: \n", 962 | " pass\n", 963 | " word_matrix[i] = np.divide(wv_sum, len(df.iloc[i]['cleaned_sentence'].split(' ')))\n", 964 | "\n", 965 | " answer_vector = np.zeros((1, 400))\n", 966 | " for k in answer.split(' '):\n", 967 | " try:\n", 968 | " answer_vector += word_vectors[k]\n", 969 | " except: \n", 970 | " pass\n", 971 | " answer_vector = np.divide(answer_vector, len(answer.split(' ')))\n", 972 | "\n", 973 | " return word_matrix, answer_vector\n", 974 | "\n", 975 | " def recommendation_wv():\n", 976 | " answer = input(\"Hi there, \\n What advice would you like? (Hayat/Sevgi/Gayret/Umut/Idare) \\n \\t Answer: \")\n", 977 | " answer = answer.lower()\n", 978 | "\n", 979 | " word_matrix, answer_vector = life_coach_w2v.construct_wv_matrices(df, answer)\n", 980 | "\n", 981 | " score_board = []\n", 982 | " for i in range(len(df)):\n", 983 | " score = cosine_similarity(word_matrix[i].reshape(1,400), answer_vector.reshape(1,400))\n", 984 | " score_board.append(score)\n", 985 | " recommendation = df.iloc[score_board.index(max(score_board))].sentence\n", 986 | " \n", 987 | " return recommendation\n", 988 | " " 989 | ] 990 | }, 991 | { 992 | "cell_type": "code", 993 | "execution_count": 22, 994 | "metadata": {}, 995 | "outputs": [ 996 | { 997 | "name": "stdout", 998 | "output_type": "stream", 999 | "text": [ 1000 | "Hi there, \n", 1001 | " What advice would you like? (Hayat/Sevgi/Gayret/Umut/Idare) \n", 1002 | " \t Answer: ben nasıl büyük adam olacağım?\n" 1003 | ] 1004 | }, 1005 | { 1006 | "data": { 1007 | "text/plain": [ 1008 | "'Büyük umutlar, büyük adamlar yaratır. Thomas Fuller'" 1009 | ] 1010 | }, 1011 | "execution_count": 22, 1012 | "metadata": {}, 1013 | "output_type": "execute_result" 1014 | } 1015 | ], 1016 | "source": [ 1017 | "life_coach_w2v.recommendation_wv()" 1018 | ] 1019 | }, 1020 | { 1021 | "cell_type": "markdown", 1022 | "metadata": {}, 1023 | "source": [ 1024 | "### References \n", 1025 | "\n", 1026 | "[1] https://github.com/uzay00/KaVe-Egitim/tree/master/VeriBilimi
\n", 1027 | "[2] http://tiny.cc/cp1o4y
\n", 1028 | "[3] Mikolov, Tomas, et al. \"Distributed representations of words and phrases and their compositionality.\" Advances in neural information processing systems. 2013.
\n", 1029 | "[4] Mikolov, Tomas, et al. \"Efficient estimation of word representations in vector space.\" arXiv preprint arXiv:1301.3781 (2013).
\n", 1030 | "[5] https://github.com/akoksal/Turkish-Word2Vec
\n", 1031 | "[6] http://tiny.cc/iq1o4y" 1032 | ] 1033 | } 1034 | ], 1035 | "metadata": { 1036 | "kernelspec": { 1037 | "display_name": "Python 3", 1038 | "language": "python", 1039 | "name": "python3" 1040 | }, 1041 | "language_info": { 1042 | "codemirror_mode": { 1043 | "name": "ipython", 1044 | "version": 3 1045 | }, 1046 | "file_extension": ".py", 1047 | "mimetype": "text/x-python", 1048 | "name": "python", 1049 | "nbconvert_exporter": "python", 1050 | "pygments_lexer": "ipython3", 1051 | "version": "3.6.0" 1052 | } 1053 | }, 1054 | "nbformat": 4, 1055 | "nbformat_minor": 2 1056 | } 1057 | -------------------------------------------------------------------------------- /python_hour_july_2019.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aycignl/python_hour/b016728e4dcf2dc3058344f6f355146ede57864e/python_hour_july_2019.pdf -------------------------------------------------------------------------------- /python_hour_life_coach_app_april_2019.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aycignl/python_hour/b016728e4dcf2dc3058344f6f355146ede57864e/python_hour_life_coach_app_april_2019.pdf --------------------------------------------------------------------------------