{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\nimport re\nimport nltk\nfrom nltk.corpus import stopwords\nfrom nltk.stem import WordNetLemmatizer\nfrom gensim.models import Word2Vec\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_kg_hide-input":true,"execution":{"iopub.status.busy":"2022-08-11T16:38:11.268496Z","iopub.execute_input":"2022-08-11T16:38:11.268943Z","iopub.status.idle":"2022-08-11T16:38:14.122380Z","shell.execute_reply.started":"2022-08-11T16:38:11.268899Z","shell.execute_reply":"2022-08-11T16:38:14.121391Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import re\nimport nltk\nfrom nltk.corpus import stopwords\nfrom nltk.stem import WordNetLemmatizer\nfrom gensim.models import Word2Vec\n!pip install gensim","metadata":{"execution":{"iopub.status.busy":"2022-08-11T16:38:14.124123Z","iopub.execute_input":"2022-08-11T16:38:14.124672Z","iopub.status.idle":"2022-08-11T16:38:27.055501Z","shell.execute_reply.started":"2022-08-11T16:38:14.124637Z","shell.execute_reply":"2022-08-11T16:38:27.053689Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import gensim","metadata":{"execution":{"iopub.status.busy":"2022-08-11T16:38:27.057967Z","iopub.execute_input":"2022-08-11T16:38:27.058507Z","iopub.status.idle":"2022-08-11T16:38:27.065915Z","shell.execute_reply.started":"2022-08-11T16:38:27.058454Z","shell.execute_reply":"2022-08-11T16:38:27.064781Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!pip install python-Levenshtein\nnltk.download('omw-1.4')","metadata":{"execution":{"iopub.status.busy":"2022-08-11T16:38:27.068978Z","iopub.execute_input":"2022-08-11T16:38:27.069379Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df = pd.read_csv('../input/feedback-prize-effectiveness/train.csv')\ntrain_df","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_lead = train_df[train_df['discourse_type'] == \"Lead\"]\ndf_lead = df_lead[['discourse_text','discourse_effectiveness']]","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_lead = df_lead.reset_index()\ndf_lead","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#Preprocessing the data\nps = WordNetLemmatizer()\ncorpus = []\nfor i in range(0,len(df_lead)):\n    review = re.sub('[^a-zA-Z]',' ', df_lead['discourse_text'][i])\n    review = review.lower()\n    review = review.split()\n    review = [ps.lemmatize(word) for word in review if word not in set(stopwords.words('english'))]\n    review = ' '.join(review)\n    corpus.append(review)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## VECTORIZATION OF OUR CORPUS ( CREATING BAG OF WORDS FOR LEADS ONLY)","metadata":{}},{"cell_type":"code","source":"review_lead = df_lead.discourse_text.apply(gensim.utils.simple_preprocess)\nreview_lead","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = gensim.models.Word2Vec(\n    window = 10,\n    min_count = 2,\n    workers = 4\n)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":" model.build_vocab(review_lead, progress_per = 1000)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.epochs","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.train(review_lead, total_examples = model.corpus_count, epochs = model.epochs)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Converting target data into numbers","metadata":{}},{"cell_type":"code","source":"from sklearn.preprocessing import OneHotEncoder\nenc = OneHotEncoder(handle_unknown='ignore')\nX = [['Adequate', 1], ['Effective', 3], ['Ineffective', 2]]\nenc.fit(X)\ndf_lead.info()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.preprocessing import LabelEncoder\nenc = LabelEncoder()\nenc.fit_transform(df_lead['discourse_effectiveness'])\ndf_lead.discourse_effectiveness = enc.fit_transform(df_lead['discourse_effectiveness'])","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_lead","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.model_selection import train_test_split\nX_train, X_test, y_train, y_test = train_test_split (review_lead, df_lead['discourse_effectiveness'] , test_size=0.2)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"w2v_model = gensim.models.Word2Vec(X_train,\n                                   vector_size=100,\n                                   window=5,\n                                   min_count=2)\n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"w2v_model.wv.index_to_key\n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"w2v_model.wv.most_similar('law')","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"words = set(w2v_model.wv.index_to_key )\nX_train_vect = np.array([np.array([w2v_model.wv[i] for i in ls if i in words])\n                         for ls in X_train])\nX_test_vect = np.array([np.array([w2v_model.wv[i] for i in ls if i in words])\n                         for ls in X_test])\n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for i, v in enumerate(X_train_vect):\n    print(len(X_train.iloc[i]), len(v))\n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train_vect_avg = []\nfor v in X_train_vect:\n    if v.size:\n        X_train_vect_avg.append(v.mean(axis=0))\n    else:\n        X_train_vect_avg.append(np.zeros(100, dtype=float))\n        \nX_test_vect_avg = []\nfor v in X_test_vect:\n    if v.size:\n        X_test_vect_avg.append(v.mean(axis=0))\n    else:\n        X_test_vect_avg.append(np.zeros(100, dtype=float))\n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.ensemble import RandomForestClassifier\nrf = RandomForestClassifier()\nrf_model = rf.fit(X_train_vect_avg, y_train.values.ravel())","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_pred = rf_model.predict(X_test_vect_avg)\ny_pred\ny_test = y_test.to_list()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.metrics import precision_score, recall_score\n\nprecision = precision_score(y_test, y_pred, pos_label='positive',average='micro')\nrecall = recall_score(y_test, y_pred, pos_label='positive',average='micro')\nprint('Precision: {} / Recall: {} / Accuracy: {}'.format(\n    round(precision, 3), round(recall, 3), round((y_pred==y_test).sum()/len(y_pred), 3)))\n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}