{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# !wget https://raw.githubusercontent.com/attardi/wikiextractor/master/WikiExtractor.py\n",
    "# !wget http://dumps.wikimedia.org/mswiki/latest/mswiki-latest-pages-articles.xml.bz2\n",
    "# !bzip2 -d mswiki-latest-pages-articles.xml.bz2\n",
    "# !python3 WikiExtractor.py --json mswiki-latest-pages-articles.xml"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "256"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from glob import glob\n",
    "\n",
    "files = glob('text/*/*')\n",
    "len(files)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "import json\n",
    "\n",
    "with open(files[0]) as fopen:\n",
    "    x = fopen.readlines()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "import re\n",
    "from unidecode import unidecode\n",
    "\n",
    "alphabets = '([A-Za-z])'\n",
    "prefixes = (\n",
    "    '(Mr|St|Mrs|Ms|Dr|Prof|Capt|Cpt|Lt|Mt|Puan|puan|Tuan|tuan|sir|Sir)[.]'\n",
    ")\n",
    "suffixes = '(Inc|Ltd|Jr|Sr|Co)'\n",
    "starters = '(Mr|Mrs|Ms|Dr|He\\s|She\\s|It\\s|They\\s|Their\\s|Our\\s|We\\s|But\\s|However\\s|That\\s|This\\s|Wherever|Dia|Mereka|Tetapi|Kita|Itu|Ini|Dan|Kami)'\n",
    "acronyms = '([A-Z][.][A-Z][.](?:[A-Z][.])?)'\n",
    "websites = '[.](com|net|org|io|gov|me|edu|my)'\n",
    "another_websites = '(www|http|https)[.]'\n",
    "digits = '([0-9])'\n",
    "\n",
    "def cleaning(string):\n",
    "    string = unidecode(string)\n",
    "    string = re.sub(r'\\w+:\\/{2}[\\d\\w-]+(\\.[\\d\\w-]+)*(?:(?:\\/[^\\s/]*))*', '', string)\n",
    "    string = re.sub(r'[ ]+', ' ', string).strip().split()\n",
    "    string = [w for w in string if w[0] != '@']\n",
    "    return ' '.join(string)\n",
    "\n",
    "def split_into_sentences(text):\n",
    "    text = unidecode(text)\n",
    "    text = ' ' + text + '  '\n",
    "    text = text.replace('\\n', ' ')\n",
    "    text = re.sub(prefixes, '\\\\1<prd>', text)\n",
    "    text = re.sub(websites, '<prd>\\\\1', text)\n",
    "    text = re.sub(another_websites, '\\\\1<prd>', text)\n",
    "    if '...' in text:\n",
    "        text = text.replace('...', '<prd><prd><prd>')\n",
    "    if 'Ph.D' in text:\n",
    "        text = text.replace('Ph.D.', 'Ph<prd>D<prd>')\n",
    "    text = re.sub('\\s' + alphabets + '[.] ', ' \\\\1<prd> ', text)\n",
    "    text = re.sub(acronyms + ' ' + starters, '\\\\1<stop> \\\\2', text)\n",
    "    text = re.sub(\n",
    "        alphabets + '[.]' + alphabets + '[.]' + alphabets + '[.]',\n",
    "        '\\\\1<prd>\\\\2<prd>\\\\3<prd>',\n",
    "        text,\n",
    "    )\n",
    "    text = re.sub(\n",
    "        alphabets + '[.]' + alphabets + '[.]', '\\\\1<prd>\\\\2<prd>', text\n",
    "    )\n",
    "    text = re.sub(' ' + suffixes + '[.] ' + starters, ' \\\\1<stop> \\\\2', text)\n",
    "    text = re.sub(' ' + suffixes + '[.]', ' \\\\1<prd>', text)\n",
    "    text = re.sub(' ' + alphabets + '[.]', ' \\\\1<prd>', text)\n",
    "    text = re.sub(digits + '[.]' + digits, '\\\\1<prd>\\\\2', text)\n",
    "    if '”' in text:\n",
    "        text = text.replace('.”', '”.')\n",
    "    if '\"' in text:\n",
    "        text = text.replace('.\"', '\".')\n",
    "    if '!' in text:\n",
    "        text = text.replace('!\"', '\"!')\n",
    "    if '?' in text:\n",
    "        text = text.replace('?\"', '\"?')\n",
    "    text = text.replace('.', '.<stop>')\n",
    "    text = text.replace('?', '?<stop>')\n",
    "    text = text.replace('!', '!<stop>')\n",
    "    text = text.replace('<prd>', '.')\n",
    "    sentences = text.split('<stop>')\n",
    "    sentences = sentences[:-1]\n",
    "    sentences = [cleaning(s.strip()) for s in sentences if len(s) > 10]\n",
    "    return sentences"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 256/256 [01:55<00:00,  2.22it/s]\n"
     ]
    }
   ],
   "source": [
    "from tqdm import tqdm\n",
    "\n",
    "texts = []\n",
    "\n",
    "for i in tqdm(range(len(files))):\n",
    "    with open(files[i]) as fopen:\n",
    "        s = fopen.readlines()\n",
    "    \n",
    "    for i in s:\n",
    "        i = json.loads(i)\n",
    "        texts.extend(split_into_sentences(i['text'].replace('<br>', ' ')))\n",
    "        texts.append('')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "with open('dumping-wiki.txt', 'w') as fopen:\n",
    "    fopen.write('\\n'.join(texts))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Alexandre Pato Alexandre Rodrigues da Silva (lahir 2 September, 1989, di Pato Branco, Parana), lebih dikenali sebagai Alexandre Pato, merupakan pemain bola sepak Brazil yang bermain sebagai penyerang untuk kelab Sepanyol, Villarreal.\r\n",
      "Alexandre mula bermain futsal di usia 4 tahun.\r\n",
      "Kebolehannya kemudian diketahui di seluruh kawasan selatan Brazilian iaitu di Parana.\r\n",
      "Setelah menerima pujian oleh ramai jurulatihnya, remaja tersebut telah pergi ke Porto Alegre, Rio Grande do Sul, untuk mencuba nasib bersama Internacional.\r\n",
      "Pada 2001, dalam usia 11 tahun, beliau berpindah ke sana dan mula berkongsi rumah dengan 83 orang remaja lain, yang juga sepertinya, ingin mencipta nama dalam skuad utama Internacional.\r\n",
      "Pada 2000, sewaktu Alexandre berusia 10 tahun, x-ray dari tulang yang patah telah mendedahkan bahawa beliau mempunyai ketumbuhan pada lengannya.\r\n",
      "Para doktor menyedari bahawa ketumbuhan itu boleh menyebabkan kanser dalam dua bulan sekiranya tidak dibuang.\r\n",
      "Keluarga Alexandre tidak mampu menampung kos untuk pembedahan untuk membuang ketumbuhan itu, tetapi doktor tersebut, Paulo Roberto Mussi, merupakan kenalan rapat keluarga beliau, dan telah menjalankan pembedahan tanpa bayaran.\r\n",
      "Peristiwa ini penting kerana ia terjadi pada tahun Alexandre sedang berusaha menggerakkan karier profesionalnya bersama Internacional.\r\n",
      "Beliau mengambil nama gelaran \"Alexandre Pato\" (\"Alex sang Itik\"), sempena nama tempat kelahirannya.\r\n",
      "Pato memulakan kariernya bersama Internacional di Porto Alegre, di mana beliau bermain untuk kedua-dua pasukan belia dan senior sekitar 2001 dan 2007.\r\n",
      "Dalam penampilan sulungnya bersama skuad senior, di usia 17 tahun, Pato membantu Internacional untuk menang 4-1 ke atas Palmeiras pada 26 November, 2006.\r\n",
      "Beliau membantu mencipta tiga daripada gol tersebut dan menjaringkan satu lagi.\r\n",
      "Pato menjaringkan gol kedua Internacional dalam separuh akhir Piala Dunia Kelab FIFA 2006 pada 13 December menentang Al-Ahly Cairo, dan membantu pasukan untuk menang 2-1 dan mara ke final.\r\n",
      "Dengan gol ini, Pato telah mengatasi rekod Pele sebagai penjaring termuda dalam kejohanan rasmi FIFA (17 tahun dan 102 hari, berbanding rekod Pele 17 tahun dan 239 hari pada Piala Dunia FIFA 1958 FIFA menentang Wales).\r\n",
      "Beliau telah digantikan dalam perlawanan akhir kejohanan tersebut, sebelum rakan sepasukan Adriano Gabiru menjaringkan gol kemenangan, yang membolehkan Internacional menjadi juara.\r\n",
      "Pato kemudiannya dikaitkan dengan beberapa kelab ternama termasuklah Benfica, Juventus, Inter, Chelsea dan Arsenal.\r\n",
      "Juara Eropah A.C. Milan dengan rasminya telah mengesahkan pengambilan Pato pada 2 Ogos, 2007.\r\n",
      "Beliau telah menyatakan sebelum itu bahawa Ronaldo dan Kaka adalah idolanya.\r\n",
      "Bayaran perpindahan telah menepati klausa bayaran minimum dalam kontrak Pato dengan SC Internacional iaitu EUR22 juta.\r\n",
      "Disebabkan peraturan bola sepak Itali mengenai pemain bawah umur bukan EU, Pato tidak dapat diturunkan dalam permainan rasmi bersama Milan sehinggalah 3 Januari, 2008, apabila tingkap perpindahan Itali dan pendaftaran dibuka semula.\r\n",
      "Walaubagaimanapun, AC Milan dibenarkan untuk menurunkan pemain tersebut dalam perlawanan persahabatan dan latihan bermula 3 September, 2007, sehari selepas ulang tahunnya yang ke-18.\r\n",
      "Pato membuat kemunculan sulungya dalam perlawanan persahabatan yang berakhir seri 2-2 menentang Dynamo Kiev pada 7 September, 2007 dan telah menjaringkan satu gol menerusi tandukan.\r\n",
      "Pada 4 Januari, 2008, perpindahan Pato ke Milan menjadi rasmi.\r\n",
      "Pato menjaringkan gol pertamanya untuk Milan dalam kemunculan sulungnya di Serie A menentang S.S.C. Napoli dalam kemenangan 5-2 di tempat sendiri pada 13 Januari, 2008.\r\n",
      "Beliau juga menjaringkan dua gol untuk Milan dalam kemenangan 2-0 ke atas Genoa C.F.C. di San Siro pada 27 January, 2008.\r\n",
      "Beliau membantu Brazil memenangi Kejohanan Belia Amerika Selatan 2007, yang melayakkan negara tersebut ke Piala Dunia Bawah-20 FIFA 2007, dan telah dipilih oleh Dunga untuk Sukan Olimpik 2008.\r\n",
      "Beliau menjaringkan gol pertamanya untuk pasukan senior dalam kemunculan sulungya sewaktu menentang Sweden di Stadium Emirates pada 26 Mac, 2008.\r\n",
      "\r\n",
      "Heksana Heksana adalah sebatian hidrokarbon dari kumpulan alkana.\r\n",
      "Formula sebatian bagi heksana ialah CH.\r\n",
      "Heksana mengandungi enam atom karbon maka dinamakan heksana di mana imbuhan 'heks' bermaksud enam.\r\n",
      "\r\n",
      "Marek Jankulovski Marek Jankulovski (lahir 9 Mei, 1977 di Ostrava, Republik Czech) merupakan pemain bola sepak Republik Czech yang bermain di posisi bek kiri.\r\n",
      "Beliau ketika ini bermain untuk A.C. Milan di Serie A Itali dan merupakan Pemain Terbaik Czech untuk musim 2007/08.\r\n",
      "Ayah beliau Pando Jankulovski berbangsa Macedonia yang berhijrah ke Czechoslovakia dari Macedonia.\r\n",
      "Ibu beliau pula merupakan bangsa Czech.\r\n",
      "Sebelum menyertai Milan, beliau bermain untuk Banik Ostrava (1994-2000), Napoli (2000-02), dan Udinese (2002-05).\r\n",
      "Untuk pasukan kebangsaan Czech, beliau bermain di Euro 2000, Euro 2004, Euro 2008, dan Piala Dunia 2006.\r\n",
      "Jankulovski menyertai AC Milan dari Udinese pada permulaan musim 2005-06 setelah musim yang cemerlang bersama Udinese.\r\n",
      "Jankulovski kurang menyerlah pada musim pertamanya tetapi menjadi antara pemain terbaik Milan sewaktu musim 2006-07, dengan menjaringkan tiga gol, termasuk satu gol cantik dari jarak 25 meter, yang dijaringkan sewaktu menentang Livorno.\r\n",
      "Pada 23 Mei 2007, beliau mengambil bahagian dalam kemenangan 2-1 di final Liga Juara-Juara UEFA menentang Liverpool FC.\r\n",
      "Beliau juga menjaringkan gol kedua dalam kemenangan Milan ke atas FC Sevilla dalam Piala Super UEFA 2007 yang diadakan pada 31 Ogos, 2007 dengan volley yang cantik setelah menerima hantaran dari Andrea Pirlo.\r\n",
      "Pada 28 Mei, 2008, Jankulovski dinamakan sebagai \"Pemain Terbaik Czech\", dengan Petr Cech di tempat kedua.\r\n",
      "\r\n",
      "Daniele Bonera Daniele Bonera (lahir 31 Mei, 1981 di Brescia) merupakan pemain bola sepak Itali dan bermain untuk A.C. Milan di Serie A di mana beliau bermain sebagai pemain pertahanan dan memakai jersi bernombor 25.\r\n",
      "Bonera memulakan kariernya bersama Brescia Calcio, dan membuat kemunculan sulung pada musim 1999/2000, di Serie B. Setelah dua lagi musim hebat bersama Brescia, yang membolehkannya mewakili pasukan bola sepak kebangsaan Itali, di mana beliau membuat kemunculan sulungnya dalam perlawanan persahabatan pada 5 September, 2001 menentang Maghribi, Bonera berpindah ke Parma pada musim 2002/03.\r\n",
      "Pada 28 Julai, 2006 Daniele berpindah ke A.C. Milan dengan bayaran perpindahan bernilai kira-kira $2.5 juta.\r\n",
      "Kemunculan sulungnya dalam Liga Juara-Juara UEFA adalah menentang Anderlecht, pada 17 Oktober 2006, di mana beliau menerima kad merah selepas mendapat kad kuning keduanya di minit ke-47 setelah menyepak bola sewaktu pemain Anderlecht menunggu untuk mengambil sepakan percuma.\r\n",
      "Selepas kurang menyerlah sebagai bek kanan, Bonera ditukarkan ke bahagian bek tengah setelah beberapa pemain pertahanan mengalami kecederaan dan pengambilan Massimo Oddo dari S.S. Lazio pada Januari, yang merupakan pemain bek kanan yang sebenar.\r\n",
      "Beliau dipanggil oleh Roberto Donadoni untuk Kelayakan Euro 2008 Itali menentang Scotland, perlawanan yang dijadualkan pada 28 Mac 2007, tetapi beliau terpaksa menarik diri kerana mengalami kecederaan.\r\n",
      "Beliau telah mewakili Itali sebanyak 13 kali.\r\n",
      "\r\n",
      "Supercoppa Italiana Supercoppa Italiana \"(Italian Super Cup)\" adalah pertandingan bola sepak pra-musim yang diadakan pada minggu sebelum musim bermula di Itali pada setiap tahun.\r\n",
      "\r\n",
      "Callosciurus Callosciurus merupakan genus tupai Asia Tenggara.\r\n",
      "Beberapa spesies telahmendiami pulau kecil, dan berkembang menjadi subspesies berlainan.\r\n",
      "Secara keseluruhan, genus ini merangkumi 14 spesies dan sehingga 300 subspesies atau kepelbagaian.\r\n",
      "Genera \"Glyphotes\", \"Rubrisciurus\", dan \"Tamiops\" dan kadangkala juga dogolongkan kepada \"Callosciurus\".\r\n",
      "Beberapa spesies sungguh bewarna-warni; malah, ia tergolong ke dalam mamalia paling bercorak bewarna.\r\n",
      "Tupai Bukit memiliki warna hitam hijau zaiton, tetapi perutnya adalah merah darah.\r\n",
      "Tupai Prevost mempunyai belakang hitam, putih di sisi, dan perang-merah di bahagian bawah.\r\n",
      "Tupai Finlayson terdapat dalam tiga variati: perang-merah, hitam, dan putih bersih.\r\n",
      "Panjang tupai ini adalah sekitar , tidak termasuk ekor sepanjang .\r\n",
      "Kebanyakan tupai dalam genus \"Callosciurus\" hidup dalam hutan hujan tropika, tetapi sesetengah variati tinggal di taman dan kebun di bandar Asia.\r\n",
      "Di pokok, ia membina sarang dari bahan tumbuhan.\r\n",
      "Ia hudup bersendirian, melahirkan kepada satu atau dua anak.\r\n",
      "Makanannya terdiri dari kekacang, buah, dan biji benih, dan juga serangga dan telor burung.\r\n",
      "Terdapat sekitar 15 spesies: Kloss Squirrel (\"Callosciurus (notatus) albescens\") dari Sumatra kadangkala dianggap spesies berlainan, tetapi sering kali dianggap subspesies bagi tupai plantain.\r\n",
      "\r\n",
      "CNBC Asia CNBC Asia ialah saluran berita niaga di Asia.\r\n",
      "Saluran ini merupakan affliasi dari CNBC dan dipegang oleh NBC Universal.\r\n",
      "CNBC Asia didirikan pada 20 Jun 1995, setelah didirikan NBC Asia.\r\n",
      "Saat itu, program - program CNBC Asia sangat serupa dengan CNBC Amerika Syarikat, iaitu \"The Money Wheel\", dan \"Business Tonight\".\r\n",
      "Pada 9 Disember 1997, CNBC Asia bergabung dengan Asia Business News, sehingga menjadi CNBC Asia Business News, namun setahun kemudian saluran ini di-\"restore\" menjadi CNBC Asia.\r\n",
      "Tahun 2001, CNBC Asia mulai mengeluarkan CNBC Sports.\r\n",
      "Saluran ini mengutamakan olahraga.\r\n",
      "Pada Julai 2005, sahamnya dipegang oleh NBC, sehingga kembali dengan nama CNBC.\r\n",
      "Dan pada tahun 2007, CNBC akan membuka cawangan di Sydney, Australia.\r\n",
      "\r\n",
      "Celestial Movies Celestial Movies merupakan saluran filem yang disiarkan 24 jam tanpa henti.\r\n",
      "Saluran ini menayangkan filem berbahasa Mandarin dari Shaw Scope, Media Asia Distribution Ltd, Emperor Motion Pictures, Sony Pictures Entertainment, Golden Harvest serta Toho.\r\n",
      "Tersedia juga Celestial Express, Celestial Cool Talk, Celestial Cameos dan Director-On-Director.\r\n",
      "\r\n",
      "Nikon D300 Kamera Nikon D300 adalah kamera digital untuk jurugambar profesional dan semi profesional.\r\n",
      "Dengan kualiti gambar 12.3 megapiksel dan format DX dari jenis \"digital Single Lens Reflexs\".\r\n",
      "Kilang pengeluar Nikon Corporation dari Jepun mengeluarkan kamera ini di Thailand pada 23 Ogos 2007.\r\n",
      "Kelajuan 6 keping sesaat dikawal oleh CMOS sensor.\r\n",
      "Kamera ini hampir sama dengan D3, bezanya ia menggunakan penderia FX berbanding DX pada D300.\r\n",
      "D300 yang ditetapkan oleh Nikon sebagai muktamad dalam format prestasi DX .\r\n",
      "[Ia adalah agak sama dengan yang Nikon D700 , dengan perbezaan utama ialah bahawa D300 menggunakan sensor DX bukan sensor FX.\r\n",
      "Ia menawarkan kedua-dua resolusi tinggi dan berkelajuan tinggi (iaitu dapat menangkap 6 bingkai sesaat, dan 8 bingkai sesaat dengan tambahan pilihan MB-D10 bateri pek).\r\n",
      "D300 mempunyai bukan sahaja terbina dalam motor autofokus untuk semua Nikon autofokus- kanta , tetapi termasuklah CPU dan pemeteran untuk lebih tua Nikon F-mount AI / kanta AI-S dan kawalan generasi baru kanta perspektif ( PC-E ).\r\n",
      "Yang dibina dalam intervalometer (pemasa) boleh digunakan untuk filem masa berlalu rendah terang.\r\n",
      "3D Color Matrix Pemeteran II, dengan menggunakan sensor 1005-pixel RGB.\r\n",
      "Termasuk matriks, pusat-berat, dan pemeteran spot dengan AI dan AIS tumpuan pengguna kanta dihasilkan sejak tahun 1977 Pembetulan automatik sisi aberasi kromatik .\r\n",
      "D300 Nikon telah diumumkan pada 23 Ogos 2007 oleh Outdoor Photographer,[6] Shutterbug Magazine,[7] dan majalah UK \"What Digital Camera\".\r\n",
      "'Popular Photography' menamakan D300 Nikon untuk \"Kamera Tahun 2007 .\r\n",
      "\r\n",
      "Kepulauan Bangka Belitung Kepulauan Bangka-Belitung adalah sebuah provinsi Indonesia, yang termasuk dua pulau utama, Bangka dan Belitung, dan beberapa yang lebih kecil yang terletak berhampiran di timur Sumatera hingga ke timur laut provinsi Sumatera Selatan.\r\n"
     ]
    }
   ],
   "source": [
    "!head -n 100 wiki-text.txt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "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.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
