{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "Greek_NLP_example_clustering.ipynb",
"provenance": [],
"collapsed_sections": [],
"authorship_tag": "ABX9TyMYJTc/TkKEROYidEb3jDwY",
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
""
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "46rMrbsHGxu7",
"colab_type": "text"
},
"source": [
"# NLP clustering example using Wikipedia articles in greek"
]
},
{
"cell_type": "code",
"metadata": {
"id": "wBo6S8qHE76m",
"colab_type": "code",
"outputId": "30610464-bf46-463d-d802-c14bac0bdddd",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 344
}
},
"source": [
"# install wikipedia library for downoloading articles\n",
"!pip install wikipedia\n",
"# install wordcloud library for visualization of clusters\n",
"!pip install wordcloud"
],
"execution_count": 1,
"outputs": [
{
"output_type": "stream",
"text": [
"Collecting wikipedia\n",
" Downloading https://files.pythonhosted.org/packages/67/35/25e68fbc99e672127cc6fbb14b8ec1ba3dfef035bf1e4c90f78f24a80b7d/wikipedia-1.4.0.tar.gz\n",
"Requirement already satisfied: beautifulsoup4 in /usr/local/lib/python3.6/dist-packages (from wikipedia) (4.6.3)\n",
"Requirement already satisfied: requests<3.0.0,>=2.0.0 in /usr/local/lib/python3.6/dist-packages (from wikipedia) (2.21.0)\n",
"Requirement already satisfied: urllib3<1.25,>=1.21.1 in /usr/local/lib/python3.6/dist-packages (from requests<3.0.0,>=2.0.0->wikipedia) (1.24.3)\n",
"Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.6/dist-packages (from requests<3.0.0,>=2.0.0->wikipedia) (2019.11.28)\n",
"Requirement already satisfied: idna<2.9,>=2.5 in /usr/local/lib/python3.6/dist-packages (from requests<3.0.0,>=2.0.0->wikipedia) (2.8)\n",
"Requirement already satisfied: chardet<3.1.0,>=3.0.2 in /usr/local/lib/python3.6/dist-packages (from requests<3.0.0,>=2.0.0->wikipedia) (3.0.4)\n",
"Building wheels for collected packages: wikipedia\n",
" Building wheel for wikipedia (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
" Created wheel for wikipedia: filename=wikipedia-1.4.0-cp36-none-any.whl size=11686 sha256=2855b48322c307d887e5dc6291df02c42cebf101e44df78d91b558f862920687\n",
" Stored in directory: /root/.cache/pip/wheels/87/2a/18/4e471fd96d12114d16fe4a446d00c3b38fb9efcb744bd31f4a\n",
"Successfully built wikipedia\n",
"Installing collected packages: wikipedia\n",
"Successfully installed wikipedia-1.4.0\n",
"Requirement already satisfied: wordcloud in /usr/local/lib/python3.6/dist-packages (1.5.0)\n",
"Requirement already satisfied: pillow in /usr/local/lib/python3.6/dist-packages (from wordcloud) (6.2.2)\n",
"Requirement already satisfied: numpy>=1.6.1 in /usr/local/lib/python3.6/dist-packages (from wordcloud) (1.17.5)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "CzypeP2JH2n8",
"colab_type": "code",
"colab": {}
},
"source": [
"# import libraries\n",
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"from sklearn.feature_extraction.text import TfidfVectorizer\n",
"from sklearn.cluster import KMeans\n",
"import wikipedia\n",
"from wordcloud import WordCloud"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "vJYt1js2IG0t",
"colab_type": "text"
},
"source": [
"## Download content form wikipedia.\n",
"Fell free to change downloaded contents "
]
},
{
"cell_type": "code",
"metadata": {
"id": "cfdJNXB4H9-j",
"colab_type": "code",
"outputId": "d5f54d5b-8872-44fd-bd91-ebaa25b1254d",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 435
}
},
"source": [
"# set language to greek\n",
"wikipedia.set_lang(\"el\")\n",
"# list of articles to download\n",
"articles=['Αττική','Κόρινθος','Λάρισα','Θεσσαλονίκη','Θεσσαλία','Ρόδος','Σπάρτη',\n",
" 'Ελλάδα','Τουρκία','Γαλλία','Βρετανία','Γερμανία','Ισπανία','Κίνα',\n",
" 'Μπάσκετ','Ποδόσφαιρο','Τένις','Κολύμπι','Τρέξιμο',\n",
" 'Γεμιστά','Παστίτσιο','Φακές']\n",
"# content from articles will be stored in wiki_lst\n",
"wiki_lst=[]\n",
"title=[]\n",
"for article in articles:\n",
" print(\"loading content: \",article)\n",
" wiki_lst.append(wikipedia.page(article).content)\n",
" title.append(article)\n",
"print(\"loading complete\")"
],
"execution_count": 3,
"outputs": [
{
"output_type": "stream",
"text": [
"loading content: Αττική\n",
"loading content: Κόρινθος\n",
"loading content: Λάρισα\n",
"loading content: Θεσσαλονίκη\n",
"loading content: Θεσσαλία\n",
"loading content: Ρόδος\n",
"loading content: Σπάρτη\n",
"loading content: Ελλάδα\n",
"loading content: Τουρκία\n",
"loading content: Γαλλία\n",
"loading content: Βρετανία\n",
"loading content: Γερμανία\n",
"loading content: Ισπανία\n",
"loading content: Κίνα\n",
"loading content: Μπάσκετ\n",
"loading content: Ποδόσφαιρο\n",
"loading content: Τένις\n",
"loading content: Κολύμπι\n",
"loading content: Τρέξιμο\n",
"loading content: Γεμιστά\n",
"loading content: Παστίτσιο\n",
"loading content: Φακές\n",
"loading complete\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "sbZYjX3kIlRO",
"colab_type": "code",
"colab": {}
},
"source": [
"#gr_stop_wd is a list containing greek stopwords that will be omittied from our analysis\n",
"gr_stop_wd=[u'ο',u'η',u'το','τα','τη','την','τις','και','είναι','στο','στη',\n",
" 'στην','για','με','σε','του','τον','τους','των','οι','να','στα',\n",
" 'που','αν','της','έχει','έχουν','ότι','ως','από','κατά','ένα',\n",
" 'στις','μια','ήταν']"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "CjnjAa0aIytz",
"colab_type": "code",
"outputId": "cf740629-c30b-44f9-be2f-7f7e4aec7fff",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 35
}
},
"source": [
"#Execute term frequency - inverse document frequency (Tf-Idf) analysis on downloaded content\n",
"vectorizer = TfidfVectorizer(stop_words=gr_stop_wd)\n",
"X = vectorizer.fit_transform(wiki_lst)\n",
"#result is a scipy sparse matrix\n",
"print(X.shape)"
],
"execution_count": 5,
"outputs": [
{
"output_type": "stream",
"text": [
"(22, 19575)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "w9OIuq8rJ9NN",
"colab_type": "text"
},
"source": [
"## Next we perform cluster using k-means\n",
"The first step is to use the eldow metoh to decide on the number of clusters"
]
},
{
"cell_type": "code",
"metadata": {
"id": "2H2s7GXYJuwx",
"colab_type": "code",
"outputId": "251532c4-675b-4f73-8fd2-853c6b458635",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 295
}
},
"source": [
"Sum_of_squared_distances = []\n",
"K = range(2,10)\n",
"for k in K:\n",
" km = KMeans(n_clusters=k, max_iter=200, n_init=20)\n",
" km = km.fit(X)\n",
" Sum_of_squared_distances.append(km.inertia_)\n",
"\n",
"plt.plot(K, Sum_of_squared_distances, 'bx-')\n",
"plt.xlabel('k')\n",
"plt.ylabel('Sum_of_squared_distances')\n",
"plt.title('Elbow Method For Optimal k')\n",
"plt.show()"
],
"execution_count": 9,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\n0P8DKOlvdC8DTlMAAAAASUVORK5CYII=\n",
"text/plain": [
"