Repository where I mostly put random python scripts.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

348 lines
49 KiB

  1. {
  2. "cells": [
  3. {
  4. "cell_type": "code",
  5. "execution_count": 1,
  6. "metadata": {},
  7. "outputs": [],
  8. "source": [
  9. "from gensim.models import Word2Vec"
  10. ]
  11. },
  12. {
  13. "cell_type": "code",
  14. "execution_count": 7,
  15. "metadata": {},
  16. "outputs": [],
  17. "source": [
  18. "sentences = [[\"cat\", \"say\", \"meow\"], [\"dog\", \"say\", \"woof\"], [\"man\", \"say\", \"dam\"]]"
  19. ]
  20. },
  21. {
  22. "cell_type": "code",
  23. "execution_count": 17,
  24. "metadata": {},
  25. "outputs": [
  26. {
  27. "name": "stdout",
  28. "output_type": "stream",
  29. "text": [
  30. "5\n"
  31. ]
  32. }
  33. ],
  34. "source": [
  35. "model = Word2Vec(min_count=1, size=10)\n",
  36. "model.build_vocab(sentences)\n",
  37. "model.train(sentences, total_examples=model.corpus_count, epochs=model.epochs) \n",
  38. "model.save(\"basic-word2vec.model\")"
  39. ]
  40. },
  41. {
  42. "cell_type": "code",
  43. "execution_count": 13,
  44. "metadata": {},
  45. "outputs": [
  46. {
  47. "data": {
  48. "text/plain": [
  49. "[('woof', 0.3232297897338867),\n",
  50. " ('dam', 0.14384251832962036),\n",
  51. " ('man', 0.11316978931427002),\n",
  52. " ('cat', -0.06251632422208786),\n",
  53. " ('say', -0.1781214326620102),\n",
  54. " ('meow', -0.21009384095668793)]"
  55. ]
  56. },
  57. "execution_count": 13,
  58. "metadata": {},
  59. "output_type": "execute_result"
  60. }
  61. ],
  62. "source": [
  63. "model.wv.most_similar(\"dog\")"
  64. ]
  65. },
  66. {
  67. "cell_type": "code",
  68. "execution_count": 14,
  69. "metadata": {},
  70. "outputs": [
  71. {
  72. "name": "stdout",
  73. "output_type": "stream",
  74. "text": [
  75. "[ 0.04777663 0.01543251 -0.04632503 0.03601828 -0.00572644 0.00553683\n",
  76. " -0.04476452 -0.0274465 0.0047655 0.00508591]\n"
  77. ]
  78. }
  79. ],
  80. "source": [
  81. "print(model.wv.get_vector(\"dog\"))"
  82. ]
  83. },
  84. {
  85. "cell_type": "code",
  86. "execution_count": 22,
  87. "metadata": {},
  88. "outputs": [],
  89. "source": [
  90. "from sklearn.decomposition import IncrementalPCA # inital reduction\n",
  91. "from sklearn.manifold import TSNE # final reduction\n",
  92. "import numpy as np # array handling\n",
  93. "\n",
  94. "def reduce_dimensions(model):\n",
  95. " num_dimensions = 2 # final num dimensions (2D, 3D, etc)\n",
  96. "\n",
  97. " vectors = [] # positions in vector space\n",
  98. " labels = [] # keep track of words to label our data again later\n",
  99. " for word in model.wv.vocab:\n",
  100. " vectors.append(model.wv[word])\n",
  101. " labels.append(word)\n",
  102. "\n",
  103. " # convert both lists into numpy vectors for reduction\n",
  104. " vectors = np.asarray(vectors)\n",
  105. " labels = np.asarray(labels)\n",
  106. "\n",
  107. " # reduce using t-SNE\n",
  108. " vectors = np.asarray(vectors)\n",
  109. " tsne = TSNE(n_components=num_dimensions, random_state=0)\n",
  110. " vectors = tsne.fit_transform(vectors)\n",
  111. "\n",
  112. " x_vals = [v[0] for v in vectors]\n",
  113. " y_vals = [v[1] for v in vectors]\n",
  114. " return x_vals, y_vals, labels\n",
  115. "\n",
  116. "\n",
  117. "x_vals, y_vals, labels = reduce_dimensions(model)"
  118. ]
  119. },
  120. {
  121. "cell_type": "code",
  122. "execution_count": 26,
  123. "metadata": {},
  124. "outputs": [
  125. {
  126. "name": "stdout",
  127. "output_type": "stream",
  128. "text": [
  129. "['cat' 'say' 'meow' 'dog' 'woof' 'man' 'dam']\n",
  130. "[-29.594002, -45.996586, 20.368856, 53.92877, -12.437127, 3.9659712, 37.524284]\n",
  131. "[60.112713, 11.891685, 70.019325, 31.70431, -26.423267, 21.79772, -16.517805]\n"
  132. ]
  133. }
  134. ],
  135. "source": [
  136. "print(labels)\n",
  137. "print(x_vals)\n",
  138. "print(y_vals)"
  139. ]
  140. },
  141. {
  142. "cell_type": "code",
  143. "execution_count": 78,
  144. "metadata": {},
  145. "outputs": [
  146. {
  147. "data": {
  148. "image/png": "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
  149. "text/plain": [
  150. "<Figure size 360x360 with 1 Axes>"
  151. ]
  152. },
  153. "metadata": {
  154. "needs_background": "light"
  155. },
  156. "output_type": "display_data"
  157. }
  158. ],
  159. "source": [
  160. "import matplotlib.pyplot as plt\n",
  161. "import random\n",
  162. "\n",
  163. "def plot_with_matplotlib(x_vals, y_vals, labels, num_to_label):\n",
  164. " plt.figure(figsize=(5, 5))\n",
  165. " plt.scatter(x_vals, y_vals)\n",
  166. " plt.title(\"Embedding Space\")\n",
  167. " indices = list(range(len(labels)))\n",
  168. " selected_indices = random.sample(indices, num_to_label)\n",
  169. " for i in selected_indices:\n",
  170. " plt.annotate(labels[i], (x_vals[i], y_vals[i]))\n",
  171. " \n",
  172. "plot_with_matplotlib(x_vals, y_vals, labels, 5)"
  173. ]
  174. },
  175. {
  176. "cell_type": "code",
  177. "execution_count": 43,
  178. "metadata": {},
  179. "outputs": [
  180. {
  181. "name": "stdout",
  182. "output_type": "stream",
  183. "text": [
  184. " Inspired by [Justin and [Dan I decided to make a 2018 review post. I believe that it would be a good way to reflect upon what I did in 2018 and make plans for 2019. This post will be a very high level overview of the projects and activities that I did in 2018 -- nothing personal. Pictures say a thousand words, so, I will include a lot. # January: **Eagle Ceremony** ![Eagle Ceremony **Started Second Semester of College** Classes: - Mechanics of Programming - Statistics - Discrete Math - Communications - Moral Issues **Brick hack 4** ![Sleep Deprived me at BrickHack # February: **RIT Career Fair** ![Overview Picture of the Career **Build my Blog in Node.js** ![What original website looked # March: **Upgrading Floppy Drive Project** ![Floppy drive project under **Designed Website for Hoffends** ![Hoffends # April: **Imagine RIT** ![RITlug imagine rit ![RITlug imagine rit # May: **End of Second Semester** ![RIT Tiger during the **Started SSA Research Job** ![Erie # June: **Steam Graph Project** <youtube src=\"DoDaHmyIPvQ\" /> ![Steam graph project example showing 3 friend # July **Summer!** <youtube src=\"t7s2alt0sQ8\" /> ![Taughannock ![Erie **Updated UI for the Blog** ![New theme of # August: **Presented at RIT's Undergraduate Research Symposium** ![Poster at the undergraduate research **Second Year of College** First year on the Eboard of RITlug as Vice President. Classes: - Linear Algebra - Analysis Of Algorithms - CS Theory - SWEN - Public Policy # September: **End of Summer :(** ![Biking # October: **Hacktoberfest** ![Github hacktoberfest # November: **Foss [Election Night ![FOSS Election Night **Rochester Maker Fair** ![RITlug booth at the maker # December: **End of Fall Semester** ![Biking\n",
  185. "['inspired', 'by', 'justin', 'and', 'dan', 'decided', 'to', 'make', 'review', 'post', 'believe', 'that', 'it', 'would', 'be', 'good', 'way', 'to', 'reflect', 'upon', 'what', 'did', 'in', 'and', 'make', 'plans', 'for', 'this', 'post', 'will', 'be', 'very', 'high', 'level', 'overview', 'of', 'the', 'projects', 'and', 'activities', 'that', 'did', 'in', 'nothing', 'personal', 'pictures', 'say', 'thousand', 'words', 'so', 'will', 'include', 'lot', 'january', 'eagle', 'ceremony', 'eagle', 'ceremony', 'started', 'second', 'semester', 'of', 'college', 'classes', 'mechanics', 'of', 'programming', 'statistics', 'discrete', 'math', 'communications', 'moral', 'issues', 'brick', 'hack', 'sleep', 'deprived', 'me', 'at', 'brickhack', 'february', 'rit', 'career', 'fair', 'overview', 'picture', 'of', 'the', 'career', 'build', 'my', 'blog', 'in', 'node', 'js', 'what', 'original', 'website', 'looked', 'march', 'upgrading', 'floppy', 'drive', 'project', 'floppy', 'drive', 'project', 'under', 'designed', 'website', 'for', 'hoffends', 'hoffends', 'april', 'imagine', 'rit', 'ritlug', 'imagine', 'rit', 'ritlug', 'imagine', 'rit', 'may', 'end', 'of', 'second', 'semester', 'rit', 'tiger', 'during', 'the', 'started', 'ssa', 'research', 'job', 'erie', 'june', 'steam', 'graph', 'project', 'youtube', 'src', 'dodahmyipvq', 'steam', 'graph', 'project', 'example', 'showing', 'friend', 'july', 'summer', 'youtube', 'src', 'alt', 'sq', 'taughannock', 'erie', 'updated', 'ui', 'for', 'the', 'blog', 'new', 'theme', 'of', 'august', 'presented', 'at', 'rit', 'undergraduate', 'research', 'symposium', 'poster', 'at', 'the', 'undergraduate', 'research', 'second', 'year', 'of', 'college', 'first', 'year', 'on', 'the', 'eboard', 'of', 'ritlug', 'as', 'vice', 'president', 'classes', 'linear', 'algebra', 'analysis', 'of', 'algorithms', 'cs', 'theory', 'swen', 'public', 'policy', 'september', 'end', 'of', 'summer', 'biking', 'october', 'hacktoberfest', 'github', 'hacktoberfest', 'november', 'foss', 'election', 'night', 'foss', 'election', 'night', 'rochester', 'maker', 'fair', 'ritlug', 'booth', 'at', 'the', 'maker', 'december', 'end', 'of', 'fall', 'semester', 'biking']\n"
  186. ]
  187. }
  188. ],
  189. "source": [
  190. "def process_file(fileName):\n",
  191. " result = \"\"\n",
  192. " tempResult = \"\"\n",
  193. " inCodeBlock = False\n",
  194. "\n",
  195. " with open(fileName) as file:\n",
  196. " for line in file:\n",
  197. " if line.startswith(\"```\"):\n",
  198. " inCodeBlock = not inCodeBlock\n",
  199. " elif inCodeBlock:\n",
  200. " pass\n",
  201. " else:\n",
  202. " for word in line.split():\n",
  203. " if \"http\" not in word and \"media/\"not in word:\n",
  204. " result = result + \" \" + word\n",
  205. " return result\n",
  206. "\n",
  207. "\n",
  208. "print(process_file(\"data/2018-in-review.md\"))\n",
  209. "\n",
  210. "from gensim import utils\n",
  211. "print(utils.simple_preprocess(process_file(\"data/2018-in-review.md\")))\n"
  212. ]
  213. },
  214. {
  215. "cell_type": "code",
  216. "execution_count": 49,
  217. "metadata": {},
  218. "outputs": [],
  219. "source": [
  220. "import os\n",
  221. "file = open(\"jrtechs.cor\", \"w+\")\n",
  222. "for file_name in os.listdir(\"data\"):\n",
  223. " file.write(process_file(\"data/\" + file_name) + \"\\n\")\n",
  224. "file.close()"
  225. ]
  226. },
  227. {
  228. "cell_type": "code",
  229. "execution_count": 51,
  230. "metadata": {},
  231. "outputs": [],
  232. "source": [
  233. "from gensim.test.utils import datapath\n",
  234. "from gensim import utils\n",
  235. "\n",
  236. "class MyCorpus(object):\n",
  237. " \"\"\"An interator that yields sentences (lists of str).\"\"\"\n",
  238. "\n",
  239. " def __iter__(self):\n",
  240. " corpus_path = \"jrtechs.cor\"\n",
  241. " for line in open(corpus_path):\n",
  242. " # assume there's one document per line, tokens separated by whitespace\n",
  243. " yield utils.simple_preprocess(line)"
  244. ]
  245. },
  246. {
  247. "cell_type": "code",
  248. "execution_count": 52,
  249. "metadata": {},
  250. "outputs": [],
  251. "source": [
  252. "sentences = MyCorpus()"
  253. ]
  254. },
  255. {
  256. "cell_type": "code",
  257. "execution_count": 53,
  258. "metadata": {},
  259. "outputs": [],
  260. "source": [
  261. "model = Word2Vec(min_count=1, size=10, sentences=sentences)\n",
  262. "model.train(sentences, total_examples=model.corpus_count, epochs=model.epochs) \n",
  263. "model.save(\"jrtechs-word2vec.model\")"
  264. ]
  265. },
  266. {
  267. "cell_type": "code",
  268. "execution_count": 59,
  269. "metadata": {},
  270. "outputs": [
  271. {
  272. "data": {
  273. "text/plain": [
  274. "[('constrained', 0.9626229405403137),\n",
  275. " ('logics', 0.9502561092376709),\n",
  276. " ('slide', 0.9486078023910522),\n",
  277. " ('clip', 0.9481177926063538),\n",
  278. " ('syntactically', 0.9479268789291382),\n",
  279. " ('solace', 0.9447624683380127),\n",
  280. " ('containing', 0.9312535524368286),\n",
  281. " ('claims', 0.928554892539978),\n",
  282. " ('exponential', 0.9284722805023193),\n",
  283. " ('scarce', 0.9266577363014221)]"
  284. ]
  285. },
  286. "execution_count": 59,
  287. "metadata": {},
  288. "output_type": "execute_result"
  289. }
  290. ],
  291. "source": [
  292. "model.wv.most_similar(\"story\")"
  293. ]
  294. },
  295. {
  296. "cell_type": "code",
  297. "execution_count": 58,
  298. "metadata": {},
  299. "outputs": [],
  300. "source": [
  301. "x_vals, y_vals, labels = reduce_dimensions(model)\n"
  302. ]
  303. },
  304. {
  305. "cell_type": "code",
  306. "execution_count": 63,
  307. "metadata": {},
  308. "outputs": [
  309. {
  310. "data": {
  311. "image/png": "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
  312. "text/plain": [
  313. "<Figure size 216x216 with 1 Axes>"
  314. ]
  315. },
  316. "metadata": {
  317. "needs_background": "light"
  318. },
  319. "output_type": "display_data"
  320. }
  321. ],
  322. "source": [
  323. "plot_with_matplotlib(x_vals, y_vals, labels, 10)"
  324. ]
  325. }
  326. ],
  327. "metadata": {
  328. "kernelspec": {
  329. "display_name": "Python 3",
  330. "language": "python",
  331. "name": "python3"
  332. },
  333. "language_info": {
  334. "codemirror_mode": {
  335. "name": "ipython",
  336. "version": 3
  337. },
  338. "file_extension": ".py",
  339. "mimetype": "text/x-python",
  340. "name": "python",
  341. "nbconvert_exporter": "python",
  342. "pygments_lexer": "ipython3",
  343. "version": "3.7.6"
  344. }
  345. },
  346. "nbformat": 4,
  347. "nbformat_minor": 4
  348. }