Permalink
Browse files

Merge pull request #19 from siddharthkv7/indian-languages-tutorials

Added tutorials for South-Asian languages
  • Loading branch information...
kylepjohnson committed Oct 5, 2018
2 parents 1b991b5 + 61732e8 commit a5edfb703b2af870c449f610f4e203f90c7c9125
@@ -0,0 +1,369 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Bengali with CLTK"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Use <b>CLTK</b> to analyse Bengali texts!"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let us first add user path, where our scripts will be downloaded to.."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import os\n",
"USER_PATH = os.path.expanduser('~')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now, before we can analyse the texts, let us first download the Bengali texts from CLTK's Github repo, for which, we will be needing an importer."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"from cltk.corpus.utils.importer import CorpusImporter\n",
"bengali_corpus_downloader = CorpusImporter('bengali')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Once we have our importer ready, we can view which corpora are available for download."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['bengali_text_wikisource']"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"bengali_corpus_downloader.list_corpora"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let us now download the corpus <i>bengali_text_wikisource</i>. The corpus will be downloaded to the home directory of the user in a directory called `cltk_data/text`"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"bengali_corpus_downloader.import_corpus('bengali_text_wikisource')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let us now open the text শকুন্তলা by <i>Abanindranath Tagore</i>."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"bengali_corpus_path = os.path.join(USER_PATH,'cltk_data/bengali/text/bengali_text_wikisource')\n",
"bengali_text_path = os.path.join(bengali_corpus_path,'শকুন্তলা')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Since we have the data differentiated into different text files, let us combine them to form a single text block. Then we print first 1000 characters of first text file."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"তপোবনে ।\n",
" রাজা রাজ্যে চলে গেলেন, আর শকুন্তলা সেই বনে দিন গুন্‌তে লাগল।\n",
" যাবার সময় রাজা নিজের মোহর আংটী শকুন্তলাকে দিয়ে গেলেন, বলে গেলেন—সুন্দরি, তুমি প্রতিদিন আমার নামের একটি করে অক্ষর পড়বে, নামও শেষ হবে আর বনপথে সোণার রথ তোমাকে নিতে আসবে।”\n",
" কিন্তু হায়, সোণার রথ কই এল ?\n",
" কত দিন গেল, কত রাত গেল; দুষ্মন্ত নাম কতবার পড়া হয়ে গেল, তবু সোণার রথ কই এল! হায় হায়, সোণার সাঁঝে সোণার রথ সেই যে গেল আর ফিরল না!\n",
" পৃথিবীর রাজা সোণার সিংহাসনে, আর বনের রাণী কুটীর দুয়ারে,—দুই জনে দুই খানে।\n",
" রাজার শোকে শকুন্তলার মন ভেঙ্গে পড়ল। কোথা রইল অতিথিসেবা, কোথা রইল পোষা হরিণ, কোথা রইল সাধের নিকুঞ্জবনে প্রাণের দুই প্রিয়সখী! শকুন্তলার মুখে হাসি নেই, চোখে ঘুম নেই! রাজার ভাবনা নিয়ে কুটীর দুয়ারে পাষাণ-প্রতিমা বসে রইল।\n",
" রাজার রথ কেন এল না? কেন রাজা ভুলে রইলেন?\n",
" রাজা রাজ্যে গেলে একদিন শকুন্তলা কুটীর দুয়ারে গালে হাত দিয়ে বসে বসে রাজার কথা ভাবছে—ভাবছে আর কাঁদছে, এমন সময় মহর্ষি দুর্ব্বাসা দুয়ারে অতিথি এলেন, শকুন্তলা জানতেও পারলে না, ফিরেও দেখলে না। একে দুর্ব্বাসা মহা অভিমানী, একটুতেই মহা রাগ হয়, কথায় কথায়\n"
]
}
],
"source": [
"bengali_text_shakuntala = []\n",
"for filename in os.listdir(bengali_text_path):\n",
" if filename[-3:] == 'txt':\n",
" with open(os.path.join(bengali_text_path,filename)) as f:\n",
" file_text = f.read()\n",
" bengali_text_shakuntala.append(file_text)\n",
"bengali_text_shakuntala_first = bengali_text_shakuntala[0][:1000]\n",
"print(bengali_text_shakuntala_first)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Sentence tokenization"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let us now perform tokenization on the first part of the text <i>Shakuntala</i> . "
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['তপোবনে', '।', '\\n\\xa0রাজা', 'রাজ্যে', 'চলে', 'গেলেন', ',', 'আর', 'শকুন্তলা', 'সেই', 'বনে', 'দিন', 'গুন্\\u200cতে', 'লাগল', '।', '\\n\\xa0যাবার', 'সময়', 'রাজা', 'নিজের', 'মোহর', 'আংটী', 'শকুন্তলাকে', 'দিয়ে', 'গেলেন', ',', 'বলে', 'গেলেন—সুন্দরি', ',', 'তুমি', 'প্রতিদিন', 'আমার', 'নামের', 'একটি', 'করে', 'অক্ষর', 'পড়বে', ',', 'নামও', 'শেষ', 'হবে', 'আর', 'বনপথে', 'সোণার', 'রথ', 'তোমাকে', 'নিতে', 'আসবে', '।', '”\\n\\xa0কিন্তু', 'হায়', ',', 'সোণার', 'রথ', 'কই', 'এল\\xa0', '?', '\\n\\xa0কত', 'দিন', 'গেল', ',', 'কত', 'রাত', 'গেল', ';', 'দুষ্মন্ত', 'নাম', 'কতবার', 'পড়া', 'হয়ে', 'গেল', ',', 'তবু', 'সোণার', 'রথ', 'কই', 'এল', '!', 'হায়', 'হায়', ',', 'সোণার', 'সাঁঝে', 'সোণার', 'রথ', 'সেই', 'যে', 'গেল', 'আর', 'ফিরল', 'না', '!', '\\n\\xa0পৃথিবীর', 'রাজা', 'সোণার', 'সিংহাসনে', ',', 'আর', 'বনের', 'রাণী', 'কুটীর', 'দুয়ারে', ',', '—দুই', 'জনে', 'দুই', 'খানে', '।', '\\n\\xa0রাজার', 'শোকে', 'শকুন্তলার', 'মন', 'ভেঙ্গে', 'পড়ল', '।', 'কোথা', 'রইল', 'অতিথিসেবা', ',', 'কোথা', 'রইল', 'পোষা', 'হরিণ', ',', 'কোথা', 'রইল', 'সাধের', 'নিকুঞ্জবনে', 'প্রাণের', 'দুই', 'প্রিয়সখী', '!', 'শকুন্তলার', 'মুখে', 'হাসি', 'নেই', ',', 'চোখে', 'ঘুম', 'নেই', '!', 'রাজার', 'ভাবনা', 'নিয়ে', 'কুটীর', 'দুয়ারে', 'পাষাণ', '-', 'প্রতিমা', 'বসে', 'রইল', '।', '\\n\\xa0রাজার', 'রথ', 'কেন', 'এল', 'না', '?', 'কেন', 'রাজা', 'ভুলে', 'রইলেন', '?', '\\n\\xa0রাজা', 'রাজ্যে', 'গেলে', 'একদিন', 'শকুন্তলা', 'কুটীর', 'দুয়ারে', 'গালে', 'হাত', 'দিয়ে', 'বসে', 'বসে', 'রাজার', 'কথা', 'ভাবছে—ভাবছে', 'আর', 'কাঁদছে', ',', 'এমন', 'সময়', 'মহর্ষি', 'দুর্ব্বাসা', 'দুয়ারে', 'অতিথি', 'এলেন', ',', 'শকুন্তলা', 'জানতেও', 'পারলে', 'না', ',', 'ফিরেও', 'দেখলে', 'না', '।', 'একে', 'দুর্ব্বাসা', 'মহা', 'অভিমানী', ',', 'একটুতেই', 'মহা', 'রাগ', 'হয়', ',', 'কথায়']\n"
]
}
],
"source": [
"\n",
"from cltk.tokenize.sentence import TokenizeSentence\n",
"tokenizer = TokenizeSentence('bengali')\n",
"bengali_text_shakuntala_first_tokens = tokenizer.tokenize(bengali_text_shakuntala_first)\n",
"print(bengali_text_shakuntala_first_tokens[:-1]) ##omit last word due to incompleteness\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Transliterations"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can transliterate Bengali scripts to that of other Indic languages. Let us transliterate ` আমি বই পছন্দ করি `to Telugu:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'ఆమి బఇ పఛన్ద కరి'"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"bengali_text_two = 'আমি বই পছন্দ করি'\n",
"from cltk.corpus.sanskrit.itrans.unicode_transliterate import UnicodeIndicTransliterator\n",
"UnicodeIndicTransliterator.transliterate(bengali_text_two,\"bn\",\"te\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can also romanize the text as shown:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'aami bi paChanda kari'"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from cltk.corpus.sanskrit.itrans.unicode_transliterate import ItransTransliterator\n",
"ItransTransliterator.to_itrans(bengali_text_two,'bn')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Similarly, we can indicize a text given in its ITRANS-transliteration"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'শিক্ষা'"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"bengali_text_itrans = 'shikshhaa'\n",
"ItransTransliterator.from_itrans(bengali_text_itrans,'bn')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Syllabifier"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can use the indian_syllabifier to syllabify the Bengali sentences. To do this, we will have to import models as follows. The importing of `sanskrit_models_cltk` might take some time."
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"phonetics_model_importer = CorpusImporter('sanskrit')\n",
"phonetics_model_importer.list_corpora\n",
"phonetics_model_importer.import_corpus('sanskrit_models_cltk') "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now we import the syllabifier and syllabify as follows:"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"%%capture\n",
"from cltk.stem.sanskrit.indian_syllabifier import Syllabifier\n",
"bengali_syllabifier = Syllabifier('bengali')\n",
"bengali_syllables = bengali_syllabifier.orthographic_syllabify('আমি')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The syllables of the word `আমি` will thus be:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['আ', 'মি']\n"
]
}
],
"source": [
"print(bengali_syllables)"
]
}
],
"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.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Oops, something went wrong.

0 comments on commit a5edfb7

Please sign in to comment.