{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import bs4\n", "from IPython.display import HTML\n", "\n", "from gensim import summarization\n", "from pyMorfologik import Morfologik\n", "from pyMorfologik.parsing import ListParser\n", "\n", "import editdistance\n", "import flashtext" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "note_html = \"\"\"\\ufeff

Cluster

\\n\\n

Networking

\\n\\n

Service

\\n\\n

Ingress

\\n\\n

StatefulSet\\nStatefulSet jest jakby Deploymentem który zachowuje stan (w każdym podzie)\\nPody są domyślnie odpalane sekwencyjnie (0, 1 itd) ale mogą być odpalane równolegle

\\n

Volumes

\\n\\n\"\"\"" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/kuba/anaconda3/lib/python3.6/site-packages/bs4/__init__.py:181: UserWarning: No parser was explicitly specified, so I'm using the best available HTML parser for this system (\"lxml\"). This usually isn't a problem, but if you run this code on another system, or in a different virtual environment, it may use a different parser and behave differently.\n", "\n", "The code that caused this warning is on line 193 of the file /home/kuba/anaconda3/lib/python3.6/runpy.py. To get rid of this warning, change code that looks like this:\n", "\n", " BeautifulSoup(YOUR_MARKUP})\n", "\n", "to this:\n", "\n", " BeautifulSoup(YOUR_MARKUP, \"lxml\")\n", "\n", " markup_type=markup_type))\n" ] } ], "source": [ "note_soup = bs4.BeautifulSoup(note_html)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "def get_edit_close_words(w, checked_words, max_dist):\n", " return [word for word in checked_words if editdistance.eval(w, word) <= max_dist]\n", "\n", "def replace_edit_close_words(text, keywords, max_dist):\n", " words = text.split()\n", " replaced_words = set().union(*(get_edit_close_words(w, words, max_dist=2) for w in keywords))\n", " keyword_processor = flashtext.KeywordProcessor()\n", " for word in replaced_words:\n", " keyword_processor.add_keyword(word, '****')\n", " return keyword_processor.replace_keywords(text)\n", "\n", "\n", "def replace_keywords_in_paragraph(html_paragraph, max_dist):\n", " text = html_paragraph.text\n", " keywords = summarization.keywords(text, 0.1, split=True) \n", " return replace_edit_close_words(text, keywords, max_dist)\n", "\n", "\n", "def replace_keywords(html_text, max_dist=2):\n", " paragraphs = html_text.findAll('ul')\n", " replaced_paragraphs = [replace_keywords_in_paragraph(paragraph, max_dist) for paragraph in paragraphs]\n", " return '\\n'.join(replaced_paragraphs)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", "nodes\n", "\n", "\n", "****\n", "\n", "**** is a group of containers with shared storage and networking (IP address)e\n", "**** są najmniejszymi jednostkami na których stawiane są ****\n", "ilość **** kontroluje parametr replica\n", "\n", "\n", "\n", "deployments\n", "\n", "deploymenty są obiektami które kontrolują stan opisany w konfiguracji, np odpal 3 ****/**** serwera Apache. Odpowiadają one za skalowanie (odpalanie odpowiedniej ilości **** **** i utrzymywanie jej, np zwiększanie gdy zużycie CPU przekracza na jednym **** próg)\n", "\n", "\n", "\n", "ingress\n", "\n", "\n", "\n", "pod is a group of containers with shared storage and networking (IP address)e\n", "pody są najmniejszymi jednostkami na których stawiane są kontenery\n", "ilość podów kontroluje **** replica\n", "\n", "\n", "deploymenty są obiektami **** kontrolują stan opisany w konfiguracji, np odpal 3 kontenery/pody serwera Apache. Odpowiadają one za skalowanie (odpalanie odpowiedniej ilości kontenerów podów i utrzymywanie jej, np zwiększanie gdy zużycie CPU przekracza na jednym **** próg)\n", "\n", "\n", "pod **** jeden adres IP (adresy są ephemeral)\n", "pody na jednym node są w jednym networking namespace (widzą swoje prywatne IP?)\n", "Node **** adresy IP z adres range z VPC\n", "\n", "\n", "services give **** IP address and ****\n", "mają statyczne wirtualne adresy IP\n", "są 3 typy: Cluster IP, **** **** load balancer (każdy następny rozbudowany **** poprzednim)\n", "\n", "Cluser IP przypisuje stałe IP wewnątrz **** (do komunikacji podów)\n", "**** **** służy do komunikacji na zewnątrz ****\n", "Load balancer jest **** **** który dodatkowo pomaga rozkładać ruch\n", "\n", "\n", "serwisy są przypisane do applikacji\n", "\n", "\n", "Cluser IP przypisuje stałe IP wewnątrz klastra (do komunikacji podów)\n", "**** port służy do komunikacji na zewnątrz klastra\n", "Load balancer jest **** portem który dodatkowo pomaga rozkładać ruch\n", "\n", "\n", "'a **** for ****\n", "ingress resource exposes **** (pole backend)\n", "może łączyć się z NodePortami lub Load Balancerami\n", "\n", "\n", "**** state/data between pods\n", "****\n", "\n", "per pod\n", "emptyDir - ****\n", "ConfigMap, Secret, downwardAPI\n", "\n", "\n", "PersistentDisk\n", "\n", "per klaster\n", "są tworzone odrębnie od wykorzystania (provision vs claim) - muszą być stworzone przed używaniem\n", "\n", "\n", "\n", "\n", "per pod\n", "emptyDir - ephemeral\n", "ConfigMap, Secret, downwardAPI\n", "\n", "\n", "per klaster\n", "są tworzone odrębnie od wykorzystania (provision vs claim) - muszą być stworzone **** używaniem\n", "\n" ] } ], "source": [ "print(replace_keywords(note_soup))" ] } ], "metadata": { "kernelspec": { "display_name": "text_mining", "language": "python", "name": "text_mining" }, "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.4" } }, "nbformat": 4, "nbformat_minor": 2 }