├── README.md
├── apps
└── summary_app_local.py
├── charts_tables
├── pm.html
└── pm_sentiment.csv
├── data
├── cna_sample.csv
├── covid_speeches.csv
├── ge2020_speeches.csv
├── singlish.json
├── singlish_sms.txt
├── tamil_speeches.csv
├── tamil_stories.csv
├── train_df.csv
├── train_raw.csv
├── translation_speeches.csv
├── validate.csv
└── validate_df.csv
└── notebooks
├── .ipynb_checkpoints
└── 1.0_speech_sentiment_cch-checkpoint.ipynb
├── 1.0_speech_sentiment_cch.ipynb
├── 2.0_speech_summary_cch.ipynb
├── 3.0_data_prep_cch.ipynb
├── 3.1_finetune_bot_cch.ipynb
├── 3.2_dash_chat_app_cch.ipynb
├── 3.3_aitextgen_cpu_cch.ipynb
├── 4.0_english_to_chinese_translate.ipynb
├── 4.1_english_to_chinese_news.ipynb
├── 4.2_chinese_to_english_translate.ipynb
├── 4.3_english_to_tamil_fairseq.ipynb
├── 4.4_tamil_to_english_fairseq.ipynb
└── 5.0_finetune_distilbert_colab_cch.ipynb
/README.md:
--------------------------------------------------------------------------------
1 | # Practical NLP
2 |
3 | This series of notebooks is aimed at helping fellow NLP enthusiasts think about applying new tools and techniques to practical tasks. My goal is to keep the code and work flow simple, and focus on actual use cases.
4 |
5 | # PART 5: Fine Tune Transformer Model On Custom Dataset
6 |
7 | [Notebook5.0](https://github.com/chuachinhon/practical_nlp/blob/master/notebooks/5.0_finetune_distilbert_colab_cch.ipynb) is an adaptation of my [new repo](https://github.com/chuachinhon/transformers_state_trolls_cch) on using transformer models to detect state trolls on Twitter. I reckon many may not be interested in the subject matter, so I only ported over the Colab notebook for fine tuning with custom dataset for folks who are specifically looking for examples like this.
8 |
9 | This notebook took about 5.5 hours to run on a Colab Pro account on TPU and "high-RAM" settings. It could go slower or faster depending on your set-up. The datasets needed - train_raw.csv and validate.csv - are in the [data folder](https://github.com/chuachinhon/practical_nlp/tree/master/data) of this repo.
10 |
11 |
12 | # PART 4: Batch Machine Translation with Hugging Face+MarianMT and FB/Fairseq
13 | 
14 | Machine translation doesn't generate as much excitement as other emerging areas in NLP, but recent advances have opened up interesting new possibilities in this space. Over 5 short notebooks, I'll demo a simple workflow for using Hugging Face's version of MarianMT, as well as Facebook's Fairseq toolkit for translation.
15 |
16 | The HF-MMT demos cover:
17 | - [translate 3 English speeches of varying lengths to Chinese](https://github.com/chuachinhon/practical_nlp/blob/master/notebooks/4.0_english_to_chinese_translate.ipynb)
18 | - [translate 5 English news stories on Covid-19 (under 500 words) to Chinese](https://github.com/chuachinhon/practical_nlp/blob/master/notebooks/4.1_english_to_chinese_news.ipynb)
19 | - [translate 3 Chinese speeches to English](https://github.com/chuachinhon/practical_nlp/blob/master/notebooks/4.2_chinese_to_english_translate.ipynb)
20 |
21 |
22 | The FB-Fairseq demos cover (Added Dec 29 2020):
23 | - [translate 3 English speeches of varying lengths to Tamil](https://github.com/chuachinhon/practical_nlp/blob/master/notebooks/4.3_english_to_tamil_fairseq.ipynb)
24 |
25 | - [translate 5 English news stories on Covid-19 (under 500 words) to Tamil](https://github.com/chuachinhon/practical_nlp/blob/master/notebooks/4.3_english_to_tamil_fairseq.ipynb)
26 |
27 |
28 | - [translate 5 Tamil speeches of varying lengths to English](https://github.com/chuachinhon/practical_nlp/blob/master/notebooks/4.4_tamil_to_english_fairseq.ipynb)
29 |
30 | - [translate 5 short Tamil news articles to English](https://github.com/chuachinhon/practical_nlp/blob/master/notebooks/4.4_tamil_to_english_fairseq.ipynb)
31 |
32 |
33 | Results from neural machine translation models are not (yet) as artful or precise as those by a skilled human translator. But they get 60% or more of the job done, in my view. Depending on your use case, that could be a huge time saver.
34 |
35 | Fuller background and details in this Medium post [here](https://medium.com/@chinhonchua/lost-in-machine-translation-3b05615d68e7?sk=4006eab9717ef5381c50e923fe2b814d).
36 |
37 |
38 | # PART 3: Beginner's Guide To Building A Singlish AI Chatbot
39 | 
40 | AI text generation is one of the most exciting fields in NLP, but also a daunting one for beginners. These 4 notebooks aim to speed up the learning process for newcomers by combining and adapting various existing tutorials into a practical end-to-end walkthrough with notebooks and sample data for a conversational chatbot that can be used in an interactive app.
41 | - [3.0](https://github.com/chuachinhon/practical_nlp/blob/master/notebooks/3.0_data_prep_cch.ipynb): Data preparation
42 | - [3.1](https://github.com/chuachinhon/practical_nlp/blob/master/notebooks/3.1_finetune_bot_cch.ipynb): Fine tuning a pretrained DialoGPT-medium model on Colab
43 | - [3.2](https://github.com/chuachinhon/practical_nlp/blob/master/notebooks/3.2_dash_chat_app_cch.ipynb): Testing the model's performance on an interactive Dash app
44 | - [3.3](https://github.com/chuachinhon/practical_nlp/blob/master/notebooks/3.3_aitextgen_cpu_cch.ipynb): CPU alternative to text generation
45 |
46 | Fuller background and details in this Medium post [here](https://medium.com/@chinhonchua/beginners-guide-to-building-a-singlish-ai-chatbot-7ecff8255ee?sk=ea4f20a44a73321fad8b592d3ede6243).
47 |
48 | # PART 2: Text Summarisation Of Short and Long Speeches Using Hugging Face's Pipeline
49 | 
50 |
51 | Text summarization is a far less common downstream NLP task compared to, say, classification or sentiment analysis. The resources and time needed to do it well are considerable. Hugging Face's transformers pipeline, however, has made the first part of the task much faster and efficient. More time can then be devoted to analysing the results, and/or building your own benchmarks for assessing the summaries. This [notebook](https://github.com/chuachinhon/practical_nlp/blob/master/notebooks/2.0_speech_summary_cch.ipynb) incorporates minor work-arounds to handle longer speeches, which is trickier to handle due to sequence length limits in the transformer models/pipeline.
52 |
53 | Fuller background and details in this Medium post [here](https://towardsdatascience.com/practical-nlp-summarising-short-and-long-speeches-with-hugging-faces-pipeline-bc7df76bd366).
54 |
55 |
56 | # PART 1: Sentiment Analysis Of Political Speeches Using Hugging Face's Pipeline
57 |
58 | 
59 |
60 | Sentiment analysis is a fairly common task in machine learning. Hugging Face's new pipeline feature, however, has made it incredibly easy to use a transformer-based model for this task. In this [notebook](https://github.com/chuachinhon/practical_nlp/blob/master/notebooks/1.0_speech_sentiment_cch.ipynb), I'll explore how the HF pipeline can be used together with Plotly and Google Sheets to produce a detailed analysis of one speech, as well as how the same technique can be adapted for longer-term analysis of political speeches on one topic, or those by a common group of speakers.
61 |
62 | Fuller background in this post [here](https://www.analytix-labs.com/insights/cb-speeches).
63 |
64 | ---
65 |
--------------------------------------------------------------------------------
/apps/summary_app_local.py:
--------------------------------------------------------------------------------
1 | import dash
2 | import dash_table as dt
3 | import dash_core_components as dcc
4 | import dash_html_components as html
5 | from dash.dependencies import Input, Output, State
6 | import pandas as pd
7 |
8 | from transformers import pipeline
9 |
10 | nlp_summarizer = pipeline('summarization')
11 |
12 | # Define app
13 | app = dash.Dash(__name__, external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css'])
14 | server = app.server
15 |
16 | # Define Layout
17 | app.layout = html.Div([
18 | html.H1('Summarisation With Hugging Face Pipeline'),
19 | dcc.Textarea(
20 | id='input_text',
21 | value='',
22 | style={'font-size': '100%', 'width': '100%', 'height': 500},
23 | ),
24 | html.Button('Summarise', id='submit_val', n_clicks=0),
25 | dcc.Markdown(
26 | id='sum_text',
27 | style={'font-size': '130%', 'border-style': 'solid', 'padding': '1px', 'border-width': '3px'})
28 | ])
29 |
30 | @app.callback(
31 | Output('sum_text', 'children'),
32 | [Input('submit_val', 'n_clicks')],
33 | [State('input_text', "value")]
34 | )
35 | def summarize_text(n_clicks, input_text):
36 | if n_clicks != 0:
37 | stext = nlp_summarizer(input_text)[0]['summary_text']
38 | return stext
39 |
40 | if __name__ == '__main__':
41 | app.run_server(debug=True, host = '127.0.0.1')
42 |
--------------------------------------------------------------------------------
/charts_tables/pm_sentiment.csv:
--------------------------------------------------------------------------------
1 | Paras,Sentiment_Label,Sentiment_Score
2 | Our fight against COVID-19 continues.,POSITIVE,0.9969629049301147
3 | "We have made good progress. In the community, new cases have come down. In the migrant worker dormitories, the situation has stabilised. Our healthcare system is coping well, thanks to the outstanding work of our healthcare professionals, and many others on the frontline. Most importantly, among both Singaporeans and migrant workers, we have kept fatalities low – one of the lowest rates in the world.",POSITIVE,0.9992828369140625
4 | "As a result, we have been able to move out of the circuit breaker. We are opening up our economy and society, progressively and safely. As we ease up, I expect the number of cases to rise somewhat, as has happened in other countries. So we are moving cautiously. We want to avoid the numbers shooting up again, and having to impose a second circuit breaker. We will step up testing and contact tracing significantly. Then we can catch new cases early, isolate them and their contacts, and stamp out clusters before they grow. If all goes well and the outbreak remains firmly under control, we will ease up further, and resume more activities as soon as possible. In the meantime, please continue to play your part: maintain personal hygiene and wash your hands frequently, wear a mask when you are out, and keep a safe distance from others and avoid crowded gatherings.",POSITIVE,0.9841965436935425
5 | "COVID-19 will remain a problem for a long time yet. It will take at least a year, probably longer, before vaccines become widely available. We will have to learn to live with COVID-19 for the long term, as we have done in the past with other dangerous infectious diseases, like tuberculosis. We also have to get used to new arrangements in our daily lives. We must all adjust the way we live, work and play, so that we can reduce the spread of the virus, and keep ourselves safe.",NEGATIVE,0.9946080446243286
6 | Economic Impact,POSITIVE,0.9995419383049011
7 | "But COVID-19 is not only a public health issue. It is also a serious economic, social and political problem. It is in fact the most dangerous crisis humanity has faced in a very long time.",NEGATIVE,0.9375098347663879
8 | "Because of COVID-19, the global economy has virtually ground to a halt. Governments have spent trillions of dollars to support businesses, economies and jobs. Yet, tens of millions of jobs have been lost. Families are experiencing hardship. We are in a totally unprecedented situation.",NEGATIVE,0.9818410277366638
9 | "Singapore has taken a severe hit too. Our GDP is likely to shrink between 4 and 7% this year, our worst contraction ever. To protect workers, households and companies, the Government has intervened decisively through four successive Budgets. We are injecting almost $100 billion – 20% of our GDP – the largest fiscal intervention in our history. Unlike other countries, we can draw on our reserves, and do not have to pay for our support measures by borrowing. But even for us, this level of spending is hard to sustain. More importantly, these measures cannot shield us from the tectonic shifts taking place in the global economy.",NEGATIVE,0.8341712355613708
10 | "Singapore depends heavily on international trade and investments. These were already slowing down before COVID-19. Now this slowdown will happen faster, and go further.",NEGATIVE,0.6578313112258911
11 | "We will not be returning to the open and connected global economy we had before, anytime soon. Movement of people will be more restricted. International travel will be much less frequent. Health checks and quarantines will become the norm. It will no longer be so easy to take quick weekend trips to Bangkok or Hong Kong on a budget flight. Industries that depend on travel, like aviation, hotels and tourism, will take a long time to get back on their feet, and may never recover fully.",NEGATIVE,0.9987536072731018
12 | "Countries will also strive to become less dependent on others. Especially for essential goods and services, like food or critical medical supplies. This will have strategic implications. Countries will have less stake in each other’s well being. They will fight more over how the pie is shared, rather than work together to enlarge the pie for all. It will be a less prosperous world, and also a more troubled one.",NEGATIVE,0.9990842938423157
13 | "All these developments will affect Singapore greatly. Since before the time of Raffles, we have made a living by connecting ourselves with the world. First, we were a trading hub, then an international seaport, then we made ourselves a hub for aviation, finance, and telecommunications. We have benefitted enormously from an open and connected global economy. Large parts of our economy – like manufacturing, biotech, financial services, and logistics – serve regional and world markets. Even many domestic sectors – like retail, F&B, and entertainment – rely heavily on tourism.",POSITIVE,0.9995741844177246
14 | "Now, we have to prepare for a very different future. Companies big and small will be hit hard. Some industries will be permanently changed. Many will have to reinvent themselves to survive. Workers too will feel the pain. Retrenchments and unemployment will go up. Some jobs will disappear, and will not come back. Workers will have to learn new skills to stay employed. The next few years will be a disruptive and difficult time for all of us.",NEGATIVE,0.9991949200630188
15 | We Can Be Confident,POSITIVE,0.9998248219490051
16 | "But despite these immense challenges, I say to you: Do not fear. Do not lose heart. Singapore will not falter in its onward march.",POSITIVE,0.9987928867340088
17 | I believe we can still secure a bright future for ourselves. An even stronger and better Singapore will emerge from this crisis.,POSITIVE,0.996491551399231
18 | "First, we have economic strengths and an international reputation built up over many decades. We are highly connected to the global flows of trade, investment, capital and people. International trade and investments may shrink, but they will not disappear entirely. Some flows will be diverted or dry up, but other new channels will open up. There will still be overseas markets, and opportunities for international partnerships. Singapore is well placed to connect ourselves to the new channels and flows, and create new businesses and jobs to replace those lost. We just have to work harder and smarter at it.",POSITIVE,0.999333381652832
19 | "Our strong, trusted international reputation will help us greatly. In a troubled world, investors will value the assurance of a government that plays by the rules. A people who understand what is at stake and a stable political system that enables businesses to continue operating even in a crisis. The way Singapore has responded to COVID-19 – openly and transparently, neither avoiding reality, nor acting arbitrarily at the first sign of trouble – has only strengthened this advantage.",POSITIVE,0.9855369925498962
20 | "Second, we have had a head start preparing for the uncertainties ahead. For some time now, we have been working hard to transform and deepen our capabilities. Developing plans for ourFuture Economy, investing heavily to upgrade our workers through SkillsFuture, digitalising both the private and public sectors, building our innovation and R&D capabilities. All this has enabled us to stand out in Asia and the world. Nobody can predict what exactly the world will look like after COVID-19 but however things turn out, these Future Economy strategies will stand us in good stead. We need to pursue them even more vigorously now. For instance, we know that many businesses will no longer be viable. We will support these businesses to transform themselves, change their business models, or move into different and more promising fields.",POSITIVE,0.9932006597518921
21 | "More immediately, we are systematically rebooting our economy, as countries emerge from lockdowns. We are rebuilding our transport and trade links. For example, Changi has already resumed transit flights. We are working out Reciprocal Green Lane arrangements for safe travel to China and other countries. We are making our supply chains more resilient. For example, we are diversifying our sources of food. We are even buying eggs from Poland, and shrimps from Saudi Arabia.",NEGATIVE,0.9751357436180115
22 | "Next, we are working hard to retain and attract talent and investments to contribute to our recovery. At a time when some countries are closing their doors, we are keeping ours open. By making the most of our head start, our workers and industries will survive the crisis better, and bounce back faster and stronger.",POSITIVE,0.9979220628738403
23 | "Third, we have programmes and plans to cope with the challenges before us. The government’s biggest priority now is jobs – helping Singaporeans to keep their jobs, or find new ones. We are particularly concerned about those in their 40s and 50s, who are often supporting children and elderly parents at the same time, and have financial commitments to meet. We are also concerned about mature workers nearing retirement, who want to work for a few more years, to build up their nest egg for old age. Lower income workers, who have not much savings to fall back on. The self-employed and freelancers, who have less job and income security in the gig economy and fresh graduates who are entering the job market in a very difficult year.",POSITIVE,0.9874553680419922
24 | "We have schemes to help all these groups. The Job Support Scheme, the Workfare Special Payment, the Self-Employed Person Income Relief Scheme (SIRS), the COVID-19 Support Grant and the SGUnited Jobs and Skills Package. These schemes have enabled people to hold on to their jobs, and provided income support for millions of Singaporeans and their families.",POSITIVE,0.9971274137496948
25 | "We have set up a National Jobs Council, to pull together and drive all our efforts on jobs, and look at how we can create new jobs for the economy. Senior Minister Tharman Shanmugaratnam is leading this. The Council will coordinate all the Government agencies involved, and bring in NTUC and the employer groups too, to maximise the impact of our efforts. So if you need a job, there are real options to pursue, and you will have help and support.",POSITIVE,0.9985178709030151
26 | "Beyond COVID-19, and the economic challenges, we also have to deal with other important external and domestic issues. Externally, we have to navigate the changing strategic landscape. COVID-19 has worsened relations between the US and China. Actions and counter-actions are raising tensions day by day. It will become harder for countries to stay onside with both powers. It will be a more dangerous world for a small country like Singapore. We must ensure our security, and protect and advance our interests when dealing with other countries, big and small. We must also work with like-minded countries to support free trade and multilateralism, and enhance our voice and influence in the world.",NEGATIVE,0.6024512052536011
27 | "Domestically, we have to strengthen our social compact. We have taken emergency measures to help everyone come through the crisis together. Beyond that, we have to think carefully how to improve our social safety nets. Sustainable social support will give people confidence to cope with the uncertainties and to make changes to their lives. At the same time, everyone must have the incentive to be self-reliant, and to progress through their own efforts. We have difficult decisions to make on priorities, resources, and budgets but the values guiding us remain the same: every Singaporean will have equal opportunities. Whatever your starting point in life, you will have access to good education, healthcare, and housing. If you fall down, we will help you to get up, stronger. You can be sure you will be taken care of. In Singapore, no one will be left to walk his journey alone.",POSITIVE,0.794968843460083
28 | "In the next few weeks, several Ministers will address you, and share with you our plans. We have a full agenda for many years to come.",POSITIVE,0.9993588924407959
29 | Our People are Our Strength,POSITIVE,0.9996684789657593
30 | "For our plans to succeed, for our hopes and dreams to come true, we need one final ingredient: the unity and resilience of our people. Once in a while, nations and peoples are severely tested, as we are now. Some buckle under pressure and emerge from crisis diminished. Others grow more determined as they face fearful odds, discover reserves of strength in themselves, and emerge from crisis transfigured, renewed. And that has been our Singapore story: in crises, we have never failed to wrest opportunity from danger.",POSITIVE,0.9909107685089111
31 | "Indeed, our nation was born in crisis. When we were granted independence, it was in the expectation that we would fail and come crawling back, after realising we could not survive alone. We proved otherwise. Two years later, the British suddenly announced that they were withdrawing their forces from Singapore. Again, many thought that would be the end of us. And again, we proved them wrong. The Pioneer Generation fought to master their destiny. And the Merdeka Generation put heart and soul into making Singapore succeed. Together, they weathered many storms, always looking ahead, never flinching at hard choices and challenges. And that is how we got here.",POSITIVE,0.9844651818275452
32 | "Now, at another hinge in our history, it is our turn to face the crisis of a generation. The choices that we make now will define who we are as a people, and what values and ideals we pass on to future generations. Confronting adversity, do we yield to anger, fear and bitterness? Or will we be true to ourselves, stand firm, make tough choices, and continue to trust and depend on one another?",POSITIVE,0.9836629629135132
33 | "Many Singaporeans have stepped up during this crisis. They have become more, not less, than themselves. Healthcare workers, public officers, grassroots leaders and volunteers, and many more working quietly behind the scenes. Some are taking good care of migrant workers in the dorms. Others are sewing masks, buying groceries for families under quarantine, or refurbishing computers for needy students to do Home-Based Learning. Abroad, Singaporeans have driven hundreds of kilometres to pick up fellow citizens to catch SQ flights home. These acts of solidarity and human kindness exemplify the best in us. They show how we can emerge stronger from this crisis, with a sharper consciousness of being Singaporean.",POSITIVE,0.9993605613708496
34 | "This is why I believe we can continue to be exceptional – a fair and just society, where everyone can chase their dreams. My Cabinet team, with the support of the whole public service, will do our best to lead us towards this enduring vision of what Singapore can be. We need every one of you to work with us. Together, let us take Singapore safely through this crisis, and make the Singapore spirit flourish in the world.",POSITIVE,0.9997282028198242
35 |
--------------------------------------------------------------------------------
/data/cna_sample.csv:
--------------------------------------------------------------------------------
1 | Source,Date,Story_Headline,Story_Text,Word_Count,URL
2 | CNA,2020-03-19,Wuhan's new COVID-19 cases could cease by mid-late March: Report,"SHANGHAI: Wuhan is expected to see new coronavirus infections dry up by mid-to-late March and the lockdown of the central Chinese city, the epicentre of the outbreak, may be lifted once there are no new cases for 14 days, the state-backed China Daily reported.
3 |
4 | However, strict disease control and prevention measures will still be needed to prevent a possible rebound, China Daily reported on Thursday, citing epidemiologist Li Lanjuan.
5 |
6 | Advertisement
7 |
8 | Advertisement
9 |
10 | Li is the director of China's State Key Laboratory for Diagnosis and Treatment of Infectious Diseases.
11 |
12 | ""If no new case of the coronavirus has been reported for 14 consecutive days in Wuhan following the last reported case, we believe it will be the time when the lockdown can be gradually lifted,"" Li told China Daily. ""We expect new cases will cease to appear in mid or late March.""
13 |
14 | ""After the lockdown is loosened, we still need to strictly carry out routine measures to prevent and control the virus to prevent a possible rebound of the outbreak.""
15 |
16 | Advertisement
17 |
18 | Advertisement
19 |
20 | Wuhan, a city of 11 million and the capital of central Hubei province, has been locked down since the Chinese New Year festival in mid-January, and remains the only city still designated as ""high-risk"" in the province and subject to strict travel bans.
21 |
22 | The death toll from the coronavirus in Hubei stood at 3,130 as of Mar 18, accounting for more than a third of the global tally of over 8,000 deaths.
23 |
24 | But Wuhan reported no new cases on Wednesday for the first time since the outbreak. It previously saw just one domestic transmission per day on Monday and Tuesday. The rest of Hubei has had no new infections for almost two weeks.
25 |
26 | Overall, mainland China is seeing fewer local transmissions. It last reported 34 new confirmed cases on Wednesday, the National Health Commission said, all of which are imported infections.
27 |
28 | Download our app or subscribe to our Telegram channel for the latest updates on the COVID-19 outbreak: https://cna.asia/telegram",315,https://www.channelnewsasia.com/news/asia/coronavirus-covid-19-china-wuhan-cases-lockdown-12554878?cid=FBcna
29 | CNA,2020-03-04,Researchers identify two novel coronavirus types as China cases dwindle,"SHANGHAI: Scientists in China studying the viral disease outbreak's origin said they had found that two main types of the new coronavirus could be causing infections.
30 |
31 | The researchers, from Peking University's School of Life Sciences and the Institut Pasteur of Shanghai under the Chinese Academy of Sciences, cautioned that their analysis examined a limited range of data, and said follow-up analyses of larger data sets are needed to better understand the virus's evolution.
32 |
33 | Advertisement
34 |
35 | Advertisement
36 |
37 | The preliminary study found that a more aggressive type of the new coronavirus associated with the disease outbreak in Wuhan accounted for about 70 per cent of analysed strains, while 30 per cent was linked to a less aggressive type.
38 |
39 | The prevalence of the more aggressive virus decreased after early January 2020, they said.
40 |
41 | ""These findings strongly support an urgent need for further immediate, comprehensive studies that combine genomic data, epidemiological data, and chart records of the clinical symptoms of patients with coronavirus disease 2019 (COVID-19),"" they wrote.
42 |
43 | Their findings were published on Tuesday (Mar 3) in the National Science Review, the journal of the Chinese Academy of Sciences.
44 |
45 | Advertisement
46 |
47 | Advertisement
48 |
49 | The findings come amid a fall in new coronavirus cases following crippling restrictions imposed on the world's second-largest economy to stop its spread, including transport suspensions and the extension of the Lunar New Year holiday.
50 |
51 | Mainland China had 119 new confirmed cases of coronavirus on Tuesday, the National Health Commission said, down slightly from 125 the previous day, in a broad trend that has seen numbers of new cases fall from the middle of February.
52 |
53 | The total number of cases on the mainland has now reached 80,270. The number of deaths rose by 38 to bring the total toll for mainland China to 2,981 by Mar 3.
54 |
55 |
56 |
57 | All but one new death occurred in Hubei province, the epicentre of the outbreak.
58 |
59 | OVERSEAS SPREAD
60 |
61 | With the number of new daily infections overseas now exceeding new cases in China, Chinese officials have begun to seek ways to control the spread of the virus outside of China and guard against future outbreaks.
62 |
63 | Authorities have asked overseas Chinese hoping to return home to reconsider their travel plans, while cities across the country have set up quarantine rules for those entering from high-risk places.
64 |
65 | Italy, South Korea and Iran have all become infection hot spots.
66 |
67 | An infected person is known to have arrived in China from Iran last week.
68 |
69 | China is encouraging domestic producers of medical protective equipment to export protective suits to meet overseas demand as the virus spreads, Cao Xuejun, an official with China's Ministry of Industry and Information Technology said in a press briefing in Beijing on Wednesday.
70 |
71 | China's health authorities are also studying setting up emergency reserves for medical resources and protective materials, Mao Qunan, an official at China's National Health Commission said at the same briefing.
72 |
73 | The coronavirus outbreak had exposed the weakness of China's emergency reserves, he said.
74 |
75 |
76 |
77 | Download our app or subscribe to our Telegram channel for the latest updates on the coronavirus outbreak: https://cna.asia/telegram",481,https://www.channelnewsasia.com/news/asia/covid19-researchers-identify-two-strains-coronavirus-cases-china-12500850?cid=FBcna
78 | CNA,2020-03-05,Bethlehem's Church of the Nativity ordered closed over COVID-19 fears,"BETHLEHEM: The Church of the Nativity was ordered closed on Thursday (Mar 5) and foreign tourists were banned from West Bank hotels after four suspected COVID-19 cases were found in the Palestinian town of Bethlehem.
79 |
80 | The measures announced by the Palestinian Authority's tourism ministry came as a particular blow to the Biblical town, whose businesses are largely dependent on Christian visitors to the church, built on the traditional site of Jesus's birth.
81 |
82 | Advertisement
83 |
84 | Advertisement
85 |
86 | Just three months ago Bethlehem was hailing its best Christmas for two decades, the mayor and hoteliers said, even better than the 1.5 million visitors it received in 2018.
87 |
88 | The Latin Patriarchate of the Holy Land said the Church of the Nativity, which was first founded in 339 and rebuilt and extended over the centuries, would be closed for two weeks, along with other churches and mosques in the Bethlehem area.
89 |
90 | The ban on foreign guests at West Bank hotels will also last two weeks, the tourism ministry said.
91 |
92 | Advertisement
93 |
94 | Advertisement
95 |
96 | ""This affects us dramatically,"" said Joey Canavati, manager of the 58-room Alexander Hotel in Bethlehem. ""Our workers are essentially laid off for the next 14 days. We will be closed down completely. It destroyed our business from every perspective.""
97 |
98 | A visitor wearing a mask as a preventive measure against the coronavirus takes pictures in the Church of the Nativity in Bethlehem in the Israeli-occupied West Bank, Mar 5, 2020. (Photo: Reuters/Mussa Qawasma)
99 |
100 | Canavati said groups of tourists from the United States, Poland and Cameroon had already cancelled their bookings.
101 |
102 | Palestinian health officials said they were examining whether four workers at another hotel in Bethlehem had contracted coronavirus from tourists who had stayed there recently.
103 |
104 | Police surrounded the hotel, as authorities awaited the results of laboratory tests. There have been no confirmed cases of the disease in the West Bank. Fifteen people have been diagnosed with the virus in neighbouring Israel.
105 |
106 | The Palestinian governor of the West Bank town of Nablus on Thursday ordered its Muslim and Christian holy sites shut as a public health precaution.
107 |
108 | The Palestinian Authority exercises limited self-rule in the Israeli-occupied West Bank under interim peace accords.
109 |
110 | On Wednesday, Israel ordered travellers arriving from Germany, France, Spain, Austria and Switzerland to go into home quarantine over coronavirus concerns and cancelled a military exercise with troops from the US European Command.
111 |
112 | The measure effectively cut off foreign tourism from those countries, whose citizens, the Health Ministry said, would not be allowed into Israel unless they could show they had made quarantine arrangements ahead of time.
113 |
114 | Israel has already imposed the edict with regard to flights from Italy, China and Singapore.
115 |
116 |
117 |
118 | Download our app or subscribe to our Telegram channel for the latest updates on the coronavirus outbreak: https://cna.asia/telegram",436,https://www.channelnewsasia.com/news/world/coronavirus-bethlehem-church-of-the-nativity-closed-tourism-12506304?cid=FBcna
119 | CNA,2020-03-19,NATAS travel fair in May cancelled as COVID-19 outbreak continues,"SINGAPORE: Amid a COVID-19 outbreak that has prompted various countries to issue travel advisories, the National Association of Travel Agents Singapore (NATAS) has cancelled a fair scheduled for May and will “decide in due course” whether to do the same for another event later this year.
120 |
121 | The association typically organises two massive travel fairs a year - one in February or March and the second in August or September.
122 |
123 | Advertisement
124 |
125 | Advertisement
126 |
127 | It had planned to hold its first travel fair for the year last month but decided to postpone it to early-May due to the outbreak of COVID-19.
128 |
129 | In a statement on Wednesday (Mar 18), NATAS said it is now cancelling the event after carefully considering recent developments, which include travel advisories issued by Singapore and other countries, public health risk assessment and an uncertain travel sentiment.
130 |
131 | A “vast majority” of participating vendors were in favour of cancelling the event, it said, adding that it will offer a full rental refund to those vendors.
132 |
133 | NATAS is also reviewing the status of the travel fair scheduled in August.
134 |
135 | Advertisement
136 |
137 | Advertisement
138 |
139 | “(We) will decide in due course if we should call for a postponement or cancellation of the fair,” the statement said.
140 |
141 | The travel industry is among those hardest hit by the COVID-19 outbreak, as tourists stay away and locals cut back on overseas travel.
142 |
143 | Authorities have urged Singaporeans to defer all travel abroad amid a heightened risk of importing COVID-19 cases into the country.
144 |
145 | It was also announced on Wednesday that all Singaporeans, permanent residents, long-term pass holders and short-term visitors entering Singapore from 11.59pm on Friday will be issued a 14-day stay-home notice.
146 |
147 | Singapore reported a new daily high of 47 new COVID-19 cases on Wednesday, bringing the total number of confirmed cases in the country to 313.
148 |
149 | Download our app or subscribe to our Telegram channel for the latest updates on the COVID-19 outbreak: https://cna.asia/telegram",301,https://www.channelnewsasia.com/news/singapore/natas-travel-fair-may-cancelled-covid-19-outbreak-12556940?cid=fbcna
150 | CNA,2020-03-12,China's coronavirus epicentre Hubei sees single-digit cases for first time,"BEIJING: China confirmed only eight new coronavirus infections in Hubei province, the first time the epicentre of the epidemic recorded a daily tally in single-digits, as tough containment measures dramatically slow the spread of the virus in mainland China.
151 |
152 | The capital of Hubei, Wuhan, reported all eight new cases on Wednesday, the National Health Commission said on Thursday (Mar 12).
153 |
154 | Advertisement
155 |
156 | Advertisement
157 |
158 | The domestic spread of the disease has slowed markedly in the past seven days, a result of weeks of strict measures imposed to control the movement of people and traffic, including the virtual lockdown of Wuhan, a city of 11 million people.
159 |
160 | Outside of Hubei, mainland China had seven new cases, including six cases imported from abroad.
161 |
162 | Advertisement
163 |
164 | Advertisement
165 |
166 | Of the six imported cases, Guangdong province accounted for three, while Gansu province and Henan province were responsible for two and one, respectively.
167 |
168 |
169 |
170 | Overall, the 15 new confirmed cases in mainland China on Wednesday was a drop from 24 cases a day earlier.
171 |
172 |
173 |
174 | That brings the total number of confirmed cases recorded in mainland China to 80,793. As of Tuesday, 62,793 people have recovered and been discharged from hospital, or nearly 80 per cent of the overall infections.
175 |
176 | The death toll in mainland China had reached 3,169 as of the end of Wednesday, up by 11 from the previous day. Hubei accounted for 10 of the new deaths, including seven in Wuhan.
177 |
178 | The ruling Communist Party newspaper, the People's Daily, warned in an editorial that while the number of new virus cases in China is falling, conditions were still difficult and there were risks of further outbreaks.
179 |
180 | As the spread of the virus slows, China is focusing on restarting factories and businesses hit by strict containment policies which prevented millions of people from travelling and returning to work after extended China Lunar New Year holidays.
181 |
182 | Factory activity plunged to its worst level on record in February, and while more businesses have reopened in recent weeks as containment measures are eased, analysts do not expect activity to return to normal levels till April.
183 |
184 | Local governments must do their utmost to ensure people return to work as soon as possible, the official China Daily said in an editorial.
185 |
186 | Many businesses are still facing labour shortages and supply-chain disruptions, the China Daily said.
187 |
188 | ""The epidemic control measures have put an enormous strain on China's enterprises, especially the small and medium-sized ones in the service sector,"" it said.
189 |
190 | ""Any further delay in their return to normal operations will entail widespread bankruptcies and job losses, which will threaten social stability.""
191 |
192 | Download our app or subscribe to our Telegram channel for the latest updates on the COVID-19 outbreak: https://cna.asia/telegram",425,https://www.channelnewsasia.com/news/asia/coronavirus-china-hubei-wuhan-new-covid-19-cases-12529312?cid=FBcna
193 |
--------------------------------------------------------------------------------
/data/tamil_speeches.csv:
--------------------------------------------------------------------------------
1 | Date,Speaker,Title,Language,Text,URL
2 | 2020-04-30,Lee Hsien Loong,May Day Message 2020,Tamil,"இவ்வாண்டு, நாம் சிரமமான சூழ்நிலைகளுக்கு இடையில், மே தினத்தை அனுசரிக்கிறோம்.
3 | கொவிட்-19 தொடர்பான அண்மைத் தகவல்
4 | கொவிட்-19 நோய்ப் பரவலின் தீவிரம், உலகம் முழுவதிலும் தொடர்ந்துகொண்டே இருக்கிறது.
5 |
6 | சிங்கப்பூரில், நாம் நோய்ப் பரவலை முறியடிப்பதற்கான அதிரடித் திட்டத்தை அமல்படுத்தி, கிட்டத்தட்ட ஒரு மாதம் ஆகிவிட்டது.
7 |
8 | சமூகத்தில் ஏற்படும் கிருமித்தொற்று சம்பவங்கள், நாள் ஒன்றுக்கு 10 முதல் 15 எனக் குறைந்துள்ளன.
9 |
10 | நாம் கணிசமான முன்னேற்றத்தை அடைந்துள்ளோம். ஆனால், நாம் இன்னும் அதிகம் செய்யவேண்டும்.
11 |
12 | வெளிநாட்டு ஊழியர் தங்கும் விடுதிகளில், கிருமித்தொற்று சம்பவங்களின் எண்ணிக்கை இன்னும் அதிகமாக உள்ளன.
13 |
14 | நல்லவேளை! ஊழியர்கள், இளையர்களாக இருப்பதால், பெரும்பாலானோர் கடுமையாகப் பாதிக்கப்படவில்லை.
15 |
16 | இருப்பினும், அவர்களது சுகாதாரத்திற்காகவும் நலனுக்காகவும், நாங்கள், எங்களால் ஆன அனைத்தையும் செய்து வருகிறோம்.
17 |
18 | நாம், தங்கும் விடுதிகளுக்கு ஆதரவளிக்க, மருத்துவமனைகளிலிருந்து மருத்துவக் குழுக்களை அனுப்பிவைத்துள்ளோம்.
19 |
20 | நமது ஆகப் பெரிய கொவிட்-19 நோய்க் குழுமமான, பொங்கோலில் உள்ள S11 தங்கும் விடுதிக்கு, நமது ஆகப் புதிய மருத்துவமனையான செங்காங் பொது மருத்துவமனை ஆதரவளித்து வருகிறது.
21 |
22 | உண்மையில், S11 விடுதியில் உள்ள சில குடியிருப்பாளர்கள், செங்காங் மருத்துவமனையின் கட்டுமானப் பணிகளில் பணியாற்றியவர்கள்.
23 |
24 | மருத்துவமனையில் சேர்க்கப்பட்ட ஓர் ஊழியர், தாம் இருந்த அறையின் தரைக் கற்களைப் பதித்ததாக, தனது மருத்துவரிடம் கூறினார்.
25 |
26 | செங்காங் மருத்துவமனையின் மருத்துவக் குழுவினர், மனம் நெகிழ்ந்தனர்.
27 |
28 | அவர்கள் தங்களால் ஊழியர்களுக்கு, நேரடியாகத் திரும்பக் கொடுக்க முடிந்ததற்கு மகிழ்ச்சி அடைந்தனர்.
29 |
30 | மே தினம், வெளிநாட்டு ஊழியர்கள் உட்பட, அனைத்து ஊழியர்களுக்கும் ஒரு கொண்டாட்டம்.
31 |
32 | சிங்கப்பூரில் உள்ள அனைத்து வெளிநாட்டு ஊழியர்களுக்கும், நீங்கள் இங்கு ஆற்றிய பங்கிற்காக, நானும் எனது நன்றியையும் நல்வாழ்த்துகளையும் தெரிவித்துக்கொள்கிறேன்.
33 |
34 | அதிரடித் திட்டம் நடப்பிலிருக்கும் காலகட்டம் அனைவருக்கும் சிரமமாக உள்ளது என்று எனக்குத் தெரியும்.
35 |
36 | கட்டுப்பாடுகள், வர்த்தகங்களையும் வேலைகளையும் பாதித்து, கணிசமான அசெளகரியத்தை ஏற்படுத்தியுள்ளன.
37 |
38 | ஆனால், நீங்கள் மீள்திறனுடன், இதனைச் சமாளித்து வந்திருக்கிறீர்கள்.
39 |
40 | குறிப்பாக, அத்தியாவசிய சேவைகளில் பணிபுரியும் நமது சகோதர சகோதரிகளுக்கு, நான் மிகவும் நன்றிக்கடன்பட்டுள்ளேன். அவர்கள், சிங்கப்பூரைத் தொடர்ந்து இயங்கச் செய்துள்ளார்கள்.
41 |
42 | நமது சுகாதாரப் பராமரிப்புத் துறையினர், உள்துறைக் குழுவினர், சிங்கப்பூர் ஆயுதப் படையினர் மற்றும் மனிதவள அமைச்சின் அதிகாரிகள்.
43 |
44 | நமது பொதுப் போக்குவரத்து ஊழியர்கள், பாதுகாப்பு அதிகாரிகள், துப்புரவாளர்கள், சமூக சேவைத் துறையினர், விநியோக ஓட்டுநர்கள் மற்றும் டாக்சி ஓட்டுநர்கள்.
45 |
46 | நமது ஆசிரியர்கள், வீட்டிலிருந்தே கற்கும் நடைமுறையைச் செயல்படுத்த, கடுமையாக உழைத்திருக்கிறார்கள். பாலர் பள்ளி ஆசிரியர்களும் கூட.
47 |
48 | நீங்கள் அனைவரும், தியாகங்கள் புரிந்து, கடமைக்கு அப்பால் செயல்பட்டிருக்கிறீர்கள்.
49 |
50 | உங்கள் குடும்பத்தினரும், உங்களுக்குப் பக்கபலமாக இருந்து, உங்களுக்கு ஆதரவு தந்துள்ளனர்.
51 |
52 | நான் உங்கள் அனைவருக்கும் நன்றி கூற விரும்புகிறேன்.
53 | உடனடி நெருக்கடியைச் சமாளித்தல்
54 | இந்த நோய்ப் பரவல், உலகப் பொருளியலைப் பெரிதும் பாதித்துள்ளது.
55 |
56 | 1930-களின் மாபெரும் பொருளியல் வீழ்ச்சிக்குப் பிறகு, உலகளாவிய மொத்த உள்நாட்டு உற்பத்தி ஆக மோசமான சரிவை அடையும் என்று அனைத்துலகப் பண நிதியம் முன்னுரைத்துள்ளது.
57 |
58 | உலகத் தொடர்புடைய ஒரு பொருளாதாரமாக, சிங்கப்பூர் இந்த சரிவின் பாதிப்பை முழுமையாக உணர்ந்துள்ளது.
59 |
60 | நமது உயிர்நாடியான வர்த்தகமும் முதலீடும் பாதிக்கப்பட்டுள்ளன.
61 |
62 | உதவியின்றி, நல்ல நிறுவனங்கள், பெரிதோ சிறிதோ, பாதிக்கப்படலாம்; பல ஊழியர்கள் தங்கள் வேலைகளை இழக்கக்கூடும்.
63 |
64 | உலகம் முழுவதிலும் உள்ள அரசாங்கங்கள், அவற்றின் பொருளியல்கள் வீழ்ச்சியடைவதைத் தவிர்க்கவும், அவற்றின் மக்களைக் கவனித்துக்கொள்ளவும், பெருந்தொகைகளைச் செலவிடுகின்றன.
65 |
66 | சிங்கப்பூரும், ஒன்றிணைக்கும், மீட்சிக்கான மற்றும் ஒற்றுமைக்கான வரவுசெலவுத் திட்டங்களின் மூலம், அவ்வாறே செய்துள்ளது – ஒட்டுமொத்தமாக 60 பில்லியன் வெள்ளி.
67 |
68 | ஆனால், மற்ற அரசாங்கங்களைப் போன்று, நாம் கடன் வாங்கத் தேவையில்லை.
69 |
70 | அதிபரின் அனுமதியுடன், நாம், நமது தேசியக் கையிருப்புகளிலிருந்து பணம் பெறுகிறோம்.
71 |
72 | நமது கையிருப்புகள் ஒரு வரம். அதற்காக, நாம், நமது முன்னோர்களின் விழுமியங்கள், கட்டுப்பாடு, தொலைநோக்கு சிந்தனை ஆகியவற்றுக்கு நன்றி தெரிவிக்கவேண்டும்.
73 |
74 | அமைதியான காலங்களில், நாம் நமது கையிருப்புகளை அதிகரிக்க, கவனமாகவும் சிக்கனமாகவும் இருக்கவேண்டும் என்பதற்கு, இந்த நெருக்கடி, உண்மையில் நமக்கு ஒரு நினைவுறுத்தல். அப்போதுதான், உண்மையிலேயே சிரமமான காலகட்டங்களில், நமக்குத் துணைபுரிய கூடுதலான வளங்கள் இருக்கும்
75 |
76 | நாம் கையிருப்புகளைப் பயன்படுத்தி, வேலைகளைக் காப்பாற்றியுள்ளோம்; நிறுவனங்களுக்குச் செலவுகளைக் குறைக்கவும், சிங்கப்பூரர்கள் இந்த நெருக்கடிக் காலத்தை எதிர்கொள்ளவும் உதவியுள்ளோம்
77 |
78 | தொடர் வரவுசெலவுத் திட்டங்களில், நாம், வேலை ஆதரவுத் திட்டத்தை மேம்படுத்தியுள்ளோம்.
79 |
80 | தற்போதைக்கு, அரசாங்கம், அனைத்துத் துறைகளிலும் சம்பளத் தொகையில், முதல் $4,600-இல் முக்கால்வாசித் தொகையைச் செலுத்துகிறது.
81 |
82 | நிறுவனங்கள் அவற்றின் உள்ளூர் ஊழியர்களைத் தக்கவைத்துக்கொள்ள இது உதவியுள்ளது.
83 |
84 | ஆனால், வர்த்தகங்களுக்கு இதர செலவுகளும் உள்ளன.
85 |
86 | மிகை நேரப் பணி இல்லாததால் அல்லது நேரடி சம்பளக் குறைப்பினால், பல ஊழியர்களின் சம்பளம் தொடர்ந்து குறைக்கப்படலாம்.
87 |
88 | இது தவிர்க்க முடியாதது.
89 |
90 | எனினும், முதலாளிகளும் ஊழியர்களும் நீண்டகால நோக்கத்தைக் கொண்டிருக்கவேண்டும் என்று நான் கேட்டுக்கொள்கிறேன்.
91 |
92 | வர்த்தகங்கள் தொடர்ந்து இயங்க, ஊழியர்கள் சம்பளக் குறைப்பை ஏற்றுக்கொள்ளவேண்டும்.
93 |
94 | முதலாளிகள், தங்கள் ஊழியர்களைத் தக்கவைத்துக்கொள்ளவும், அவர்களுக்கு இந்த சிரமமான காலகட்டத்தில் உதவவும், அனைத்து முயற்சிகளையும் மேற்கொள்ளவேண்டும்.
95 |
96 | பிரச்சனைகள் தலைதூக்கிய உடனேயே, அவர்கள் ஊழியர்களைக் கைவிடக்கூடாது.
97 |
98 | இந்த வகையில், ஊழியர்கள் அந்த கருணையை நினைவில் கொண்டு, உண்மையாக சேவையாற்றி, அவர்களின் வர்த்தகம் தொடர்ந்து செயல்பட உதவுவார்கள்.
99 |
100 | பொருளியல் மீட்சியடையத் தொடங்கும்போது, நிறுவனங்களும் அவற்றை மறுநிர்மாணம் செய்துகொள்ள மேம்பட்ட நிலையில் இருக்கும்.
101 | பொருளியலை மீண்டும் இயங்கச் செய்தல்
102 | நாம், கொவிட்-19 கிருமித்தொற்று சம்பவங்களைக் குறைத்த பின்னர், நாம், அதிரடித் திட்டத்தின் கட்டுப்பாடுகளைத் தளர்த்த முடியும்; படிப்படியாக, நமது பொருளியலை மீண்டும் இயங்கச் செய்ய முடியும்.
103 |
104 | இது எளிதாக இருக்காது
105 |
106 | நாம், கொவிட்-19 கிருமித்தொற்றுக்கான பரிசோதனைகளை அதிகரிக்கவேண்டும்; தொடர்புகளின் தடங்களைக் கண்டறிவதைத் துரிதப்படுத்தவேண்டும்.
107 |
108 | கிருமித்தொற்று சம்பவங்கள் மீண்டும் தலைதூக்காமல் இருக்க, நாம் பாதுகாப்பு நடவடிக்கைகளுடன் மிகவும் கவனமாகச் செயல்படவேண்டும்.
109 |
110 | நாம், அத்தியாவசிய சேவைகளைத் தொடர்ந்து இயங்கச் செய்திருக்கிறோம்.
111 |
112 | ஆனால், மற்றத் துறைகள், ஒரே நேரத்தில் அல்லாமல், படிப்படியாகவே செயல்படத் தொடங்கும்.
113 |
114 | சில தொழில்துறைகள், மற்றதைவிட, முன்கூட்டியே திறக்கப்பட்டு, விரைவில் மீட்சி காணும்.
115 |
116 | எடுத்துக்காட்டாக, உள்ளூரில், நமது பொருளாதாரத்தைத் தொடர்ந்து இயங்கச் செய்வதற்கு முக்கியமான துறைகள்.
117 |
118 | மற்றும் நம்மை உலகத்தோடும் உலகளாவிய விநியோகத் தொடரோடும் இணைக்கும் துறைகள்.
119 |
120 | மற்றத் துறைகள் காத்திருக்கவேண்டும். குறிப்பாக, பொழுதுபோக்குக் கூடங்கள், பெரிய அளவிலான விளையாட்டு நிகழ்வுகள் போன்று, கூட்டத்தை ஈர்க்கும் துறைகள் அல்லது மக்கள் பிறருடன் நெருங்கிய தொடர்பை ஏற்படுத்தும் துறைகள்.
121 |
122 | நாம், வெவ்வேறு துறைகள் அனைத்தையும் கட்டுக்கோப்பாக வைத்திருந்து, நிலைமை சீராகும்போது, வர்த்தகம் தொடங்க அவை ஆயத்தமாக இருப்பதற்கு வகைசெய்யவேண்டும்.
123 |
124 | இதற்கு நிறுவனங்கள், ஊழியர்கள், அரசாங்கம் ஆகியவற்றிடையே அணுக்கமான ஒத்துழைப்பு தேவைப்படுகிறது.
125 |
126 | அநேகமாக, மற்றத் துறைகளைக் காட்டிலும், சுற்றுப்பயணத் துறையும் விமானப் போக்குவரத்துத் துறையும் மீட்சி அடைய நீண்டகாலம் தேவைப்படும். ஏனெனில், கொவிட்-19 கிருமித்தொற்று, உலகம் முழுவதிலும் ஒரு பிரச்சனையாக இருக்கும் வரையில், அனைத்துலகப் பயணம் தொடர்ந்து கட்டுப்படுத்தப்படும்.
127 |
128 | சிங்கப்பூர், உலகளாவிய, வட்டார நடுவமாகத் திகழ்வதற்கு, விமானப் போக்குவரவு மிகவும் அடிப்படையானது.
129 |
130 | அது முக்கியத்துவம் வாய்ந்த ஒரு துறை.
131 |
132 | இதனால்தான், அரசாங்கம், விமானப் போக்குவரத்திற்குக் கூடுதல் ஆதரவை வழங்கி வருகிறது.
133 |
134 | சிங்கப்பூர் ஏர்லைன்ஸ் குழுமம் கடுமையாகப் பாதிக்கப்பட்டுள்ளது.
135 |
136 | நமது தேசிய விமான சேவை நிறுவனமாக, சிங்கப்பூர் ஏர்லைன்ஸ், கொவிட்-19 கிருமித்தொற்றுக்கு எதிரான நமது முயற்சிகளுக்கு ஆதரவளித்துள்ளது.
137 |
138 | அத்தியாவசியப் பொருட்களை விமானம் மூலம் கொண்டுவருவதற்கு அது உதவியுள்ளது.
139 |
140 | சிங்கப்பூரர்களைத் தாய்நாட்டிற்கு அழைத்துவர, விமான சேவைகளை அது செயல்படுத்தியுள்ளது.
141 |
142 | அதன் விமானச் சிப்பந்திகள், பரிவுத் தூதர்களாக மருத்துவமனைகளிலும், பாதுகாப்பான தூர இடைவெளித் தூதர்களாக ரயில்கள், சந்தைகள், கடைத்தொகுதிகள் ஆகியவற்றிலும் சேவையாற்றுகிறார்கள்.
143 |
144 | ஆனால், பெரும்பாலான மற்ற விமான சேவை நிறுவனங்களைப் போன்று, பெரும்பாலான சிங்கப்பூர் ஏர்லைன்ஸ் விமானங்கள் சிறிது காலத்திற்கு இயங்கமாட்டா.
145 |
146 | சிங்கப்பூர் ஏர்லைன்ஸ் நிறுவனத்தின் நிர்வாகத்தினர், சம்பளக் குறைப்பை ஏற்றுக்கொண்டுள்ளனர்.
147 |
148 | தொழிற்சங்கங்களும் ஊழியர்களும் கூட, தியாகங்கள் செய்துள்ளனர்.
149 |
150 | சிங்கப்பூர் ஏர்லைன்ஸ் நிறுவனத்தில் அனைவரும், நிறுவனம் அதன் ஆகப் பெரிய நெருக்கடியை எதிர்கொள்கிறது என்பதைப் புரிந்துகொண்டுள்ளனர்.
151 |
152 | நிறுவனம் தொடர்ந்து இயங்குவதற்கு உதவ, அவர்கள் அனைவரும் தங்கள் பங்கை ஆற்றுகின்றனர்.
153 |
154 | சிங்கப்பூர் ஏர்லைன்ஸ் இந்த நெருக்கடியைக் கடந்துசெல்லும் என்பதில் அரசாங்கம் உறுதி கொண்டுள்ளது.
155 |
156 | சிங்கப்பூர் ஏர்லைன்ஸ் எப்போதுமே சிங்கப்பூரின் புகழை உலகம் முழுவதும் நிலைநாட்டி, நமக்குப் பெருமை சேர்த்துள்ளது.
157 |
158 | அவ்வாறு அது மீண்டும் செய்வதற்கு வகைசெய்ய, நாம் ஆன அனைத்து முயற்சிகளையும் மேற்கொள்வோம்.
159 | கட்டமைப்பு ரீதியான மாற்றங்கள்
160 | நீண்டகாலத்தில், கொவிட்-19 கிருமித்தொற்று, உலகப் பொருளியலில் நிச்சயமாகப் பல மாற்றங்களை ஏற்படுத்தும்.
161 |
162 | பொருட்கள், மக்களின் நடமாட்டத்தில் கூடுதல் கட்டுப்பாடுகள் இருக்கும்.
163 |
164 | உணவு, மருந்துகள், முகக் கவசங்கள் போன்ற அத்தியாவசியப் பொருட்களுக்கு, இறக்குமதிகளைச் சார்ந்திருப்பதைக் குறைத்துக்கொள்ள நாடுகள் முற்படும்.
165 |
166 | இது, உலக வர்த்தகத்திலும் முதலீடுகளிலும் பெரும் தாக்கத்தை ஏற்படுத்தும். சிங்கப்பூரும் அதனை உணரும்.
167 |
168 | கட்டமைப்பு ரீதியான கணிசமான மாற்றங்கள், நமது பொருளியலில் ஏற்படக்கூடும்.
169 |
170 | சில தொழில்துறைகள் நிரந்தரமாகப் பாதிக்கப்படும்.
171 |
172 | நிறுவனங்கள் நீடித்திருப்பதற்கு, அவற்றின் வர்த்தக முறைகளை மாற்றிக்கொள்ளவேண்டும்.
173 |
174 | சில வேலைகள் இல்லாமல் போய்விடும்.
175 |
176 | இந்தத் தொழில்துறைகளில் உள்ள ஊழியர்கள், புதிய துறைகளில் வேலை செய்வதற்காக, புதுத் திறன்களைப் பெறவேண்டும்.
177 |
178 | ஆனால், புதிய வாய்ப்புகளும் இருக்கும்; புதிய வேலைகளும் உருவாக்கப்படும்.
179 |
180 | உதாரணத்திற்கு, அதிரடித் திட்டத்தின்போது, மக்கள் தங்களை மாற்றிக்கொண்டுள்ளனர்.
181 |
182 | நாம், வீட்டிலிருந்து பணிபுரிவதற்கும், தொலைத்தொடர்பு வசதிகள் மூலம் பிறருடன் வேலை செய்வதற்கும் கற்றுக்கொண்டுள்ளோம்.
183 |
184 | மாணவர்கள், இணையம்வழிக் கற்றலுக்குப் பழக்கப்பட்டு வருகின்றனர்.
185 |
186 | அதிகமானோர், பொருட்களை இணையம்வழி வாங்குகிறார்கள்; மின்னியல் முறையில் கட்டணம் செலுத்துகிறார்கள்.
187 |
188 | அதிரடித் திட்டம் நிறைவடைந்த பின்னர், நாம் முன்னைய நிலைக்குத் திரும்பிவிட மாட்டோம்.
189 |
190 | இந்தப் புதுவகை செயல்பாடுகளில், வாய்ப்புகள் இருக்கும் என்பதே அதற்கு அர்த்தம்.
191 |
192 | மருத்துவ சேவைகள், உயிரியல் தொழில்நுட்பம், உணவு உற்பத்தி மற்றும் விநியோகம், தகவல் தொழில்நுட்பம் முதலான மற்ற தொழில்துறைகளும் வளர்ந்து வருகின்றன.
193 |
194 | இன்றும், பல நிறுவனங்கள் இவற்றுக்கான தேவையை உணர்ந்து, அதிகமானோரை வேலைக்கு எடுக்கின்றன.
195 |
196 | இந்தப் புதிய, வளர்ந்துவரும் துறைகள் சிலவற்றில் நமக்குத் திறமைகள் உண்டு.
197 |
198 | மற்றத் துறைகள், நமக்குப் புதிதாக இருக்கும். நாம், நமது நிபுணத்துவத்தையும் ஊழியர் அணியையும் மேம்படுத்திக்கொள்ளவேண்டும்.
199 |
200 | நிறுவனங்கள், இந்தப் புதிய செயல்பாட்டுச் சூழலுக்கு அவற்றை மாற்றிக்கொள்ளவும், புதிய வேலைகளுக்காக ஊழியர்களுக்கு மறுபயிற்சி அளிக்கவும், நாம் உதவுவோம்.
201 |
202 | நாம், பெரிய அளவில் ஊழியர்களுக்குப் பயிற்சி அளிக்க, ஸ்கில்ஸ்ஃபியூச்சர் பயிற்சித் திட்டங்களை விரிவுபடுத்துவோம்.
203 |
204 | தேசியத் தொழிற்சங்கக் காங்கிரஸ், வேலை இழந்த ஊழியர்களுக்குப் பயிற்சி அளித்து, புதிய வேலை வாய்ப்புகளுடன், அவர்களை இணைப்பதற்காக, வேலைப் பாதுகாப்பு மன்றத்தை நிறுவியுள்ளது.
205 |
206 | நாம், தற்காலிக ஊழியர்களைக் கொண்டு இயங்கும் பொருளியலில், தன்னுரிமைத் தொழில்புரிவோரைப், பொருளியலின் நிச்சயமற்ற தன்மையிலிருந்து பாதுகாக்க, புதிய வழிகளைக் கண்டறிவோம்.
207 |
208 | நம்மால் ஒவ்வொரு வேலையையும் காப்பாற்ற முடியாது. ஆனால், நாம் ஒவ்வொரு ஊழியரையும் கவனித்துக்கொள்வோம்.
209 |
210 | கொவிட்-19 கிருமித்தொற்றுக்குப் பிந்திய உலகிற்கு மாறவேண்டிய கட்டாயத்தில், சிங்கப்பூர் தனித்திருக்கவில்லை.
211 |
212 | ஆனால், நமது சவால், பெரும்பாலான நாடுகளை விட, மேலும் பெரியது. ஏனெனில், நாம், உலகமயமாகிவிட்ட, மிகவும் சிறிய நாடு.
213 |
214 | இருப்பினும், இவை நமக்குச் சாதகமான அம்சங்களும் கூட.
215 |
216 | நமது சிறிய தோற்றம், நம்மைச் சுறுசுறுப்பாக இயங்க வகைசெய்கிறது.
217 |
218 | நமது உலகத் தொடர்புத்தன்மை, வளர்ச்சிக்கான புதிய அம்சங்களை விரைவில் கண்டறிந்து, அவற்றில் இணைய உதவும்.
219 |
220 | மிக முக்கியமாக, வெற்றிபெறுவதற்கான திறமை நம்மிடம் உள்ளது.
221 |
222 | நமக்குப் பொருளியல் மறுசீரமைப்பில் அனுபவம் உள்ளது. இந்த நிலையை அடைவதற்கு, நாம் அதனை ஒன்றுக்கும் மேற்பட்ட முறை செய்திருக்கிறோம்.
223 |
224 | நம்மிடம், வர்த்தகங்களுக்கு ஆதரவளிப்பதற்கும், ஊழியர் அணியில் முதலீடு செய்வதற்கும், நமது மக்களைக் கவனித்துக்கொள்வதற்கும் வளங்கள் உள்ளன.
225 |
226 | இத்தனை ஆண்டுகளாக வலுப்படுத்திய, நமது முத்தரப்புப் பங்காளித்துவமும் நம்மிடம் உள்ளது.
227 |
228 | நல்ல காலங்களிலும், சிரமமான காலங்களிலும், முதலாளிகள், தொழிலாளர் இயக்கம், தேசியத் தொழிற்சங்க காங்கிரஸ், அரசாங்கம் ஆகியன, அணுக்கமாகப் பணியாற்றுகின்றன.
229 |
230 | விசுவாசம், நம்பிக்கை, முன்பு கடந்தவந்த பாதையால் உருவான தோழமை ஆகியவற்றால் பிணைந்துள்ளோம்
231 |
232 | நாம் ஒரு தேசமாக ஒன்றிணைந்து எவ்வாறு பாடுபடுகிறோம், பாதிப்புக்கு ஆளாகக்கூடியவர்களை எவ்வாறு பாதுகாக்கிறோம், யாரும் பின்தங்கிவிடாமல் எவ்வாறு பார்த்துக்கொள்கிறோம் என்பதற்கு முத்தரப்புப் பங்காளித்துவம் ஒரு முக்கிய உதாரணம்.
233 |
234 | இதனால்தான், இந்தக் கிருமி, மற்ற நாடுகளில் பரவத் தொடங்கியபோது, வெளிநாட்டில் இருந்த சிங்கப்பூரர்களைக் கைவிடாமல், நாம் அவர்களைத் தாய்நாட்டிற்குத் திரும்ப அழைத்து வந்தோம்.
235 |
236 | இதனால்தான், நமக்கு அதிகம் பங்காற்றியுள்ள வெளிநாட்டு ஊழியர்கள் மீது, சிங்கப்பூரர்கள் மீது காட்டும் அதே அக்கறையை நாம் காட்டுகிறோம்.
237 |
238 | இதனால்தான், பணிநீக்கங்களைத் தடுப்பதற்கும், குறைந்த வருமானம் ஈட்டுவேரை ஆதரிப்பதற்கும், நமது கையிருப்புகளிலிருந்து பணம் பெற, முன்னெப்போதும் எடுக்கப்படாத நடவடிக்கைகளை எடுத்துள்ளோம்.
239 | முடிவுரை
240 | மீட்சிக்கான பாதை நீண்டதாகவும் சிரமமானதாகவும் இருக்கும்.
241 |
242 | அதிரடித் திட்டம் முடிவுக்கு வந்தவுடன் அல்லது கிருமித்தொற்று சம்பவங்களின் எண்ணிக்கை குறைந்தவுடன், அனைத்தும் சீராகிவிடும் என்ற மாயையை நாம் கொண்டிருக்கக்கூடாது.
243 |
244 | நாம் சிரமத்தில் துவண்டுபோகும் மக்கள் அல்ல.
245 |
246 | இந்த நிலைக்கு வருவதற்கு நாம் இரத்தம், வியர்வை, கண்ணீர் சிந்தியிருக்கிறோம்.
247 |
248 | சுதந்திரத்திற்கான போராட்டத்தில், நெருக்கடி மிகுந்த காலகட்டங்களில், முன்னோடித் தலைமுறையினர் தங்களது துணிவையும் மன உறுதியையும் வெளிப்படுத்தினர்.
249 |
250 | தங்களுக்கும் தங்கள் சந்ததியினருக்கும் ஓர் எதிர்காலத்தை உருவாக்க, தங்களால் ஆன அனைத்தையும் செய்ய அவர்கள் முடிவெடுத்தனர்.
251 |
252 | மெர்டேக்கா தலைமுறையினர் அவர்களுடன் பணியாற்றி, நம்மை மூன்றாம் உலக நாடு என்ற நிலையிலிருந்து, முதலாம் உலக நாடு என்ற நிலைக்கு உயர்த்தினர்.
253 |
254 | அவர்கள் சிரமங்களை எதிர்கொண்டு வெற்றி கண்டதால், இன்றைய சிங்கப்பூர் நம் வசம் உள்ளது.
255 |
256 | கொவிட்-19 கிருமித்தொற்று, இந்தத் தலைமுறைக்கான சவால்.
257 |
258 | அந்தக் கிருமி, கடுமையான ஓர் எதிரி – கண்ணுக்குத் தெரியாவிடினும், வலிமை மிக்கது.
259 |
260 | நமது முன்னோர்கள் விட்டுச்சென்றதைக் கட்டிக்காக்க நாம் திறமையானவர்கள் என்பதை நிரூபிப்பதற்கும், நாம் எதிர்கொண்டுள்ள சவாலைக் கடந்துசெல்வதற்கும், நமக்கான நேரம் இது.
261 |
262 | எதிர்பார்த்ததைவிட நாம் சிறப்பாகச் செயல்படுவோம் என்ற எல்லா நம்பிக்கையும் எனக்கு உள்ளது.
263 |
264 | அனைத்து சிங்கப்பூரர்களுக்கும், ஆரோக்கியமும் மகிழ்ச்சியும் நிறைந்த மே தின வாழ்த்துகளை நான் தெரிவித்துக்கொள்கிறேன்.",https://www.pmo.gov.sg/Newsroom/PM-Lee-Hsien-Loong-May-Day-Message-2020-Tamil
265 | 2020-08-09,S Iswaran,National Day Message 2020,Tamil,"ஒவ்வோர் ஆண்டும், மழையோ வெயிலோ, ஆகஸ்ட் 9-ஆம் தேதி, தேசிய தின அணிவகுப்புக்காக சிங்கப்பூரர்கள் ஒன்றுகூடுவார்கள்; நமது தேசம் உருவானதைக் கொண்டாடுவார்கள்; சிங்கப்பூருக்கான கடப்பாட்டைப் புதுப்பித்துக்கொள்வார்கள்.
266 |
267 | தேசிய தின அணிவகுப்பு
268 | 1968-ஆம் ஆண்டு முதல், கிட்டத்தட்ட ஒவ்வொரு தேசிய தின அணிவகுப்பையும் பார்க்கும் வாய்ப்பு எனக்குக் கிடைத்துள்ளது. நான் கலந்துகொண்ட அணிவகுப்புகளில் ஒன்று, 1968-ஆம் ஆண்டு பாடாங்கில் நடைபெற்றது. அப்போது, அடைமழை பெய்தது. எனினும், மிடுக்காக நடைபெற்றது அணிவகுப்பு; மழையால் மக்கள் மனம் தளரவில்லை. சிங்கப்பூரர்கள், துன்பத்திலும் துவண்டு போகாத மனவுறுதி படைத்தவர்கள் என்பதை எடுத்துக்காட்டினோம். ஐந்து ஆண்டுக்கு முன்னர் நடந்த SG50 அணிவகுப்பு, மற்றுமொரு மறக்கமுடியாத அனுபவம். நாம், நமது பொன் விழாவையும் சிங்கப்பூர் சாதித்தவற்றையும் கொண்டாடினோம். நமது முதல் பிரதமர், லீ குவான் யூ அவர்களுக்கும் அஞ்சலி செலுத்தினோம். அதே வேளையில், அவரும் முன்னோடித் தலைவர்களும் கொண்டிருந்த இலட்சியங்களை மறு-உறுதிப்படுத்தினோம்.
269 |
270 | நல்ல காலங்களில், நமது அணிவகுப்புகள், முன்னேற்றத்தைக் கொண்டாடின; ஒளிமயமான எதிர்காலத்தை நோக்கி ஒன்றாக நடைபோட்டன.
271 |
272 | சிரமமான காலகட்டங்களிலும், நாம் தேசிய தின அணிவகுப்பை நடத்துகிறோம்; சிரமங்களைக் களைவதற்கான நமது மனவுறுதியைப் புதுப்பித்துக்கொண்டோம் – மேம்பட்ட எதிர்காலம் நோக்கிச் சிங்கப்பூரை அழைத்துச் செல்வதற்கு.
273 |
274 | இந்த ஆண்டு, கொவிட்-19 சூழலுக்கு இடையில் தேசிய தினம் இடம்பெறுகிறது. அதனால், எப்போதும் போல் நம்மால் கொண்டாட முடியவில்லை. இருப்பினும் வழக்கம்போல், இந்த ஆண்டும் அணிவகுப்பைத் தொடர்ந்து நடத்த நாம் உறுதி கொண்டுள்ளோம். இது நமது ஒற்றுமையின் அடையாளம். இன்று காலையில், பாடாங்கில் சிறிய அளவில் அணிவகுப்பும், தீவின் ஏழு இடங்களில் இதர கொண்டாட்டங்களும் நடைபெறுகின்றன. ஒவ்வோர் இடமும், கொவிட்-19 கையாளப்பட்ட விதத்தைப் பிரதிபலிக்கும். தொற்று நோய்களுக்கான தேசிய நிலையத்தில், சிங்கப்பூரர்களுக்கு மருத்துவப் பராமரிப்பு வழங்குகிறோம். வாழ்நாள் கற்றல் நிலையத்தில், நமது ஊழியர் அணிக்குத் திறன்களையும் வேலைகளையும் வழங்கி ஆதரிக்கிறோம். நார்த் விஸ்டா உயர்நிலைப்பள்ளியில், நமது மாணவர்களுக்கான கற்றலை தொடர்ந்து வழிநடத்துகிறோம். கம்போங் அட்மிரல்டியில் நமது சமூக உணர்வைக் கட்டிக் காக்கின்றோம். தேசிய தின அணிவகுப்புக் கொண்டாட்டங்களில், சிங்கப்பூர் முழுவதிலும் வெளிநாடுகளிலும் உள்ள எல்லா சிங்கப்பூரர்களும் ஒன்றாய்ச் சேர்ந்து மெய்நிகர்த் தொடர்பின் வழி கலந்துகொள்வர் என்று ஆவலுடன் எதிர்பார்க்கிறோம். சிவப்புச் சிங்கங்களின் சாகசப் படைப்பு, குடியிருப்புகளில் இராணுவ வாகன அணி ஊர்வலம், நாட்டின் கொடி விண்ணில் கம்பீரமாகப் பறந்து செல்லும் காட்சி ஆகியவை நம்மைப் பரவசப்படுத்தும் சிறப்பான தருணங்கள். நாம் அனைவரும் ஒன்றிணைந்து, நமது உள்ளங்களில், நம் உறுதிமொழியைக் கூறுவோம்; தேசிய கீதத்தைப் பாடுவோம்.
275 |
276 | அன்றாட செயல்வீரர்களின் கதைகள்
277 | இந்தத் தேசிய தினம், கொவிட்-19 நோயை எதிர்த்துப் போராடும் நமது முன்னிலை ஊழியர்களைப் பாராட்டுவதற்கு ஒரு வாய்ப்பை வழங்கி இருக்கிறது.
278 |
279 | அவர்களில் பலர், தங்கள் கடமைக்கு அப்பால் சென்று, தங்கள் பெருந்தன்மையான குணத்தை வெளிப்படுத்தி உள்ளனர். ஓய்வு பெற்ற மருத்துவர்களும் தாதியரும் மீண்டும் சேவையாற்ற முன்வந்தனர். அவர்கள், தனிநபர் பாதுகாப்பு சாதனங்களை அணிந்துகொண்டு, மருத்துவமனைகளிலும் வெளிநாட்டு ஊழியர் தங்கும் விடுதிகளிலும் முன்னணியில் பணியாற்றினர். கொவிட்-19 செயல்பாடுகளுக்கு ஆதரவளிக்க, முழு நேர தேசிய சேவையாளர்கள் தங்கள் சேவைக் காலத்தை நீட்டித்துக்கொண்டனர். அரசாங்க ஊழியர்கள் தங்கள் வேலைகளை மாற்றிக்கொண்டு, வெளிநாட்டு ஊழியர்களைக் கவனித்துக்கொள்ள முன்வந்தனர். பல சிங்கப்பூரர்களும் உதவிக்கரம் நீட்டினர். சிலர், முதியோருக்கும் குறைந்த வருமானக் குடும்பங்களுக்கும் உணவுகளையும் மளிகைப் பொருட்களையும் விநியோகிக்க, வீடு வீடாகச் சென்றனர். மற்றும் சிலர், வசதி குறைந்த மாணவர்களுக்கு மடிகணினிகளை நன்கொடையாக அளித்தனர். பொதுநல எண்ணம் கொண்ட ஆயிரக்கணக்கான சிங்கப்பூரர்கள், சுகாதாரப் பரிசோதனை மேற்கொள்வதற்கான பயிற்சியைப் பெற முன்வந்தனர். வெளிநாட்டு ஊழியர் தங்கும் விடுதிகள், சமூகப் பராமரிப்பு வசதிகள் உள்ளிட்ட கிருமித்தொற்று அதிகம் ஏற்பட்ட இடங்களில் சேவையாற்றினர். இவற்றுக்கு ஆதரவளிக்க, வெளிநாட்டு ஊழியர்களும் தங்கள் பங்கை ஆற்றினர். அவர்களது உதவியை, சிங்கப்பூர் ஆயுதப் படை, உள்துறைக் குழு, அரசாங்க அதிகாரிகள் ஆகியோர் பெரிதும் பாராட்டினர்.
280 |
281 | இந்தத் தன்னலமற்ற செயல்கள், கொவிட்-19 நோய்க்கு எதிரான நமது போராட்டத்திற்கு பேருதவி புரிந்தன.
282 |
283 | எதிர்வரும் பொருளியல் சவால்களைச் சமாளித்தல்
284 | இந்த ஒற்றுமையும் மீள்திறனும் முன் எப்போதும் இல்லாத அளவிற்கு நமக்குத் தேவை. தற்போதைய நெருக்கடி முடிவுக்கு வர நெடுங்காலம் பிடிக்கும். பல நாடுகள் கொவிட்-19 நிலவரத்தைச் சமாளித்து, கட்டுப்பாடுகளைத் தளர்த்தின. ஆனால், கிருமித்தொற்று அங்கு மீண்டும் தலைதூக்கியது. நமக்கும் இது நடக்கலாம்; நாம் கவனமாக இருந்தாலும் கூட. தடுப்பூசி கிடைப்பதற்கும் கிருமியை முறியடிப்பதற்கும், ஒன்று அல்லது இரண்டு ஆண்டுகள் ஆகலாம். அதுவரை நம்மையும், நம் அன்புக்குரியவர்களையும், நம் அண்டைவீட்டாரையும் பாதுகாப்பாக வைத்திருக்க, நாம் விழிப்பாக இருக்கவேண்டும்.
285 |
286 | பொருளியல் மந்தமடைந்தாலும், அதிலிருந்து மீளும் உறுதியை நாம் கைவிடக்கூடாது. சிங்கப்பூரர்களின் கவலை புரிகிறது. வரும் மாதங்களில், அதிகமான தொழில்கள் மூடப்படலாம்; ஆட்குறைப்பு நடவடிக்கைகள் அதிகரிக்கலாம்; அதிகமானோர் வேலைகளை இழக்கலாம்.
287 |
288 | ஆனால், இத்தகைய பொருளியல் நெருக்கடி ஏற்படுவது, இது முதல்முறையல்ல. ஆசிய நிதி நெருக்கடி (1997 – 1998); செப்டம்பர் பதினொன்று பயங்கரவாதத் தாக்குதல் (2001); உலக நிதி நெருக்கடி (2007 – 2009). ஒவ்வொரு நெருக்கடியும் நம்மை அச்சுறுத்தியது. ஒவ்வொரு முறையும், நாம் ஆக மோசமான விளைவுகளை எண்ணி பயந்தோம். அதே சமயம், நம் நிலையைப் பாதுகாக்க, நாம் கடுமையாக உழைத்தோம்; ஒற்றுமையாக மீண்டு வந்தோம்.
289 |
290 | கூடுதல் காலம் பிடித்தாலும், இந்த நெருக்கடியையும் நாம் கடந்து செல்வோம் என்ற நம்பிக்கை எனக்கு உண்டு. அதற்கு நாம் ஒவ்வொருவரும் நமது பங்கை ஆற்றவேண்டும். அரசாங்கம், புதிய வேலைகளைத் தேடவும் புதிய திறன்களைப் பெறவும் மக்களுக்கு உதவி வருகின்றது. முதலாளிகள், தனிநபர்கள் ஆகியோர் மீதான சுமையைக் குறைக்க, வேலை ஆதரவுத் திட்டம், சுயதொழில் புரிவோருக்கான வருமான நிவாரணத் திட்டம் ஆகியவை நம்மிடம் உண்டு. தொழிலாளர் இயக்கம், வேலை பயிற்சித் திட்டங்களையும் வாழ்க்கைத்தொழில் பாதைகளையும் உருவாக்க, முதலாளிகளுடன் இணைந்து பணியாற்றி வருகின்றது. ஒவ்வொரு ஊழியரும் நியாயமாகவும் கண்ணியத்துடனும் நடத்தப்படுவதை அது உறுதிசெய்யும். முதலாளிகளும் தங்கள் ஊழியர்களை தக்கவைத்துக் கொள்ள அனைத்து முயற்சிகளையும் மேற்கொள்ளவேண்டும். இது, ஊழியர்களின் விசுவாசத்தை அதிகரிக்கும்; நிலைமை மேம்படும்போது, முதலாளிகளுக்கு உதவ ஊழியர்களை ஊக்குவிக்கும்.
291 |
292 | கொவிட்-19-க்கு எதிரான நமது போராட்டம், நம்மை மேலும் நெருக்கமாக்கி இருக்கிறது. அனைவருக்கும் உரிய இந்த சிரமங்கள், நம்மை வலுப்படுத்தி, ஒரு மக்களாக ஒன்றிணைக்கும். மலேசியாவிலிருந்து பிரிந்து சுதந்திரம் பெற்ற காலகட்டத்திலும், நமது தேசத்தின் ஆரம்பகாலங்களில் ஏற்பட்ட பொருளியல் நெருக்கடியின்போதும், நமது முன்னோடித் தலைமுறையினரும் மெர்டேக்கா தலைமுறையினரும் எப்படி ஒரு தேசமாக வலிமை பெற்றிருந்தார்களோ, அதைப்போலவே நாமும் இருக்கவேண்டும்.
293 |
294 | அப்போதுதான், பல ஆண்டுகள் கழித்து, நமது பேரப்பிள்ளைகள் தேசிய தினத்தைக் கொண்டாடும்போது, இந்தக் காலகட்டத்தையும் தலைமுறையினரையும் பெருமிதத்துடன் திரும்பிப் பார்ப்பார்கள்.
295 |
296 | தேசிய சேவை சதுக்கம்
297 | ஒவ்வொரு தேசிய தினத்தின்போதும், “சிங்கப்பூரின் கதை கொண்டாடப்பட வேண்டிய ஒன்று, அதன் வரலாறு போற்றத்தக்க ஒன்று, அதன் எதிர்காலம் உருவாக்கத்தக்க ஒன்று” என்பதை நினைவுபடுத்திக்கொள்கிறோம்.
298 |
299 | நாம், தேசிய தின அணிவகுப்பை பாடாங்கில் அல்லது மரினா பே மிதக்கும் மேடையில் நடத்தும்போது, பின்னணியில், வானுயர்ந்த கட்டடங்களைப் பார்க்கலாம். மரினா பே திறந்த கடலாக இருந்தது. அதைச் சுற்றியுள்ள நிலத்தைக் கடலிலிருந்து மீட்டோம். அதில் கட்டடங்களைக் கட்டி, தலைசிறந்த நகர்ப் பகுதியை உருவாக்கினோம்; அங்குள்ள நீரை நீர்த்தேக்கமாக மாற்றினோம். அங்கு நின்று பார்க்கும்போது, சிங்கப்பூர் கடந்து வந்த பாதையும், அது கொண்டிருக்கும் நம்பிக்கையும் நம் கண் முன்னே தோன்றும்.
300 |
301 | இன்று, தேசிய சேவையின் பயிற்சி வீரர்கள், தங்கள் அடிப்படை இராணுவப் பயிற்சியை நிறைவுசெய்யும்போது, மிதக்கும் மேடையில் தங்கள் குடும்பத்தினரையும் நண்பர்களையும் அழைத்து வந்து, தங்கள் தேர்ச்சி அணிவகுப்பை நடத்துகின்றனர். அவர்கள் எதைப் பாதுகாக்கிறார்கள் என்பதையும், பல தலைமுறை தேசிய சேவையாளர்களின் தியாக உணர்வையும் சேவை மனப்பான்மையையும் உணர்ந்துகொள்ள இது உதவுகிறது – நாம் ஒன்றிணைந்து உருவாக்கிய இந்த நாட்டையும், அதனை உருவாக்கிய இந்த சமூகத்தையும் பாதுகாக்கவேண்டும் – நமது குடும்பங்கள்; நமது நண்பர்கள்; நமது வாழ்க்கை; நமது வருங்காலம்.
302 |
303 | அதனால், தேசிய சேவை சிங்கப்பூருக்கு ஆற்றும் முக்கிய பங்கை நினைவுகூர, மிதக்கும் மேடையை ஒரு நிரந்தர வளாகமாக மாற்றி அமைப்போம் என்றும் அதற்கு ‘தேசிய சேவை சதுக்கம்’ எனப் பெயரிடுவோம் என்றும் மூன்று ஆண்டுக்கு முன்னர் நான் அறிவித்திருந்தேன். அதற்கான வடிவமைப்புக் குத்தகை வழங்கப்பட்டுள்ளது. இப்படித்தான் அது தோற்றமளிக்கும் – மரினா பேயின் எதிர்ப்புறம் உள்ள ‘The Promontory’ கட்டடத்திற்கு இணையான நேர்க்கோட்டில் அது அமையப் பெற்றிருக்கும். அது, நமது நகரில் பிரகாசமாக ஒளி வீசும் ஒரு சிவப்புப் புள்ளியாக வீற்றிருக்கும். நமது நகர்ப் பகுதியின் பிரதான அம்சமாக அது திகழும். நமது தேசிய சேவையின் கதையை எடுத்துக்கூறும் காட்சிக் கூடமும் இங்கு இருக்கும். கடந்தகால, நிகழ்கால தேசிய சேவையாளர்களின் பங்களிப்புகளை அது கெளரவிக்கும். இளையவர், பெரியவர் என அனைவரும் மகிழக்கூடிய ஒரு சமூகத் தளமாக ‘தேசிய சேவை சதுக்கம்’ திகழும். கண்டிப்பாக, தேசிய தின அணிவகுப்பை நாம் தொடர்ந்து இங்கு நடத்துவோம்.
304 |
305 | முடிவுரை
306 | இந்த ஆண்டு, நாம் தேசிய தினத்தை தீவு முழுவதும் கொண்டாடுகிறோம். அப்போது நாம், கொவிட்-19 காரணமாக உரக்கமாக இல்லாவிடினும், மனதளவில் முன் எப்போதும் இல்லாத உணர்ச்சியுடன், உறுதிமொழியைக் கூறுவோம்; தேசிய கீதத்தைப் பாடுவோம்.
307 |
308 | நமக்கென்று கனவுகளும் இலக்குகளும் உள்ளன. சவால்கள் எதுவாக இருப்பினும், சிங்கப்பூரர்கள் ஒற்றுமையாக இருந்து, துணிவுடன் மீண்டும் வெர்றி காண்பார்கள் என்பதை உலகிற்குக் காட்டுவோம்.
309 |
310 | அனைவருக்கும் இனிய தேசிய தின நல்வாழ்த்துக்கள்!",https://www.pmo.gov.sg/Newsroom/National-Day-Message-2020-Tamil
311 | 2019-08-09,S Iswaran,National Day Message 2019,Tamil,"தேசிய தினச் செய்தி 2019
312 | என் சக சிங்கப்பூரர்களே,
313 |
314 | வணக்கம்
315 |
316 | இந்த ஆண்டு, நாம் நமது இருநூற்றாண்டு நிறைவை நினைவுகூருகிறோம். நமது பள்ளிகள், சமூகக் குழுக்கள், சமய அமைப்புகள், வர்த்தகங்கள் ஆகியவை அவற்றின் சொந்த வரலாற்றைச் சொல்ல, நிகழ்ச்சிகளுக்கு ஏற்பாடு செய்துள்ளன. நம்மில் பலர் Fort Canning-இல் உள்ள இருநூற்றாண்டு நிறைவு அனுபவத்தால் அசந்துபோயிருப்போம். அது, சிங்கப்பூர் வரலாற்றின் முக்கியச் சம்பவங்களைத் தெளிவாகச் சித்திரிக்கிறது.
317 |
318 | இந்த நடவடிக்கைகள் சிங்கப்பூரின் நீண்டகால வரலாற்றை நமக்கு நினைவுபடுத்துகின்றன. ஒரு தேசமாகும் நமது பயணத்தில் பல கலாசாரங்களையும், பாரம்பரியங்களையும் அரவணைத்துக் கொண்டுள்ளோம். நாம் பல மேடு பள்ளங்களைக் கடந்துவந்துள்ளோம்.
319 |
320 | இந்த ஆண்டு, நமது பொருளியல் மெதுவடைந்துள்ளது. உலகளாவிய தேவையும் அனைத்துலக வர்த்தகமும் வலுவிழந்துள்ளன. குறிப்பாக, மின்னியல் துறையோடு உற்பத்தித் துறையும் வர்த்தகம் சார்ந்த சேவைகளும் பாதிப்படைந்துள்ளன. ஆனால், மற்ற துறைகளில் வளர்ச்சி நன்றாக உள்ளது. மெதுவடைவு நமக்குப் புதிதல்ல. இதையும் நாம் சமாளிப்போம். வளர்ச்சியைத் தூண்டும் நடவடிக்கைகள் தேவைப்பட்டால், அதைச் செய்ய அரசாங்கம் தயாராக இருக்கிறது.
321 |
322 | உலகம் சவால்மிக்க காலகட்டத்தில் இருக்கிறது. நாமும் கடுமையான சவால்களை எதிர்நோக்குகிறோம். அவற்றுள் ஒன்று, பொருளாதாரத்தின் நிச்சயமற்ற சூழல். இரண்டு, பெரிய நாடுகளுக்கு இடையே அதிகரித்துவரும் விரிசல்கள். மூன்று, பருவநிலை மாற்றத்தால் ஏற்பட்டுள்ள மிரட்டல்.
323 |
324 | இந்தப் பிரச்சினைகளுக்கு சிங்கப்பூர் விதிவிலக்கல்ல. பொருளாதார நிலையில் இவை வர்த்தகத்தையும் முதலீடுகளையும் பாதிக்கும். எனவே முற்றிலும் மாறுபட்ட எதிர்காலத்துக்கு நம்மை நாம் தயார் செய்துகொள்ளவேண்டும்.
325 |
326 | நமது கடந்தகாலம் நமக்கு நம்பிக்கை அளிக்கின்றது. சோதனைகளும் துயரங்களும் இருந்தபோதிலும் நாம் ஒன்றாகச் செயல்பட்டு அவற்றைச் சமாளித்து மீண்டுவந்துள்ளோம். உலகம் ஒவ்வொரு முறையும் மாறியபோது நாம் தொடர்ந்து முன்னேறினோம். காரணம், நமது பொருளாதாரம், திறன்கள், நகரம் ஆகியவற்றைப் புதுப்பித்துக்கொண்டு நம்மால் மீண்டும் தழைத்தோங்க முடிந்தது.
327 |
328 | நமது தொழில்துறைகளை மாற்றியமைப்பதில் நல்ல முன்னேற்றம் கண்டுவருகிறோம். விமானத்துறை, சுகாதாரப் பராமரிப்பு, நிதித் தொழில்நுட்பச் சேவைகள் நல்ல வளர்ச்சி கண்டுவருகின்றன. துடிப்புமிக்க ஆசியாவின் தேவைகளைப் பூர்த்திசெய்ய நமது துறைமுகமும் விமான நிலையமும் விரிவடைகின்றன. சுற்றுப்பயணிகளை ஈர்க்க நமது இரண்டு ஒருங்கிணைந்த உல்லாசத் தலங்களும் விரிவாக்கம் காண்கின்றன. தொழில்நுட்பமும் புதிய தொழில்களும் செழித்தோங்குகின்றன. தொழில்முனைவர்களையும் நிறுவனங்களையும் வலுப்படுத்தி அனைத்துலகச் சந்தைக்குள் விரிவடைய அரசாங்கம் உதவுகிறது.
329 |
330 | நமது ஊழியர்களின் திறன்களை மேம்படுத்தும் முயற்சிகளிலும் நாம் நல்ல முன்னேற்றமும் கண்டுவருகிறோம். பல்லாயிரம் சிங்கப்பூரர்கள் தங்கள் திறனை வளர்த்துக்கொள்ளவும் புதிய வேலைகளுக்குத் தங்களைத் தயார்ப்படுத்திக் கொள்ளவும் SkillsFuture உதவுகிறது. இதுபோன்ற திட்டங்கள் நமது நீண்டகாலச் சவால்களையும் உடனடிப் பின்னடைவையும் கடந்துசெல்ல உதவும்.
331 |
332 | தொடர்ந்து நமது மக்கள்மீது அதிகமாக முதலீடு செய்கிறோம். இதனால், நாம் ஒவ்வொருவரும் நமது வாழ்க்கையின் ஒவ்வொரு கட்டத்திலும், புதிய வாய்ப்புகளைப் பயன்படுத்திக்கொள்ள முடிகிறது. ஆனால், இது ஒரு கூட்டு முயற்சி. பெற்றோர் சரியான பண்புகளுடன் பிள்ளைகளை வளர்க்கவேண்டும். ஒவ்வொரு குடிமகனும் தனது ஆற்றலை முழுமையாகப் பயன்படுத்தி சிங்கப்பூருக்குப் பங்களிக்கவும் கனவுகளைத் தொடரவும் நமது அரசாங்கம் ஆதரவு வழங்கும்.
333 |
334 | குறைந்த, நடுத்தர வருமான குடும்பங்களுக்குக் கல்வியைக் கட்டுப்படியானதாக வைத்திருக்கத் திட்டமிட்டுள்ளோம். குறிப்பாக, பாலர் கல்வியிலும், உயர் கல்வியிலும். மூத்த சிங்கப்பூரர்களின் சுகாதாரப் பராமரிப்புக்கும் ஓய்வுகாலத் தேவைகளுக்கும் உதவி வழங்குகிறோம். தொடர்ந்து வேலைசெய்ய விரும்புவோருக்கு ஓய்வு வயதையும் மறுவேலைவாய்ப்பு வயதையும் உயர்த்துவோம். இது குறித்து, நான் தேசிய தினக் கூட்ட உரையில் மேலும் பேசுவேன்.
335 |
336 | நாம் தொடர்ந்து நமது நகரைப் புதுப்பிக்கவேண்டும். இங்கு வரும் வெளிநாட்டினர் நமது வீடமைப்புப் பேட்டைகள், முக்கிய அடையாளங்கள், பசுமையான பூங்காக்கள் என ஒவ்வொன்றும் மிகக் கவனமாகப் பராமரிக்கப்படுவதைப் பார்த்து வியக்கின்றனர். இந்தத் தீவு, கண்ணைக் கவரும் ஓர் மின்னும் வைரம். நான் இப்போது இருக்கும் சாங்கி விமான நிலையத்தின் Jewel அதற்கு ஓர் உதாரணம்.
337 |
338 | Jewel- அழகிய தோட்டங்கள், கண்கவர் நீர்வீழ்ச்சி, வித்தியாசமான அனுபவங்கள் நிறைந்த ஓர் இடம். ஒன்பது ஆண்டுகளுக்கு முன்பு சாங்கி விமான நிலையம் கடும் போட்டியை எதிர்நோக்கியது. அப்போதே Jewel-க்கான திட்டத்தை சாங்கி குழு வகுக்கத் தொடங்கிவிட்டது. இன்று அது சிங்கப்பூரர்களையும், இங்கு வரும் அனைவரையும் வெகுவாகக் கவர்ந்துள்ளது.
339 |
340 | உலகிற்கான நமது புதிய நுழைவாயிலைக் கண்டு நாம் மிகவும் பெருமைப்படுகிறோம். இது, இந்த நாட்டின் சிறப்பை நமக்கு நினைவூட்டுகிறது. நம்மை மீண்டும் புதுப்பித்துக் கொள்வதற்கான துணிச்சலும், புத்தாக்கமும், ஆற்றலும் நம்மிடம் இருப்பதை இது காட்டுகிறது. மற்ற நகரங்களும் விமான நிலையங்களும் Jewel-க்கு ஈடாகத் திட்டமிட்டு வருகின்றன. இருப்பினும், நாம் துணிவோடு புதியதைச் செய்ய முயற்சி எடுத்தோம்; அதையும் முதலில் செய்தோம்.
341 |
342 | நம் நகரை புதுப்பிக்கும் பல முயற்சிகளில் ஒன்றுதான் Jewel. சாங்கி விமான நிலையத்தின் ஐந்தாம் முனையம், துவாஸ் பெருந்துறைமுகம், ஜூரோங் லேக் வட்டாரம், Paya Lebar விமானத் தளத்தின் மறுமேம்பாட்டுத் திட்டம். இவை அனைத்தும் நீண்டகாலத்துக்கு நாட்டைத் தொடர்ந்து மேம்படுத்தி சிங்கப்பூரர்களுக்குப் புதிய வாய்ப்புகளை வழங்கும்.
343 |
344 | முன்னிலையில் இருக்க, நாம் தொடர்ந்து புத்தாக்கச் சிந்தனைகளைச் செயல்படுத்தத் தயாராய் இருக்க வேண்டும். நம் தீவின் அளவு நம் வாய்ப்புகளைக் கட்டுப்படுத்துவதில்லை; கட்டுப்படுத்தவும் கூடாது. நமது அறிவுக்கூர்மையும், துணிச்சலுமே நமது வாய்ப்புகளை நிர்ணயிக்கின்றன. ‘திரைகடலோடி திரவியம் தேடினர்’ நம் முன்னோர்கள்.
345 |
346 | அவர்களைப் போலவே நாமும் துணிச்சல்மிக்கவர்களாக இருப்போம். போரையும் மற்ற பல இன்னல்களையும் சமாளித்து வாழ்க்கையை அமைத்துக்கொண்ட நமது பெற்றோர், தாத்தா பாட்டிகள் போன்று உரம் வாய்ந்தவர்களாக இருப்போம். நிச்சயமற்ற உலகில் செழித்தோங்க நாம் மேலும் வலுப்பெறுவோம். புதிய சாத்தியங்களை ஆராய நமக்கு நாமே சவால்கள் விடுப்போம். நமது தீவின் கதையில் மேலும் பல அத்தியாயங்களை எழுதுவோம். ஒன்றிணைந்து பிரகாசமான எதிர்காலத்தை உருவாக்க இந்த தேசிய தினத்தில் உறுதிகொள்வோம்.
347 |
348 | தேசிய தின வாழ்த்துகள்!",https://www.pmo.gov.sg/Newsroom/National-Day-Message-2019-Tamil
349 | 2018-08-09,S Iswaran,National Day Message 2018,Tamil,"என் சக சிங்கப்பூரர்களே, வணக்கம்.
350 |
351 | ஒவ்வோர் ஆண்டும், ஆகஸ்ட் ஒன்பதாம் தேதி அன்று, ஒரு தேசமாக நம் முன்னேற்றத்தைக் கொண்டாடுகிறோம்; ஒன்றுபட்ட மக்களாக இருக்கவேண்டும் என்று உறுதிமொழி எடுக்கிறோம். ஐம்பத்து மூன்றே ஆண்டுகளில், சிங்கப்பூர் நிறைய சாதித்துள்ளது. இன்று, நாம் துடிப்பும் செழிப்பும் மிக்க ஒரு நகர நாடாகத் திகழ்கிறோம். நம் பொருளியல் தொடர்ந்து சீரான வளர்ச்சி காண்கிறது. அண்மை ஆண்டுகளில், அது 3 முதல் 3.5 விழுக்காடு வளர்ச்சி கண்டுள்ளது. உற்பத்தித்திறன் மேம்படுகிறது; வருமானங்கள் உயர்கின்றன. பிறநாட்டவர் பலரைவிட, சிங்கப்பூரர்கள் மேம்பட்ட வாழ்க்கை வாழ்கின்றனர்.
352 |
353 | ஆனால், சிக்கல்கள் எழுவதற்கான அறிகுறிகள் தெரிகின்றன. கடந்த ஓராண்டாக, பெரிய நாடுகளுக்கு இடையே வர்த்தகப் பதற்றம் மோசமடைந்துள்ளது. இது, அனைத்துலக வர்த்தகம், முதலீடுகள், தொழில் நம்பிக்கை ஆகியவற்றைப் பாதிக்கிறது. இதனால், சிங்கப்பூரின் வளர்ச்சியும் முன்னேற்றமும் பாதிக்கப்படும். வர்த்தகப் பூசல்கள், பெரிய நாடுகளுக்கு இடையிலான நம்பிக்கையைக் குறைத்து, ஒத்துழைப்புக்குத் தடையாக இருக்கும். எனவே, வட்டார மற்றும் அனைத்துலகப் பாதுகாப்பும் பாதிக்கப்படலாம்.
354 |
355 | உதாரணத்திற்கு, கொரியத் தீபகற்ப நிலவரம். இரண்டு மாதங்களுக்கு முன்னர், அமெரிக்க அதிபர் Donald Trumpக்கும், வட கொரியத் தலைவர் Kim Jong Unக்கும் இடையே உச்சநிலைச் சந்திப்பு நடைபெற்றது. அதை நாம் வெற்றிகரமாக ஏற்று நடத்தினோம். அந்தச் சந்திப்பால், கொரியப் பதற்றநிலை தணிந்துள்ளது. இருப்பினும், கொரியத் தீபகற்பத்தில் அணுவாயுதங்கள் கைவிடப்பட்டு, அமைதி ஏற்படும் முன்னர், நாம் சமாளிக்க வேண்டிய சவால்கள் பல உள்ளன.
356 |
357 | இந்தப் பணியில், ஆசியான் நமக்கு உறுதுணையாக இருக்கிறது. ஆசியானுக்குத் தலைமை ஏற்றிருக்கும் நாம், அண்டை நாடுகளுடன் ஒத்துழைப்பை வலுப்படுத்த விரும்புகிறோம். மலேசியாவில் பொதுத் தேர்தலுக்குப் பிறகு, புதிய அரசாங்கம் பொறுப்பேற்றுள்ளது. இருதரப்பு நன்மை, மரியாதை ஆகியவற்றின் அடிப்படையில், மலேசியாவுடன் நல்லுறவைப் பேண முயற்சி செய்வோம். இந்தோனேசியாவில் அடுத்த ஆண்டு அதிபர் தேர்தல் நடைபெறவுள்ளது. அந்நாட்டுடன் நாம் கொண்டுள்ள விரிவான ஒத்துழைப்பை மேம்படுத்த, தொடர்ந்து அவர்களோடு பணியாற்றுவோம். 5. நம்மைச் சுற்றி நடக்கும் இந்த நிகழ்வுகளை அரசாங்கம் உன்னிப்பாகக் கவனிக்கிறது. வெளிச் சூழல் எப்படி இருந்தாலும், சிங்கப்பூர் சிறந்து விளங்க வேண்டும் என்பதே நம் விருப்பம். நாம், நம் மீள்திறனை வலுப்படுத்தி, புதிய வாய்ப்புகளை உருவாக்குகிறோம். சிங்கப்பூரர்களின் வாழ்க்கையை மேம்படுத்த வேண்டும்; சமூக உதவித் திட்டங்களை வலுப்படுத்த வேண்டும்; மேலும் ஒன்றுபட்ட தேசத்தை உருவாக்க வேண்டும். இதற்காக, அரசாங்கம், கடந்த சில ஆண்டுகளாய், வீடமைப்பு, கல்வி, சுகாதாரப் பராமரிப்புக் கொள்கைகளை மறு ஆய்வு செய்து வருகிறது.
358 |
359 | இன்று, நான் Kampung Admiralty-யிலிருந்து உங்களிடம் பேசுகிறேன். Kampung Admiralty, பொது வீடமைப்பின் ஒரு புத்தாக்கம். இது, நம் மூத்த குடிமக்களுக்காக உருவாக்கப்பட்ட ஓர் ஒருங்கிணைந்த வீடமைப்புப் பேட்டை. அவர்கள் சௌகரியமாகவும் பாதுகாப்பாகவும் வசிப்பதற்கு, இங்குள்ள வீடுகளில், கைப்பிடிகள், வழுக்காத தரைக்கற்கள் போன்ற அம்சங்கள் உள்ளன. அது மட்டுமல்ல. பேரங்காடி, மருத்துவ நிலையம், சமூகத் தோட்டம், குழந்தைப் பராமரிப்பு நிலையம், உணவங்காடி நிலையம் போன்ற பல வசதிகளும் இங்கு ஒரே இடத்தில் அமைந்திருக்கின்றன.
360 |
361 | Kampung Admiralty-யில், ஒருநாள் என்பது எப்படிப் பட்டதாய் இருக்கும்? இங்கு பல தாத்தா பாட்டிமார்கள் குடியிருக்கின்றனர். அவர்களுடைய பிள்ளைகளும் பேரக்குழந்தைகளும் அருகிலேயே வசிக்கின்றனர். தாத்தா பாட்டிமார், தங்கள் பேரக்குழந்தைகளைப் பார்த்துக்கொள்கின்றனர். அவ்வப்போது உடற்பயிற்சி செய்கின்றனர் அல்லது சமூகத் தோட்டத்திற்குச் சென்று செடிகொடிகள் வளர்க்கின்றனர். அங்கே நண்பர்களைச் சந்திக்கின்றனர். வேலை செய்யும் பிள்ளைகள், மாலையில் வீடு திரும்பியதும், தங்கள் வயதான பெற்றோருடனும் குழந்தைகளுடனும் ஒன்றாய் அமர்ந்து, உணவு அருந்துகின்றனர். சுருக்கமாகச் சொன்னால், Kampung Admiralty, உயர்மாடிக் கட்டடங்கள் கொண்ட ஒரு கம்பம். குடும்பத்தார், நண்பர்கள், அண்டைவீட்டார் ஆகியோர் நெருங்கிப் பழகி, அன்பாக வாழ்கின்றனர். இதைத்தான் நம் முன்னோர் “கூடி வாழ்ந்தால், கோடி நன்மை” என்று கூறினர்.
362 |
363 | நாம் ஓர் ஒருங்கிணைந்த சமுதாயமாகத் திகழ, Kampung Admiralty-யைப் போன்ற புத்தாக்கமிக்க வீடமைப்புத் திட்டங்களை HDB தொடர்ந்து உருவாக்கும்.
364 |
365 | தற்போதைய வீடமைப்புப் பேட்டைகள் என்னவாகும்? அவை, காலப்போக்கில் பராமரிக்கப்பட்டு, மேம்படுத்தப்படும். முதிய பேட்டைகளின் குத்தகை முடிய இன்னும் பல ஆண்டுகள் உள்ளன. இருந்தாலும், அவற்றை, வசிப்பதற்கு உகந்த இடமாக வைத்திருக்க நாம் இப்போதே சிந்திக்க வேண்டும்.
366 |
367 | கல்வியைப் பொறுத்தவரையில், பாலர் பள்ளி இடங்களின் எண்ணிக்கையை அதிகரிக்கிறோம். சிங்கப்பூர் முழுவதும் குழந்தைப் பராமரிப்பு வசதிகளை விரிவுபடுத்துகிறோம். Kampung Admiralty-யில் உள்ள குழந்தைப் பராமரிப்பு நிலையம் அதற்கு ஓர் உதாரணம். கடப்பாடுமிக்க ஆசிரியர்கள், நல்ல வசதிகள் மூலம், எல்லாப் பிள்ளைகளுக்கும் வாழ்வில் ஒரு வலுவான தொடக்கம் இருக்கும்.
368 |
369 | நாடு முழுவதும் உருவாகும் பல புதிய சுகாதார வசதிகளில், இங்குள்ள மருத்துவ நிலையமும் ஒன்று. அது கட்டுப்படியான சுகாதார சேவையை வழங்குகிறது. நம்மிடம் MediShield Life , CHAS, CareShield Life ஆகிய திட்டங்கள் இருக்கின்றன. மருத்துவமனைக் கட்டணங்கள், நீரிழிவு போன்ற நோய்களுக்கான வெளிநோயாளி சிகிச்சை செலவுகள், மற்றும் நீண்டகாலப் பராமரிப்பு ஆகிய தேவைகளுக்கு இவை உதவுகின்றன.
370 |
371 | வீடமைப்பு, கல்வி, சுகாதாரப் பராமரிப்பு – இவை தொடர்பான செலவுகள் குறித்தே சிங்கப்பூரர்கள் அதிகம் கவலைப்படுகின்றனர். இந்த சேவைகள் அனைவருக்கும் தரமாகவும் கட்டுப்படியாகவும் இருப்பதை உறுதி செய்கிறோம். இந்த வகையில் குடும்பங்கள், வாழ்க்கைச் செலவைச் சமாளிக்க உதவுகிறோம்; தேவையுள்ளோருக்குக் கூடுதல் உதவி வழங்குகிறோம். 12. இதோடு நம் பணி நின்றுவிடக் கூடாது. சிங்கப்பூரை நாம் தொடர்ந்து மேம்படுத்த வேண்டும். இப்பயணத்தில் நாம் இன்னும் நெடுந்தூரம் செல்ல வேண்டும். துணிவுடனும் புத்தாக்கத்துடனும் திட்டமிடுவோம். அதற்கு, சமூக ஒற்றுமை, வலுவான பொருளியல், அரசியல் நிலைத்தன்மை, நல்ல அரசாங்கம் இருக்க வேண்டும்.
372 |
373 | இன்று, சிங்கப்பூர் வாய்ப்புகள் நிறைந்த ஒரு தேசம். ஒரு தலைமுறை ஏற்படுத்திக் கொடுக்கும் அடித்தளத்தைக் கொண்டு, மறு தலைமுறை மேலும் சிறந்த இல்லத்தை உருவாக்குகிறது. அதனால்தான், இன்று நாம், நமக்கு விருப்பமான துறைகளில் சிறந்து விளங்கி, மேம்பட்ட எதிர்காலத்தை உருவாக்க முடிகிறது. இனி, அடுத்த தலைமுறைக்காக நாம் நம் பங்கை ஆற்ற வேண்டும்; நாம் ஓர் ஒன்றுபட்ட தேசமாக, தொடர்ந்து செழித்தோங்க வேண்டும்.
374 |
375 | ஒரு தேசிய தினத் தமிழ்ப் பாடல் கூறுவது போல் 1, “பல இனங்கள் சேர, ஒருமை கொண்டாட, சிங்கை என் வீடு, எந்தன் தாய் நாடு”, என்று சொல்வோம்.
376 |
377 | அனைவருக்கும், என் இனிய தேசிய தின வாழ்த்துகள்.",https://www.pmo.gov.sg/Newsroom/national-day-message-2018-tamil
378 | 2017-08-09,S Iswaran,National Day Message 2017,Tamil,"என் சக சிங்கப்பூரர்களே,
379 | வணக்கம்.
380 |
381 | நான் இப்போது Bay East பூந்தோட்டத்தில் இருக்கிறேன். இது கரையோரப் பூந்தோட்டங்களின் கிழக்குப் பகுதியில் உள்ளது.
382 |
383 | சிங்கப்பூர் சுதந்திரம் அடைந்த காலத்தில், இது திறந்த கடற்பகுதியாக இருந்தது. அதனைக் கரையில் நின்று பார்த்த நமது முன்னோடித் தலைவர்கள், கடலை ஒரு தடையாகப் பார்க்காமல், அதில் உள்ள வாய்ப்புகளையும் உணர்ந்தனர். அவர்கள் நம் நகரத்தில் புதிய துடிப்புமிக்க மையப் பகுதியை உருவாக்க நினைத்தனர்; ஒரு பரபரப்பான வர்த்தக, குடியிருப்பு மையத்தைக் கற்பனை செய்தனர்.
384 |
385 | எனவே, பல ஆண்டுகள், நாம் Marina நிலப்பகுதிகளை மீட்டு, அந்தக் கனவை நனவாக்கினோம். இன்று, நமக்கு Marina South-இல் புதிய நிதி வட்டாரம், Marina Barrage அணைக்கட்டு, கரையோரப் பூந்தோட்டங்கள் உள்ளன. உலகமே போற்றி ரசிக்கும் Marina Bay பகுதியின் எழில் தோற்றத்தில் நாம் பெருமைகொள்கிறோம்.
386 |
387 | Marina Bay பற்றிய சிந்தனை உருவான காலத்தில், பல உடனடிச் சவால்களை சிங்கப்பூர் சமாளிக்க வேண்டியிருந்தது. சிங்கப்பூர் ஆயுதப் படையை மேம்படுத்துவது, முதலீடுகளை ஈர்த்து வேலைகளை உருவாக்குவது, மக்களுக்கு வீட்டுவசதி அளிப்பது, நம் பிள்ளைகளுக்குக் கல்விவசதி அளிப்பது முதலியவை அவற்றில் அடங்கும். இருப்பினும், இந்த உடனடிச் சவால்களைத் தாண்டி, எதிர்காலத்திற்கும் ஆயத்தமாகவேண்டும் என்பதை நமது தலைவர்களும் மக்களும் அறிந்திருந்தனர். அவர்களின் தொலைநோக்குப் பார்வையால் கிடைத்திருக்கும் பலன்களை இப்போது நாம் அனுபவிக்கிறோம்.
388 |
389 | 52 ஆண்டுகளாக, நாம் உள்நாட்டு, வெளிநாட்டு விவகாரங்களில் ஆழ்ந்த கவனம் செலுத்திவருகிறோம். உலகம் நிச்சயமற்ற சூழலில் உள்ளது. உலகின் பல பகுதிகளிலும், சிங்கப்பூருக்கு மிக அருகிலும் அடிக்கடி தாக்குதல்கள் நடப்பதால், பயங்கரவாதம் ஒரு பெரும் மிரட்டலாக இருக்கிறது. நமது வளர்ச்சியின் முக்கிய உந்துசக்தியாக இருக்கும் அனைத்துலக வர்த்தகம், வர்த்தகத் தடைக் கொள்கையால் பாதிக்கப்படலாம். நமது பொருளியலை மேம்படுத்தி வருகிறோம். நமது மாணவர்களும் ஊழியர்களும் புதிய திறன்களில் தேர்ச்சிபெற்று வருகிறார்கள். தொழில்நுட்பத்திற்கு ஏற்ப அவர்கள் தங்களை மேம்படுத்திக்கொள்கிறார்கள்.
390 |
391 | அரசாங்கம் இந்த விவகாரங்களைக் கையாள்வதில் முன்னேற்றம் கண்டுவருகிறது. பயங்கரவாதத்திலிருந்து நம்மைப் பாதுகாக்க, நாம் விழிப்புநிலையை அதிகரிக்கிறோம்; இன நல்லிணக்கத்தை வலுப்படுத்துவது முக்கியப் பணியாக உள்ளது. எதிர்காலப் பொருளியலுக்கு, தொழில்துறைகளை உருமாற்ற, நாங்கள் வர்த்தகங்களுடனும் ஊழியர்களுடனும் இணைந்து பணியாற்றுகிறோம். நாங்கள் இந்த ஆண்டு சுமார் 2.5 விழுக்காட்டு வளர்ச்சியை எதிர்பார்க்கிறோம்; இது, சென்ற ஆண்டைவிட அதிகம்.
392 |
393 | தற்போது நமக்கு இருக்கும் இந்தப் பிரச்சினைகளை நாம் சமாளித்துவரும் அதேவேளையில், தொலைநோக்குடன், எதிர்காலத்திற்காக நாம் தயார்படுத்திக்கொள்ளவேண்டும். நமக்கு நீண்ட காலம் நன்மை அளிக்கக்கூடிய 3 விஷயங்களைப் பற்றி நான் உங்களுடன் இந்த ஆண்டு பகிர்ந்துகொள்ள விரும்புகிறேன்: பாலர்பள்ளி, நீரிழிவு நோயைத் தடுக்கும் முயற்சி, ஓர் அறிவார்ந்த தேசம். இவை, நாம் வாழ்வில் சரியான தொடக்கத்தைப் பெறவும், ஆரோக்கியமாக வாழவும், விவேகமாகச் செயல்படவும் வகைசெய்யும்.
394 |
395 | முதலாவதாக, நாம், புதிய உலகிற்காக நம் அடுத்த தலைமுறையைத் தயார்படுத்தவேண்டும். ஒவ்வொரு சிங்கப்பூர் பிள்ளைக்கும் வாழ்வில் ஒரு வலுவான தொடக்கத்தையும் ஒளிமயமான எதிர்காலத்தையும் அளிக்க விரும்புகிறோம். பாலர் பள்ளிகளில் முதலீடு செய்கிறோம், காரணம், பாலர் கல்வி, பிள்ளைகளின் ஏட்டுக்கல்வியில் மட்டுமின்றி, அவர்கள் வாழ்விலும் ஒரு பெரிய மாற்றத்தை ஏற்படுத்துகிறது. பாலர் பள்ளிகளில் அதிக இடங்களை உருவாக்குவோம்; பாலர்பள்ளியின் தரத்தை உயர்த்துவோம்; பாலர்பள்ளி ஆசிரியர் தொழிலை மேம்படுத்துவோம்.
396 |
397 | இளம் தம்பதியர் குடும்பத்தைத் தொடங்க, ஆதரவும் ஊக்கமும் அளிக்க விரும்புகிறோம். வேலை செய்யும் பெற்றோர் தங்கள் இளம் பிள்ளைகள் நம்பிக்கையானவர்களிடம் பாதுகாப்பாக இருக்கிறார்கள் என்று மனநிம்மதி கொள்ள விரும்புவார்கள். அதிகமான, மேம்பட்ட பாலர்பள்ளிகள் பெற்றோரின் மனச்சுமையைக் குறைக்க உதவும்.
398 |
399 | இரண்டாவதாக, சிங்கப்பூரர்கள் நீண்ட நாள் ஆரோக்கியமாக வாழ நாம் விரும்புகிறோம். நம்மிடம் சிறந்த மருத்துவ வசதிகள் இருந்தாலும், நோயற்ற வாழ்வே குறைவற்ற செல்வம். இன்று சிங்கப்பூரர்களின் ஆயுள் காலம் கூடியுள்ளது, ஆனால், நம் முதியோர் தங்கள் வாழ்வின் இறுதிக் காலத்தில் சராசரியாக 8 ஆண்டுகள் உடல்நலக் குறைவால் அவதிப்படுகிறார்கள். இது அவர்களுக்கும் அவர்களின் குடும்பத்தினருக்கும் ஒரு சுமையாக இருக்கலாம்.
400 |
401 | முதுமைக் காலத்தில் உடல்நலக் குறைவுக்கு ஒரு முக்கியக் காரணம் நீரிழிவு நோய். 60 வயதுக்கு மேற்பட்ட மூன்று பேரில் ஒருவருக்கு அந்த நோய் உள்ளது. தொடக்கத்தில், நீரிழிவு நோய் வெளியில் புலப்படாது. ஆனால், காலப்போக்கில், பார்வை இழப்பு, இதய நோய், சிறுநீரகச் செயலிழப்பு, கை கால் இழப்பு என்று அதன் விளைவுகள் கடுமையாக இருக்கும்.
402 |
403 | இதனால்தான், நீரிழிவு நோயைத் தடுக்க நாம் முழு முயற்சி எடுக்கவேண்டும். இது, அரசாங்கக் கொள்கைகளையும் மருத்துவமனை வசதிகளையும் பற்றியது மட்டுமல்ல. நாம் ஒவ்வொருவரும் நம் சொந்த உடல்நலத்திற்குப் பொறுப்பேற்கவேண்டும். நம் வாழ்க்கை முறையையும் உணவுப் பழக்கத்தையும் மாற்ற முயற்சி எடுக்கவேண்டும்; அடிக்கடி உடற்பயிற்சி செய்யவேண்டும்; சுவை பானத்திற்குப் பதிலாகத் தண்ணீர் அருந்தவேண்டும். இது இளம் வயதிலேயே தொடங்கவேண்டும். நீரிழிவு நோயைத் தவிர்க்க, ஆரோக்கியமாக இருக்க, மகிழ்ச்சியாக வாழ அதுவே வழி.
404 |
405 | மூன்றாவதாக, தகவல் தொழில்நுட்பத்தை முழுமையாகப் பயன்படுத்தி, சிங்கப்பூரை, வாழ்வதற்கும், வேலை செய்வதற்கும் தலைசிறந்த இடமாக்க விரும்புகிறோம். இதனால்தான் நாம் அறிவார்ந்த தேசமாய்த் திகழ இலக்கு கொண்டுள்ளோம். நம்மிடம் மக்களைவிட அதிகமான திறன்பேசிகள் உள்ளன. நாம் மின்னியல் அறிவு நிறைந்த சமுதாயமாக இருக்கிறோம். ஆனால், நாம் மேலும் முன்னேறவேண்டும்.
406 |
407 | மற்ற நாடுகள், ரொக்கம் பயன்படுத்துவதைக் குறைக்க மின்கட்டண முறையைக் கையாள்கின்றன. பொதுப் பாதுகாப்பை மேம்படுத்த உணர்கருவிக் கட்டமைப்புகளைப் பயன்படுத்துகின்றன. பொதுச் சேவைகளை மேம்படுத்த பெரிய அளவிலான தகவல் தொகுப்புகளைப் பயன்படுத்துகின்றன. நாம் அவர்களிடம் இருந்து கற்றுக்கொண்டு முன்னேறிச் செல்லவேண்டும். நடைமுறைச் செயற்பாடுகளுக்குத் தகவல் தொழில்நுட்பத்தைப் பயன்படுத்துவதால், சிங்கப்பூரர்களுக்கு நாம் அதிகமான வாய்ப்புகளை உருவாக்க முடியும், நம் வாழ்க்கையை மேம்படுத்த முடியும், நம் நாட்டை உற்சாகம் நிறைந்த இடமாக்க முடியும்.
408 |
409 | நான் இந்த ஆண்டின் தேசிய தினக் கூட்ட உரையில், இந்த மூன்று விஷயங்களைப் பற்றி மேலும் பேசுவேன். நம் முன்னோர்கள் நமக்கு உருவாக்கியது போலவே, நாம் அடுத்த தலைமுறைக்குச் சிறந்த எதிர்காலத்தை உருவாக்கவேண்டும். இது, சிங்கப்பூருக்கு எப்படி சாத்தியமானது என்பதையும் நம் தலைமுறை எவ்வாறு இதைத் தொடர்ந்து செய்யமுடியும் என்பதையும் இங்கு Bay East-இல் நம்மால் பார்க்கமுடிகிறது.
410 |
411 | அதனால்தான் முன்னோடித் தலைவர்களின் நினைவுச்சின்னம், Bay East-இல் அமையவேண்டும் என அதற்கான குழு முன்மொழிந்தபோது, பெரும்பான்மையோர் அதற்கு ஆதரவு தெரிவித்தனர். இது ஒரு விவேகமான முடிவு. அரசாங்கம் இதை ஏற்றுக்கொண்டுள்ளது. இங்கிருந்து அக்கரையைப் பார்க்கும்போது, நமது முன்னோடித் தலைவர்களின் நற்பண்புகள் நினைவுக்கு வரும், அவர்கள் உருவாக்கியதை நாம் காணலாம், சிங்கப்பூரைத் தொடர்ந்து மேம்படுத்தலாம். திரு Lee Kuan Yew சொன்னது போல்:
412 |
413 | “இறுதியில், ஓர் அரசாங்கமாக, நாம் யாருக்குப் பெரிதும் கடமைப்பட்டிருக்கிறோம்? முந்தைய தலைமுறைக்கு அல்ல, இன்றைய தலைமுறைக்கு மட்டுமல்ல, எதிர்காலத் தலைமுறைக்குத்தான்.”
414 |
415 | இதுதான் சிங்கப்பூர் உணர்வு. முன்னோக்கிப் பார்ப்போம். முன்கூட்டியே திட்டமிடுவோம். முன்னிலையில் இருப்போம். இப்படித்தான் நாம் இதுவரை வெற்றிபெற்றுள்ளோம். இதையே வருங்காலத்திற்கும் தொடர்வோம். நமக்கும் நம் பிள்ளைகளுக்கும் புதிய வாய்ப்புகளை ஏற்படுத்த ஒன்றுசேர்ந்து செயல்படுவோம்.
416 |
417 | இனிய தேசிய தின வாழ்த்துகள். வணக்கம்.",https://www.pmo.gov.sg/Newsroom/national-day-message-2017-tamil-1
--------------------------------------------------------------------------------
/data/tamil_stories.csv:
--------------------------------------------------------------------------------
1 | Date,Source,Headline,Story_Text,URL
2 | 2020-12-23,TamilSeithi (Mediacorp),புதுவகை கொரோனா கிருமிப்பரவல் இதுவரை சிங்கப்பூரில் இல்லை...ஆனாலும் விழிப்புநிலை அவசியம்',"சிங்கப்பூரில், புதுவகைக் கொரோனா கிருமிப்பரவல் இதுவரை அடையாளம் காணப்படவில்லை எனக் கல்வி அமைச்சர் லாரன்ஸ் வோங் தெரிவித்துள்ளார்.
3 |
4 | எனினும் அந்தக் கிருமி, மிக வேகமாகப் பரவக்கூடியது என்னும் தகவல், கவலை அளிப்பதாக அவர் கூறினார்.
5 |
6 | பிரிட்டனில் தற்போது புதுவகைக் கிருமி பரவிவருவதால், அங்கிருந்து வரும் பயணிகளுக்குச் சிங்கப்பூர் தடை விதித்துள்ளது.
7 |
8 | இருப்பினும், வேறொரு நாட்டிலிருந்து வரும் பயணிகளின் மூலம் புதிய கிருமி இங்கு பரவும் சாத்தியம் உள்ளதைத் திரு. வோங் சுட்டினார்.
9 |
10 | தொடர்ந்து விழிப்புடன் இருந்து, நிலைமையைக் கண்காணித்து, உருமாறியுள்ள கொரோனா கிருமி பற்றி மேலும் தெரிந்துகொள்வது மிகவும் அவசியம் என அமைச்சர் வலியுறுத்தினார்.
11 |
12 | புதுவகைக் கிருமியின் தொற்றும் திறன், 70 விழுக்காட்டுக்கும் அதிகம் என, முதற்கட்ட மதிப்பீட்டில் தெரியவந்துள்ளது.
13 |
14 | அந்தக் கிருமி, நோய்களைக் கடுமையாக்குமா அல்லது வேறு என்னென்ன பாதிப்புகளை அது உருவாக்கும் என்பதைக் கண்டறியும் முயற்சியில் அரசாங்கம் ஈடுபட்டுள்ளதாகத் திரு. வோங் சொன்னார்.
15 |
16 | புதுவகை கிருமி சிங்கப்பூரில் பரவத் தொடங்கினால், அதைச் சமாளிப்பதற்கான பாதுகாப்பு நடைமுறைகள் நடப்பில் இருப்பது அவசியம் என்றார் அவர்.
17 |
18 | உடனடியாக அதைக் கண்டறிந்து, பாதிக்கப்பட்டவர்களைத் தனிமைப்படுத்த வேண்டும் என அவர் விளக்கினர். ",https://seithi.mediacorp.sg/mobilet/singapore/lawrence-wong/4551644.html
19 | 2020-12-23,TamilSeithi (Mediacorp),தாம்சன் வட்டாரத்தில் கண்டுபிடிக்கப்பட்ட போர்க்கால வெடிகுண்டு,"தாம்சன் வட்டாரத்தில் உள்ள ஜாலான் ராபு சாலையில், போர்க்கால வெடிகுண்டு ஒன்று கண்டுபிடிக்கப்பட்டுள்ளது.
20 |
21 | தரைவீடுகள் அமைந்துள்ள அந்தப் பகுதியில் வெடிகுண்டு இருப்பதாக, நேற்று (டிசம்பர் 22) பிற்பகல் 2 மணிக்குத் தகவல் கிடைத்ததாக, சிங்கப்பூர்க் காவல்துறை தெரிவித்தது.
22 |
23 | குடிமைத் தற்காப்புப் படையின் வெடிகுண்டு அகற்றும் பிரிவுடன் நடத்தப்பட்ட ஆலோசனையில், அதைப் பாதுகாப்பாக இடம் மாற்றி அப்புறப்படுத்த தீர்மானிக்கப்பட்டது.
24 |
25 | இரண்டாம் உலகப் போரில் பயன்படுத்தப்பட்ட வெடிகுண்டுகள், சிங்கப்பூரில் ஆங்காங்கே அவ்வப்போது கண்டுபிடிக்கப்படுவதுண்டு.
26 |
27 | கடந்த நவம்பர் மாதம், ரிவர் வேலி பகுதியில் உள்ள ஜியாக் கிம் ரோட்டில் இரண்டாம் உலகப் போர்க்கால வெடிகுண்டு ஒன்று கட்டுப்படுத்தப்பட்ட சூழலில் வெடிக்கச் செய்யப்பட்டது.
28 |
29 | வானிலிருந்து வீசப்பட்ட 50 கிலோகிராம் வெடிகுண்டு, கட்டுமானத் தலத்தில் நிலந்தோண்டும் பணியின்போது கண்டுபிடிக்கப்பட்டது.
30 |
31 | அதை அங்கிருந்து அப்புறப்படுத்தி எடுத்துச் செல்வது ஆபத்தானது என்பதால், கிடைத்த இடத்திலேயே அதை வெடிக்கச் செய்ய முடிவெடுக்கப்பட்டு நிறைவேற்றப்பட்டது.",https://seithi.mediacorp.sg/mobilet/singapore/thomson-war-relic/4551710.html
32 | 2020-12-22,TamilSeithi (Mediacorp),COVID-19: மலேசியாவில் Pfizer தடுப்பூசி போட்டுக்கொள்ளும் முதல் குழுவில் பிரதமர் முஹிதீன்,"மலேசியாவில் Pfizer நிறுவனத்தின் தடுப்பூசியைப் போட்டுக்கொள்ளவிருக்கும் முதல் குழுவினரில் தாமும் இடம்பெறப் போவதாக அந்நாட்டுப் பிரதமர் முஹிதீன் யாசின் (Muhyiddin Yassin) கூறியிருக்கிறார்.
33 |
34 | தடுப்புமருந்து பாதுகாப்பானது என்றும், செயல்திறன்மிக்கது என்றும் பொதுமக்களுக்கு நம்பிக்கையளிக்க தாம் தடுப்பூசியைப் போட்டுக்கொள்ளவிருப்பதாக அவர் குறிப்பிட்டார்.
35 |
36 | முன்னிலை சுகாதார ஊழியர்களுக்கு முதலில் தடுப்பூசி போடப்படும்.
37 |
38 | அடுத்து மூத்தோர், தொற்றுநோய் அல்லாத மற்ற நோய்களைக் கொண்டவர்கள், நாள்பட்ட சுவாசப் பிரச்சினை உள்ளவர்கள் ஆகிய எளிதில் பாதிக்கப்படக்கூடிய பிரிவினருக்குத் தடுப்பூசி போடப்படும்.
39 |
40 | தடுப்புமருந்துகளின் தயாரிப்பு, விநியோகம் ஆகியவை குறித்து இன்று காணொளி வழியாக மலேசியர்களிடம் உரையாற்றிய போது திரு. முஹிதீன் அதனைத் தெரிவித்தார்.
41 |
42 | தடுப்புமருந்து உடனடியாகக் கிடைப்பதை அரசாங்கம் உறுதிசெய்யும் என்றார் அவர்.
43 |
44 | அடுத்த ஆண்டு February மாதத்துக்குள் Pfizer நிறுவனத்திடமிருந்து 1 மில்லியன் முறை போடத் தேவையான அளவு தடுப்பூசிகள் வந்தடையும் என்று அரசாங்கம் எதிர்பார்ப்பதாகத் திரு. முஹிதீன் கூறினார்.",https://seithi.mediacorp.sg/mobilet/asia/first-to-get-vax-in-msia/4551360.html
45 | 2020-12-22,TamilSeithi (Mediacorp),"COVID-19: முன்னிலை ஊழியர்கள், எளிதில் பாதிக்கப்படக்கூடியோருக்கு முதலில் தடுப்பூசி செலுத்தப்படும்","COVID-19 தடுப்பூசிகளின் முதல் தொகுதி, சிங்கப்பூருக்கு நேற்றிரவு வந்து சேர்ந்தது.
46 |
47 | போக்குவரத்து அமைச்சர் ஓங் யீ காங் (Ong Ye Kung) தடுப்பூசிகளைப் பெற்றுக்கொண்டார்.
48 |
49 | அவை தற்போது SATS நிறுவனத்தின் குளிர்பதனக் கிடங்கில் பத்திரப்படுத்தப்பட்டுள்ளன.
50 |
51 | Pfizer, BioNTech நிறுவனங்கள் இணைந்து தயாரித்த அந்த மருந்தைப் பெறும் முதல் ஆசிய நாடு, சிங்கப்பூர்.
52 |
53 | பிரஸ்ஸல்ஸிலிருந்து சிங்கப்பூர் ஏர்லைன்ஸ் சரக்கு விமானத்தில் நேற்று முன்தினம் ஏற்றப்பட்ட தடுப்பூசி, சாங்கி விமான நிலையத்துக்கு நேற்றிரவு மணி 7.36க்கு வந்து சேர்ந்தது.
54 |
55 | முன்னிலை ஊழியர்களுக்கும் சுகாதாரப் பராமரிப்புத் துறை ஊழியர்களுக்கும், கிருமித்தொற்றால் எளிதில் பாதிக்கப்படக்கூடியோருக்கும் தடுப்பூசி முதலில் செலுத்தப்படும்.
56 |
57 | தடுப்பூசி போட்டுக்கொள்வது கட்டாயமில்லை.
58 |
59 | என்றாலும், சிங்கப்பூரர்கள் தடுப்பூசியைப் போட்டுக்கொள்ளப் பிரதமர் லீ சியன் லூங் ஊக்குவித்தார்.
60 |
61 | கடந்த ஜூன் மாதம் சிங்கப்பூர் Moderna நிறுவனத்திடமிருந்து தடுப்பூசி வாங்குவதற்கு முன்பணம் செலுத்தியது.
62 |
63 | ஆகஸ்ட் மாதம் Sinovac நிறுவனத்தின் தடுப்பூசியை வாங்க ஒப்பந்தம் செய்த சிங்கப்பூர், Pfizer-BioNTech நிறுவனங்களுடன் இறுதிக் கட்டப் பேச்சு வார்த்தையை நடத்தியது.
64 |
65 | சுகாதார அறிவியல் ஆணையம், தடுப்பூசிகளைச் சோதித்துப் பார்த்து Pfizer-BioNTech நிறுவனத்தின் தடுப்பூசிகளுக்கு இந்த மாதம் ஒப்புதல் அளித்தது.",https://seithi.mediacorp.sg/mobilet/singapore/vaccine-procurement-sg/4551302.html
66 | 2020-12-22,TamilSeithi (Mediacorp),"இந்தியாவில் TikTok செயலியைப் போன்ற மற்றொரு செயலியை உருவாக்கிய நிறுவனத்திற்கு Google, Microsoft, 100 மில்லியன் டாலர் நிதி","இந்தியாவில் TikTok செயலியைப் போன்ற மற்றொரு செயலியை உருவாக்கிய நிறுவனத்திற்கு Microsoft நிறுவனம், Alphabet நிறுவனத்தின் Google ஆகியவை 100 மில்லியன் டாலர் நிதி அளித்துள்ளன.
67 |
68 | இவ்வாண்டு ஜூன் மாதத்தில் நிகழ்ந்த சீன-இந்திய எல்லைப் பூசலுக்குப் பின் இந்தியாவில் தடைசெய்யப்பட்ட TikTok செயலியைப் போலவே Josh செயலியின் செயல்பாடு உள்ளது.
69 |
70 | பெங்களூரைத் தளமாகக் கொண்ட VerSe Innovation நிறுவனத்தின் அந்தச் செயலி தற்போது பிரபலம் அடைந்து வருவதால் உலகெங்கிலும் உள்ள முதலீட்டாளர்களை அது ஈர்த்துள்ளது.
71 |
72 | இந்தியாவில் மின்னிலக்க முதலீடுகளுக்காக Google 10 பில்லியன் டாலர் நிதியை ஒதுக்கியுள்ளது.
73 |
74 | VerSe Innovation நிறுவனம் தனது தற்போதைய மதிப்பு 1 பில்லியன் டாலரைத் தாண்டியுள்ளதாகக் குறிப்பிட்டது. ",https://seithi.mediacorp.sg/mobilet/asia/india-gets-funding/4551380.html
--------------------------------------------------------------------------------
/notebooks/3.0_data_prep_cch.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "# AI TEXT GENERATION FOR BEGINNERS: CREATING AND FINE TUNING YOUR OWN SINGLISH CHATBOT\n",
8 | "\n",
9 | "Text generation is one of the most exciting areas in modern NLP, thanks to the work by companies like Hugging Face and OpenAI. It is also one of the harder areas for NLP beginners to navigate, due to the higher technical and resource barrier to entry (access to GPUs for training, for instance). Finding an appropriate dataset for your own experiment can be just as tough. \n",
10 | "\n",
11 | "For this third installment of notebooks on practical NLP tasks, I'll be sharing a series of notebooks that I've created and adapted from other sources for my own learning. The goal is to speed up your own learning progress, so that more time is spent on understanding the data and experimentation, instead of finding the basic building blocks for the project.\n",
12 | "\n",
13 | "The final product is far from polished, and reflects the limits of my knowledge and the suitability of the dataset. But as they say, don't let the perfect get in the way of the good. Things are moving very fast in this area, and it would be a shame to sit it out while waiting for the perfect conditions.\n",
14 | "\n",
15 | "This series contains a combination of Colab and local-machine-based notebooks. I would recommend upgrading to Colab Pro and increasing your Google account storage limits if you can afford it. You can still run a limited version of the experiments here if you don't wish to upgrade. But bear in mind you'll have to manage the storage limits quite regularly as the fine tuning process tend to generate pretty huge files. 15Gb of free storage sounds like a lot, but it actually isn't once you get started....."
16 | ]
17 | },
18 | {
19 | "cell_type": "code",
20 | "execution_count": 1,
21 | "metadata": {},
22 | "outputs": [],
23 | "source": [
24 | "import codecs\n",
25 | "import json\n",
26 | "import numpy as np\n",
27 | "import pandas as pd\n",
28 | "import re\n",
29 | "\n",
30 | "from sklearn.model_selection import train_test_split"
31 | ]
32 | },
33 | {
34 | "cell_type": "markdown",
35 | "metadata": {},
36 | "source": [
37 | "# PART 1: DATA EXTRACTION AND PREPARATION\n",
38 | "\n",
39 | "Finding the right dataset for your use case is likely the biggest stumbling block to getting started. While online tutorials tend to come with demo datasets, they may not appeal to you or the audience you are building for.\n",
40 | "\n",
41 | "For this project, I'm focusing on [Singlish](https://en.wikipedia.org/wiki/Singlish), or colloquial Singaporean English. It's a mish-mash of several languages and local slang, and can be bewildering for native English speakers who have never been to Singapore.\n",
42 | "\n",
43 | "The first half of the data preparation is unique to the corpus used - a collection of [SMS messages by Singaporean students at a local university](https://scholarbank.nus.edu.sg/handle/10635/137343).\n",
44 | "\n",
45 | "The second half of the data preparation is unique to the requirements of the chatbot finetuning, as outlined in this [Colab notebook](https://colab.research.google.com/drive/15wa925dj7jvdvrz8_z3vU7btqAFQLVlG) which I've based most of the finetuning code on. \n",
46 | "\n",
47 | "If you use a different dataset, you'll have to change the first half of the processing accordingly."
48 | ]
49 | },
50 | {
51 | "cell_type": "markdown",
52 | "metadata": {},
53 | "source": [
54 | "## 1. EXTRACTING DATA FROM THE JSON FILE\n",
55 | "\n",
56 | "The SMSes are nested pretty deeply in the original json file. Next couple of cells are aimed at extracting the data into a dataframe format."
57 | ]
58 | },
59 | {
60 | "cell_type": "code",
61 | "execution_count": 2,
62 | "metadata": {},
63 | "outputs": [],
64 | "source": [
65 | "raw = [json.loads(line) for line in open('../data/singlish.json', 'r')]"
66 | ]
67 | },
68 | {
69 | "cell_type": "code",
70 | "execution_count": 3,
71 | "metadata": {},
72 | "outputs": [
73 | {
74 | "data": {
75 | "text/html": [
76 | "
\n",
77 | "\n",
90 | "
\n",
91 | " \n",
92 | " \n",
93 | " | \n",
94 | " smsCorpus.@date | \n",
95 | " smsCorpus.@version | \n",
96 | " smsCorpus.message | \n",
97 | "
\n",
98 | " \n",
99 | " \n",
100 | " \n",
101 | " 0 | \n",
102 | " 2015.03.09 | \n",
103 | " 1.2 | \n",
104 | " [{'@id': 10120, 'text': {'$': 'Bugis oso near ... | \n",
105 | "
\n",
106 | " \n",
107 | "
\n",
108 | "
"
109 | ],
110 | "text/plain": [
111 | " smsCorpus.@date smsCorpus.@version \\\n",
112 | "0 2015.03.09 1.2 \n",
113 | "\n",
114 | " smsCorpus.message \n",
115 | "0 [{'@id': 10120, 'text': {'$': 'Bugis oso near ... "
116 | ]
117 | },
118 | "execution_count": 3,
119 | "metadata": {},
120 | "output_type": "execute_result"
121 | }
122 | ],
123 | "source": [
124 | "df_raw = pd.json_normalize(raw)\n",
125 | "\n",
126 | "df_raw.head()"
127 | ]
128 | },
129 | {
130 | "cell_type": "code",
131 | "execution_count": 4,
132 | "metadata": {},
133 | "outputs": [],
134 | "source": [
135 | "raw_messages = pd.concat(\n",
136 | " df_raw[\"smsCorpus.message\"]\n",
137 | " .apply(pd.DataFrame)\n",
138 | " .tolist(),\n",
139 | " keys=df_raw[\"smsCorpus.@date\"],\n",
140 | " sort=False,\n",
141 | ").reset_index(level=\"smsCorpus.@date\")\n"
142 | ]
143 | },
144 | {
145 | "cell_type": "code",
146 | "execution_count": 5,
147 | "metadata": {},
148 | "outputs": [],
149 | "source": [
150 | "raw_messages['sms_text'] = [x.get('$') for x in raw_messages['text']]"
151 | ]
152 | },
153 | {
154 | "cell_type": "code",
155 | "execution_count": 6,
156 | "metadata": {},
157 | "outputs": [],
158 | "source": [
159 | "source = pd.json_normalize(raw_messages['source'], meta='@id')\n",
160 | "\n",
161 | "destination = pd.json_normalize(raw_messages['destination'], meta='@id')\n",
162 | "\n",
163 | "profile = pd.json_normalize(raw_messages['messageProfile'], meta='@id')\n",
164 | "\n",
165 | "collection = pd.json_normalize(raw_messages['collectionMethod'], meta='@id')\n"
166 | ]
167 | },
168 | {
169 | "cell_type": "code",
170 | "execution_count": 7,
171 | "metadata": {},
172 | "outputs": [],
173 | "source": [
174 | "sms_raw = pd.concat([raw_messages, source, destination, profile, collection], axis=1)"
175 | ]
176 | },
177 | {
178 | "cell_type": "code",
179 | "execution_count": 8,
180 | "metadata": {},
181 | "outputs": [],
182 | "source": [
183 | "cols = [\n",
184 | " \"@id\",\n",
185 | " \"userProfile.userID.$\",\n",
186 | " \"sms_text\",\n",
187 | " \"userProfile.country.$\",\n",
188 | " \"userProfile.age.$\",\n",
189 | " \"userProfile.gender.$\",\n",
190 | " \"srcNumber.$\",\n",
191 | " \"phoneModel.@manufactuer\",\n",
192 | " \"phoneModel.@smartphone\",\n",
193 | " \"userProfile.frequency.$\",\n",
194 | "]\n",
195 | "\n",
196 | "sms = sms_raw[cols].copy()\n"
197 | ]
198 | },
199 | {
200 | "cell_type": "code",
201 | "execution_count": 9,
202 | "metadata": {},
203 | "outputs": [],
204 | "source": [
205 | "sms['sms_text'] = sms['sms_text'].astype('str')\n",
206 | "\n",
207 | "# simple function to clean the text and remove non-ascii characters\n",
208 | "def clean_text(text): \n",
209 | " text = text.encode(\"ascii\", errors=\"ignore\").decode(\"ascii\") #remove non-ascii, Chinese characters\n",
210 | " text = re.sub(r\"http\\S+\", \"\", text)\n",
211 | " text = re.sub(r\"\\n\", \" \", text)\n",
212 | " text = re.sub(r\"\\n\\n\", \" \", text)\n",
213 | " text = re.sub(r\"\\W\", \" \", text)\n",
214 | " text = re.sub(r\"^\\d+\\s|\\s\\d+\\s|\\s\\d+$\", \" \", text)\n",
215 | " text = text.strip(\" \")\n",
216 | " text = re.sub(r\"[^\\w\\s]\", \"\", text)\n",
217 | " text = re.sub(' +',' ', text).strip() # get rid of multiple spaces and replace with a single \n",
218 | " return text\n",
219 | "\n",
220 | "sms[\"clean_text\"] = sms['sms_text'].map(lambda text: clean_text(text))\n",
221 | "\n",
222 | "sms = sms.dropna(subset=['clean_text'])"
223 | ]
224 | },
225 | {
226 | "cell_type": "code",
227 | "execution_count": 10,
228 | "metadata": {},
229 | "outputs": [],
230 | "source": [
231 | "#adding a word count col for filtering\n",
232 | "\n",
233 | "sms['word_count'] = sms['clean_text'].str.count(' ') + 1"
234 | ]
235 | },
236 | {
237 | "cell_type": "code",
238 | "execution_count": 11,
239 | "metadata": {},
240 | "outputs": [],
241 | "source": [
242 | "# narrowing down col selection\n",
243 | "\n",
244 | "cols = [\"@id\", \"userProfile.userID.$\", \"userProfile.country.$\", \"sms_text\", \"clean_text\", \"word_count\"]\n",
245 | "\n",
246 | "sms = sms[cols].copy()\n"
247 | ]
248 | },
249 | {
250 | "cell_type": "code",
251 | "execution_count": 12,
252 | "metadata": {},
253 | "outputs": [],
254 | "source": [
255 | "# renaming cols for clarity\n",
256 | "\n",
257 | "sms = sms.rename(\n",
258 | " columns={\n",
259 | " \"@id\": \"data_id\",\n",
260 | " \"userProfile.userID.$\": \"user_id\",\n",
261 | " \"userProfile.country.$\": \"country\",\n",
262 | " \"sms_text\": \"sms_text\",\n",
263 | " \"clean_text\": \"clean_text\",\n",
264 | " \"word_count\": \"word_count\",\n",
265 | "\n",
266 | " }\n",
267 | ")\n"
268 | ]
269 | },
270 | {
271 | "cell_type": "code",
272 | "execution_count": 13,
273 | "metadata": {},
274 | "outputs": [
275 | {
276 | "data": {
277 | "text/plain": [
278 | "(55835, 6)"
279 | ]
280 | },
281 | "execution_count": 13,
282 | "metadata": {},
283 | "output_type": "execute_result"
284 | }
285 | ],
286 | "source": [
287 | "sms.shape"
288 | ]
289 | },
290 | {
291 | "cell_type": "code",
292 | "execution_count": 14,
293 | "metadata": {},
294 | "outputs": [
295 | {
296 | "data": {
297 | "text/html": [
298 | "\n",
299 | "\n",
312 | "
\n",
313 | " \n",
314 | " \n",
315 | " | \n",
316 | " data_id | \n",
317 | " user_id | \n",
318 | " country | \n",
319 | " sms_text | \n",
320 | " clean_text | \n",
321 | " word_count | \n",
322 | "
\n",
323 | " \n",
324 | " \n",
325 | " \n",
326 | " 0 | \n",
327 | " 10120 | \n",
328 | " 51 | \n",
329 | " SG | \n",
330 | " Bugis oso near wat... | \n",
331 | " Bugis oso near wat | \n",
332 | " 4 | \n",
333 | "
\n",
334 | " \n",
335 | " 1 | \n",
336 | " 10121 | \n",
337 | " 51 | \n",
338 | " SG | \n",
339 | " Go until jurong point, crazy.. Available only ... | \n",
340 | " Go until jurong point crazy Available only in ... | \n",
341 | " 20 | \n",
342 | "
\n",
343 | " \n",
344 | " 2 | \n",
345 | " 10122 | \n",
346 | " 51 | \n",
347 | " SG | \n",
348 | " I dunno until when... Lets go learn pilates... | \n",
349 | " I dunno until when Lets go learn pilates | \n",
350 | " 8 | \n",
351 | "
\n",
352 | " \n",
353 | " 3 | \n",
354 | " 10123 | \n",
355 | " 51 | \n",
356 | " SG | \n",
357 | " Den only weekdays got special price... Haiz...... | \n",
358 | " Den only weekdays got special price Haiz Cant ... | \n",
359 | " 25 | \n",
360 | "
\n",
361 | " \n",
362 | " 4 | \n",
363 | " 10124 | \n",
364 | " 51 | \n",
365 | " SG | \n",
366 | " Meet after lunch la... | \n",
367 | " Meet after lunch la | \n",
368 | " 4 | \n",
369 | "
\n",
370 | " \n",
371 | "
\n",
372 | "
"
373 | ],
374 | "text/plain": [
375 | " data_id user_id country sms_text \\\n",
376 | "0 10120 51 SG Bugis oso near wat... \n",
377 | "1 10121 51 SG Go until jurong point, crazy.. Available only ... \n",
378 | "2 10122 51 SG I dunno until when... Lets go learn pilates... \n",
379 | "3 10123 51 SG Den only weekdays got special price... Haiz...... \n",
380 | "4 10124 51 SG Meet after lunch la... \n",
381 | "\n",
382 | " clean_text word_count \n",
383 | "0 Bugis oso near wat 4 \n",
384 | "1 Go until jurong point crazy Available only in ... 20 \n",
385 | "2 I dunno until when Lets go learn pilates 8 \n",
386 | "3 Den only weekdays got special price Haiz Cant ... 25 \n",
387 | "4 Meet after lunch la 4 "
388 | ]
389 | },
390 | "execution_count": 14,
391 | "metadata": {},
392 | "output_type": "execute_result"
393 | }
394 | ],
395 | "source": [
396 | "sms.head()"
397 | ]
398 | },
399 | {
400 | "cell_type": "markdown",
401 | "metadata": {},
402 | "source": [
403 | "## 1.1 CUTTING OUT THE NOISE\n",
404 | "\n",
405 | "A bigger dataset isn't necessarily a better one if it is merely noisy. Prior to creating the training and validation sets, I filtered out SMSes of 3 words or less (too few words) and kept only those sent by users in Singapore."
406 | ]
407 | },
408 | {
409 | "cell_type": "code",
410 | "execution_count": 15,
411 | "metadata": {},
412 | "outputs": [],
413 | "source": [
414 | "crit1 = sms['word_count'] > 3\n",
415 | "crit2 = sms['country'] == 'SG'\n",
416 | "crit3 = sms['country'] == 'Singapore'\n",
417 | "\n",
418 | "sms = sms[crit1 & (crit2 | crit3)].copy().reset_index()"
419 | ]
420 | },
421 | {
422 | "cell_type": "markdown",
423 | "metadata": {},
424 | "source": [
425 | "## 2. CREATE TRAIN-VALIDATION SETS\n",
426 | "\n",
427 | "The data format for training a chatbot is different from the usual CSV files I've encountered. But it sort of makes sense in that for every response, the model will be fed x-number of previous SMSes as \"context\".\n",
428 | "\n",
429 | "In this case, I'm using 7 previous responses for context. You can increase or decrease the number as you wish. Here's the [link to another Colab file](https://colab.research.google.com/drive/1kKErlSSpewQbWexFPEj1rPWsYpMx69ZS?usp=sharing) that shows you how to tweak your dataset ahead of fine-tuning the DialoGPT model. "
430 | ]
431 | },
432 | {
433 | "cell_type": "code",
434 | "execution_count": 16,
435 | "metadata": {},
436 | "outputs": [],
437 | "source": [
438 | "contexted = []\n",
439 | "\n",
440 | "n = 7\n",
441 | "\n",
442 | "for i in range(n, len(sms['clean_text'])):\n",
443 | " row = []\n",
444 | " prev = i - 1 - n # we additionally substract 1, so row will contain current response and 7 previous responses \n",
445 | " for j in range(i, prev, -1):\n",
446 | " row.append(sms['clean_text'][j])\n",
447 | " contexted.append(row) "
448 | ]
449 | },
450 | {
451 | "cell_type": "code",
452 | "execution_count": 17,
453 | "metadata": {},
454 | "outputs": [],
455 | "source": [
456 | "columns = ['response', 'context'] \n",
457 | "columns = columns + ['context/'+str(i) for i in range(n-1)]\n",
458 | "\n",
459 | "df = pd.DataFrame.from_records(contexted, columns=columns)"
460 | ]
461 | },
462 | {
463 | "cell_type": "code",
464 | "execution_count": 18,
465 | "metadata": {},
466 | "outputs": [
467 | {
468 | "data": {
469 | "text/plain": [
470 | "(29353, 8)"
471 | ]
472 | },
473 | "execution_count": 18,
474 | "metadata": {},
475 | "output_type": "execute_result"
476 | }
477 | ],
478 | "source": [
479 | "df.shape"
480 | ]
481 | },
482 | {
483 | "cell_type": "code",
484 | "execution_count": 19,
485 | "metadata": {},
486 | "outputs": [
487 | {
488 | "data": {
489 | "text/html": [
490 | "\n",
491 | "\n",
504 | "
\n",
505 | " \n",
506 | " \n",
507 | " | \n",
508 | " response | \n",
509 | " context | \n",
510 | " context/0 | \n",
511 | " context/1 | \n",
512 | " context/2 | \n",
513 | " context/3 | \n",
514 | " context/4 | \n",
515 | " context/5 | \n",
516 | "
\n",
517 | " \n",
518 | " \n",
519 | " \n",
520 | " 0 | \n",
521 | " Hey pple or for nights Excellent location wif ... | \n",
522 | " nights We nt staying at port step liao Too ex | \n",
523 | " m walking in citylink now faster come down Me ... | \n",
524 | " Meet after lunch la | \n",
525 | " Den only weekdays got special price Haiz Cant ... | \n",
526 | " I dunno until when Lets go learn pilates | \n",
527 | " Go until jurong point crazy Available only in ... | \n",
528 | " Bugis oso near wat | \n",
529 | "
\n",
530 | " \n",
531 | " 1 | \n",
532 | " Yun ah the ubi one say if wan call by tomorrow... | \n",
533 | " Hey pple or for nights Excellent location wif ... | \n",
534 | " nights We nt staying at port step liao Too ex | \n",
535 | " m walking in citylink now faster come down Me ... | \n",
536 | " Meet after lunch la | \n",
537 | " Den only weekdays got special price Haiz Cant ... | \n",
538 | " I dunno until when Lets go learn pilates | \n",
539 | " Go until jurong point crazy Available only in ... | \n",
540 | "
\n",
541 | " \n",
542 | " 2 | \n",
543 | " Hey tmr maybe can meet you at yck | \n",
544 | " Yun ah the ubi one say if wan call by tomorrow... | \n",
545 | " Hey pple or for nights Excellent location wif ... | \n",
546 | " nights We nt staying at port step liao Too ex | \n",
547 | " m walking in citylink now faster come down Me ... | \n",
548 | " Meet after lunch la | \n",
549 | " Den only weekdays got special price Haiz Cant ... | \n",
550 | " I dunno until when Lets go learn pilates | \n",
551 | "
\n",
552 | " \n",
553 | " 3 | \n",
554 | " Oh i asked for fun Haha take care | \n",
555 | " Hey tmr maybe can meet you at yck | \n",
556 | " Yun ah the ubi one say if wan call by tomorrow... | \n",
557 | " Hey pple or for nights Excellent location wif ... | \n",
558 | " nights We nt staying at port step liao Too ex | \n",
559 | " m walking in citylink now faster come down Me ... | \n",
560 | " Meet after lunch la | \n",
561 | " Den only weekdays got special price Haiz Cant ... | \n",
562 | "
\n",
563 | " \n",
564 | " 4 | \n",
565 | " We are supposed to meet to discuss abt our tri... | \n",
566 | " Oh i asked for fun Haha take care | \n",
567 | " Hey tmr maybe can meet you at yck | \n",
568 | " Yun ah the ubi one say if wan call by tomorrow... | \n",
569 | " Hey pple or for nights Excellent location wif ... | \n",
570 | " nights We nt staying at port step liao Too ex | \n",
571 | " m walking in citylink now faster come down Me ... | \n",
572 | " Meet after lunch la | \n",
573 | "
\n",
574 | " \n",
575 | "
\n",
576 | "
"
577 | ],
578 | "text/plain": [
579 | " response \\\n",
580 | "0 Hey pple or for nights Excellent location wif ... \n",
581 | "1 Yun ah the ubi one say if wan call by tomorrow... \n",
582 | "2 Hey tmr maybe can meet you at yck \n",
583 | "3 Oh i asked for fun Haha take care \n",
584 | "4 We are supposed to meet to discuss abt our tri... \n",
585 | "\n",
586 | " context \\\n",
587 | "0 nights We nt staying at port step liao Too ex \n",
588 | "1 Hey pple or for nights Excellent location wif ... \n",
589 | "2 Yun ah the ubi one say if wan call by tomorrow... \n",
590 | "3 Hey tmr maybe can meet you at yck \n",
591 | "4 Oh i asked for fun Haha take care \n",
592 | "\n",
593 | " context/0 \\\n",
594 | "0 m walking in citylink now faster come down Me ... \n",
595 | "1 nights We nt staying at port step liao Too ex \n",
596 | "2 Hey pple or for nights Excellent location wif ... \n",
597 | "3 Yun ah the ubi one say if wan call by tomorrow... \n",
598 | "4 Hey tmr maybe can meet you at yck \n",
599 | "\n",
600 | " context/1 \\\n",
601 | "0 Meet after lunch la \n",
602 | "1 m walking in citylink now faster come down Me ... \n",
603 | "2 nights We nt staying at port step liao Too ex \n",
604 | "3 Hey pple or for nights Excellent location wif ... \n",
605 | "4 Yun ah the ubi one say if wan call by tomorrow... \n",
606 | "\n",
607 | " context/2 \\\n",
608 | "0 Den only weekdays got special price Haiz Cant ... \n",
609 | "1 Meet after lunch la \n",
610 | "2 m walking in citylink now faster come down Me ... \n",
611 | "3 nights We nt staying at port step liao Too ex \n",
612 | "4 Hey pple or for nights Excellent location wif ... \n",
613 | "\n",
614 | " context/3 \\\n",
615 | "0 I dunno until when Lets go learn pilates \n",
616 | "1 Den only weekdays got special price Haiz Cant ... \n",
617 | "2 Meet after lunch la \n",
618 | "3 m walking in citylink now faster come down Me ... \n",
619 | "4 nights We nt staying at port step liao Too ex \n",
620 | "\n",
621 | " context/4 \\\n",
622 | "0 Go until jurong point crazy Available only in ... \n",
623 | "1 I dunno until when Lets go learn pilates \n",
624 | "2 Den only weekdays got special price Haiz Cant ... \n",
625 | "3 Meet after lunch la \n",
626 | "4 m walking in citylink now faster come down Me ... \n",
627 | "\n",
628 | " context/5 \n",
629 | "0 Bugis oso near wat \n",
630 | "1 Go until jurong point crazy Available only in ... \n",
631 | "2 I dunno until when Lets go learn pilates \n",
632 | "3 Den only weekdays got special price Haiz Cant ... \n",
633 | "4 Meet after lunch la "
634 | ]
635 | },
636 | "execution_count": 19,
637 | "metadata": {},
638 | "output_type": "execute_result"
639 | }
640 | ],
641 | "source": [
642 | "df.head()"
643 | ]
644 | },
645 | {
646 | "cell_type": "code",
647 | "execution_count": 20,
648 | "metadata": {},
649 | "outputs": [],
650 | "source": [
651 | "# Split the df into training andd validation set\n",
652 | "\n",
653 | "train_df, validate_df = train_test_split(df, random_state=42, test_size=0.2)"
654 | ]
655 | },
656 | {
657 | "cell_type": "code",
658 | "execution_count": 21,
659 | "metadata": {},
660 | "outputs": [
661 | {
662 | "data": {
663 | "text/plain": [
664 | "((23482, 8), (5871, 8))"
665 | ]
666 | },
667 | "execution_count": 21,
668 | "metadata": {},
669 | "output_type": "execute_result"
670 | }
671 | ],
672 | "source": [
673 | "train_df.shape, validate_df.shape"
674 | ]
675 | },
676 | {
677 | "cell_type": "code",
678 | "execution_count": 22,
679 | "metadata": {},
680 | "outputs": [],
681 | "source": [
682 | "# uncomment the 2 lines below to generate the CSV files for training in the next notebook\n",
683 | "\n",
684 | "#train_df.to_csv('../data/train_df.csv', index=False)\n",
685 | "#validate_df.to_csv('../data/validate_df.csv', index=False)"
686 | ]
687 | },
688 | {
689 | "cell_type": "markdown",
690 | "metadata": {},
691 | "source": [
692 | "## 3. OPTIONAL: ADDITIONAL DATASET FOR AITEXTGEN\n",
693 | "\n",
694 | "There are a number of other options out there for those who want to experiment further with text generation. One interesting library is [aitextgen](https://github.com/minimaxir/aitextgen). I didn't get very good results from the dataset, but I'm including the option here for those who want to try it out in any case."
695 | ]
696 | },
697 | {
698 | "cell_type": "code",
699 | "execution_count": 23,
700 | "metadata": {},
701 | "outputs": [],
702 | "source": [
703 | "#sms_text = sms['clean_text'].values.tolist()\n",
704 | "\n",
705 | "#with open(\"../data/singlish_sms.txt\", \"w\") as output:\n",
706 | "# output.write(str(sms_text))"
707 | ]
708 | },
709 | {
710 | "cell_type": "code",
711 | "execution_count": null,
712 | "metadata": {},
713 | "outputs": [],
714 | "source": []
715 | }
716 | ],
717 | "metadata": {
718 | "kernelspec": {
719 | "display_name": "Python 3",
720 | "language": "python",
721 | "name": "python3"
722 | },
723 | "language_info": {
724 | "codemirror_mode": {
725 | "name": "ipython",
726 | "version": 3
727 | },
728 | "file_extension": ".py",
729 | "mimetype": "text/x-python",
730 | "name": "python",
731 | "nbconvert_exporter": "python",
732 | "pygments_lexer": "ipython3",
733 | "version": "3.6.8"
734 | }
735 | },
736 | "nbformat": 4,
737 | "nbformat_minor": 2
738 | }
739 |
--------------------------------------------------------------------------------
/notebooks/3.2_dash_chat_app_cch.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "# AI TEXT GENERATION FOR BEGINNERS: CREATING AND FINE TUNING YOUR OWN SINGLISH CHATBOT\n",
8 | "\n",
9 | "# PART 3: TEST YOUR FINE TUNED BOT ON A CHAT APP (COLAB)\n",
10 | "\n",
11 | "Loading the fine tuned model on a chat app is a good way to assess the results. The good folks at Plotly have released a number of [sample NLP apps](https://community.plotly.com/t/show-tell-dash-transformers-apps-auto-summarization-translator-and-chatbot-are-now-runnable-on-colab/42762) based on the transformers library that would allow us to quickly see how the fine tuned Singlish bot performs.\n",
12 | "\n",
13 | "The code below is based on this [Colab notebook](https://colab.research.google.com/github/plotly/dash-sample-apps/blob/master/apps/dash-chatbot/ColabDemo.ipynb) by [Lu Xing Han](https://github.com/xhlulu) @ Plotly, with minor changes on my part."
14 | ]
15 | },
16 | {
17 | "cell_type": "markdown",
18 | "metadata": {},
19 | "source": [
20 | "# 1. IMPORTS AND CONNECTING TO YOUR GDRIVE/FOLDER\n",
21 | "\n",
22 | "Assuming that the model was fine tuned successfully, let's install the necessary libraries and then connect to your Google Drive account and folder where the required files are located ('output-medium')."
23 | ]
24 | },
25 | {
26 | "cell_type": "code",
27 | "execution_count": null,
28 | "metadata": {
29 | "colab": {
30 | "base_uri": "https://localhost:8080/",
31 | "height": 391
32 | },
33 | "colab_type": "code",
34 | "id": "pPEkJcCxSqxs",
35 | "outputId": "cf0a30a9-6362-4956-b915-ac73a081ea03"
36 | },
37 | "outputs": [],
38 | "source": [
39 | "!pip install -q jupyter-dash==0.3.0rc1 dash-bootstrap-components transformers"
40 | ]
41 | },
42 | {
43 | "cell_type": "code",
44 | "execution_count": null,
45 | "metadata": {
46 | "colab": {},
47 | "colab_type": "code",
48 | "id": "wNQanZGJcJhx"
49 | },
50 | "outputs": [],
51 | "source": [
52 | "import dash\n",
53 | "import dash_html_components as html\n",
54 | "import dash_core_components as dcc\n",
55 | "import dash_bootstrap_components as dbc\n",
56 | "import os\n",
57 | "import time\n",
58 | "import torch\n",
59 | "\n",
60 | "from dash.dependencies import Input, Output, State\n",
61 | "from google.colab import drive\n",
62 | "from jupyter_dash import JupyterDash\n",
63 | "from transformers import AutoModelForCausalLM, AutoTokenizer"
64 | ]
65 | },
66 | {
67 | "cell_type": "code",
68 | "execution_count": null,
69 | "metadata": {
70 | "colab": {
71 | "base_uri": "https://localhost:8080/",
72 | "height": 122
73 | },
74 | "colab_type": "code",
75 | "id": "cTxQe8v_TJ4L",
76 | "outputId": "2c4b992e-a25c-4045-f9cf-9edecdb9637b"
77 | },
78 | "outputs": [],
79 | "source": [
80 | "# get credentials to log into your GDrive account\n",
81 | "\n",
82 | "drive.mount('/content/drive/')"
83 | ]
84 | },
85 | {
86 | "cell_type": "code",
87 | "execution_count": null,
88 | "metadata": {
89 | "colab": {},
90 | "colab_type": "code",
91 | "id": "A2SMEZzYTPVo"
92 | },
93 | "outputs": [],
94 | "source": [
95 | "# switch to the right directory where the fine-tuned model/files are located\n",
96 | "\n",
97 | "os.chdir(\"/content/drive/My Drive/Colab Notebooks\")"
98 | ]
99 | },
100 | {
101 | "cell_type": "code",
102 | "execution_count": null,
103 | "metadata": {
104 | "colab": {
105 | "base_uri": "https://localhost:8080/",
106 | "height": 215,
107 | "referenced_widgets": [
108 | "f9f3950f71ab4faf820e328f906bd184",
109 | "82e93edff40c44d18a00ee58a9f8319c",
110 | "900c67376d0843aa855681748e68d637",
111 | "df87db6be6a843048c6615c7f23a6837",
112 | "34ef5f16a9bb401cbf6075e7fca3f4c1",
113 | "9d637ff83cb545ac846ceafea0165cb2",
114 | "251b02a16e65467cbafd5f783c031fdf",
115 | "ca1a1aa529074dbdb5384858a5463b55",
116 | "5ed308bb81104a708dea0bd34097f708",
117 | "9486ceb22a0643f0858710e12442c623",
118 | "5099abed070a4698b8d66125b90f8b72",
119 | "c2a9536e12b34249a7f54da451e46500",
120 | "1fec9b040cf54d908af23343ecd71ab6",
121 | "b2bd416e9cf14137915e14163029ea19",
122 | "602c31766d92445aad40725d5fd016bb",
123 | "0b479c45e3714b74a432e40f57dc38bb",
124 | "24f5686580354645b27a3aa8e74424e2",
125 | "a4ba49fc24454f7cb88d805de5e09391",
126 | "24039552e1aa4798b9ceb0c7b6b34f51",
127 | "9a4704555ac44daa9090e5ee228db98b",
128 | "5b737580532b4eb0aafd01594cf439b4",
129 | "48f744b848574330831381e56e740f4f",
130 | "6b73ae3997354d91b305682ebfe2c843",
131 | "05f9bc913dec4e0283d609e79860acfd"
132 | ]
133 | },
134 | "colab_type": "code",
135 | "id": "vmYDDzbccMX0",
136 | "outputId": "41c92fea-112f-48bb-dc01-2ad13831c403"
137 | },
138 | "outputs": [],
139 | "source": [
140 | "# switch to DialoGPT-small if you trained on the smaller model\n",
141 | "\n",
142 | "device = \"cuda\" if torch.cuda.is_available() else \"cpu\"\n",
143 | "print(f\"Device: {device}\")\n",
144 | "\n",
145 | "print(\"Start loading model...\")\n",
146 | "tokenizer = AutoTokenizer.from_pretrained(\"microsoft/DialoGPT-medium\")\n",
147 | "model = AutoModelForCausalLM.from_pretrained(\"output-medium\") #change the file name if you amended it\n",
148 | "\n",
149 | "# Switch to cuda, eval mode, and FP16 for faster inference\n",
150 | "if device == \"cuda\":\n",
151 | " model = model.half()\n",
152 | "model.to(device)\n",
153 | "model.eval()\n",
154 | "\n",
155 | "print(\"Done.\")"
156 | ]
157 | },
158 | {
159 | "cell_type": "markdown",
160 | "metadata": {},
161 | "source": [
162 | "# 2. DEFINE CHAT APP"
163 | ]
164 | },
165 | {
166 | "cell_type": "code",
167 | "execution_count": null,
168 | "metadata": {
169 | "colab": {},
170 | "colab_type": "code",
171 | "id": "QXEtdeyicNuF"
172 | },
173 | "outputs": [],
174 | "source": [
175 | "def textbox(text, box=\"other\"):\n",
176 | " style = {\n",
177 | " \"max-width\": \"55%\",\n",
178 | " \"width\": \"max-content\",\n",
179 | " \"padding\": \"10px 15px\",\n",
180 | " \"border-radius\": \"25px\",\n",
181 | " }\n",
182 | "\n",
183 | " if box == \"self\":\n",
184 | " style[\"margin-left\"] = \"auto\"\n",
185 | " style[\"margin-right\"] = 0\n",
186 | "\n",
187 | " color = \"primary\"\n",
188 | " inverse = True\n",
189 | "\n",
190 | " elif box == \"other\":\n",
191 | " style[\"margin-left\"] = 0\n",
192 | " style[\"margin-right\"] = \"auto\"\n",
193 | "\n",
194 | " color = \"light\"\n",
195 | " inverse = False\n",
196 | "\n",
197 | " else:\n",
198 | " raise ValueError(\"Incorrect option for `box`.\")\n",
199 | "\n",
200 | " return dbc.Card(text, style=style, body=True, color=color, inverse=inverse)"
201 | ]
202 | },
203 | {
204 | "cell_type": "code",
205 | "execution_count": null,
206 | "metadata": {
207 | "colab": {},
208 | "colab_type": "code",
209 | "id": "vGiS2sIPcUIt"
210 | },
211 | "outputs": [],
212 | "source": [
213 | "conversation = html.Div(\n",
214 | " style={\n",
215 | " \"width\": \"80%\",\n",
216 | " \"max-width\": \"800px\",\n",
217 | " \"height\": \"70vh\",\n",
218 | " \"margin\": \"auto\",\n",
219 | " \"overflow-y\": \"auto\",\n",
220 | " },\n",
221 | " id=\"display-conversation\",\n",
222 | ")\n",
223 | "\n",
224 | "controls = dbc.InputGroup(\n",
225 | " style={\"width\": \"80%\", \"max-width\": \"800px\", \"margin\": \"auto\"},\n",
226 | " children=[\n",
227 | " dbc.Input(id=\"user-input\", placeholder=\"Write to the chatbot...\", type=\"text\"),\n",
228 | " dbc.InputGroupAddon(dbc.Button(\"Submit\", id=\"submit\"), addon_type=\"append\",),\n",
229 | " ],\n",
230 | ")\n",
231 | "\n",
232 | "\n",
233 | "# Define app\n",
234 | "app = JupyterDash(__name__, external_stylesheets=[dbc.themes.BOOTSTRAP])\n",
235 | "server = app.server\n",
236 | "\n",
237 | "\n",
238 | "# Define Layout\n",
239 | "app.layout = dbc.Container(\n",
240 | " fluid=True,\n",
241 | " children=[\n",
242 | " html.H1(\"Singlish Chatbot (with DialoGPT-medium)\"),\n",
243 | " html.Hr(),\n",
244 | " dcc.Store(id=\"store-conversation\", data=\"\"),\n",
245 | " conversation,\n",
246 | " controls,\n",
247 | " ],\n",
248 | ")"
249 | ]
250 | },
251 | {
252 | "cell_type": "code",
253 | "execution_count": null,
254 | "metadata": {
255 | "colab": {},
256 | "colab_type": "code",
257 | "id": "9n6HT0CIcWJ9"
258 | },
259 | "outputs": [],
260 | "source": [
261 | "@app.callback(\n",
262 | " Output(\"display-conversation\", \"children\"), [Input(\"store-conversation\", \"data\")]\n",
263 | ")\n",
264 | "def update_display(chat_history):\n",
265 | " return [\n",
266 | " textbox(x, box=\"self\") if i % 2 == 0 else textbox(x, box=\"other\")\n",
267 | " for i, x in enumerate(chat_history.split(tokenizer.eos_token)[:-1])\n",
268 | " ]\n",
269 | "\n",
270 | "\n",
271 | "@app.callback(\n",
272 | " [Output(\"store-conversation\", \"data\"), Output(\"user-input\", \"value\")],\n",
273 | " [Input(\"submit\", \"n_clicks\"), Input(\"user-input\", \"n_submit\")],\n",
274 | " [State(\"user-input\", \"value\"), State(\"store-conversation\", \"data\")],\n",
275 | ")\n",
276 | "def run_chatbot(n_clicks, n_submit, user_input, chat_history):\n",
277 | " if n_clicks == 0:\n",
278 | " return \"\", \"\"\n",
279 | "\n",
280 | " if user_input is None or user_input == \"\":\n",
281 | " return chat_history, \"\"\n",
282 | "\n",
283 | " # # temporary\n",
284 | " # return chat_history + user_input + \"<|endoftext|>\" + user_input + \"<|endoftext|>\", \"\"\n",
285 | "\n",
286 | " # encode the new user input, add the eos_token and return a tensor in Pytorch\n",
287 | " bot_input_ids = tokenizer.encode(\n",
288 | " chat_history + user_input + tokenizer.eos_token, return_tensors=\"pt\"\n",
289 | " ).to(device)\n",
290 | "\n",
291 | " # generate a response while limiting the total chat history to 1024 tokens,\n",
292 | " # uncomment some of the parameters or change the 'temperature' to see how results vary\n",
293 | " chat_history_ids = model.generate(\n",
294 | " bot_input_ids, max_length=1024, \n",
295 | " pad_token_id=tokenizer.eos_token_id,\n",
296 | " #no_repeat_ngram_size=3, \n",
297 | " #do_sample=True, \n",
298 | " #top_k=100, \n",
299 | " #top_p=0.7,\n",
300 | " temperature = 0.8\n",
301 | " )\n",
302 | " chat_history = tokenizer.decode(chat_history_ids[0])\n",
303 | "\n",
304 | " return chat_history, \"\""
305 | ]
306 | },
307 | {
308 | "cell_type": "code",
309 | "execution_count": null,
310 | "metadata": {
311 | "colab": {
312 | "base_uri": "https://localhost:8080/",
313 | "height": 51
314 | },
315 | "colab_type": "code",
316 | "id": "tgwQH_TXckgN",
317 | "outputId": "c8b1cb19-c205-45de-912b-d1cc7f2bf426"
318 | },
319 | "outputs": [],
320 | "source": [
321 | "# Click on the link to open the app.\n",
322 | "\n",
323 | "app.run_server(mode='external')"
324 | ]
325 | }
326 | ],
327 | "metadata": {
328 | "accelerator": "GPU",
329 | "colab": {
330 | "collapsed_sections": [],
331 | "name": "dash_chat.ipynb",
332 | "provenance": []
333 | },
334 | "kernelspec": {
335 | "display_name": "Python 3",
336 | "language": "python",
337 | "name": "python3"
338 | },
339 | "language_info": {
340 | "codemirror_mode": {
341 | "name": "ipython",
342 | "version": 3
343 | },
344 | "file_extension": ".py",
345 | "mimetype": "text/x-python",
346 | "name": "python",
347 | "nbconvert_exporter": "python",
348 | "pygments_lexer": "ipython3",
349 | "version": "3.6.8"
350 | },
351 | "widgets": {
352 | "application/vnd.jupyter.widget-state+json": {
353 | "05f9bc913dec4e0283d609e79860acfd": {
354 | "model_module": "@jupyter-widgets/base",
355 | "model_name": "LayoutModel",
356 | "state": {
357 | "_model_module": "@jupyter-widgets/base",
358 | "_model_module_version": "1.2.0",
359 | "_model_name": "LayoutModel",
360 | "_view_count": null,
361 | "_view_module": "@jupyter-widgets/base",
362 | "_view_module_version": "1.2.0",
363 | "_view_name": "LayoutView",
364 | "align_content": null,
365 | "align_items": null,
366 | "align_self": null,
367 | "border": null,
368 | "bottom": null,
369 | "display": null,
370 | "flex": null,
371 | "flex_flow": null,
372 | "grid_area": null,
373 | "grid_auto_columns": null,
374 | "grid_auto_flow": null,
375 | "grid_auto_rows": null,
376 | "grid_column": null,
377 | "grid_gap": null,
378 | "grid_row": null,
379 | "grid_template_areas": null,
380 | "grid_template_columns": null,
381 | "grid_template_rows": null,
382 | "height": null,
383 | "justify_content": null,
384 | "justify_items": null,
385 | "left": null,
386 | "margin": null,
387 | "max_height": null,
388 | "max_width": null,
389 | "min_height": null,
390 | "min_width": null,
391 | "object_fit": null,
392 | "object_position": null,
393 | "order": null,
394 | "overflow": null,
395 | "overflow_x": null,
396 | "overflow_y": null,
397 | "padding": null,
398 | "right": null,
399 | "top": null,
400 | "visibility": null,
401 | "width": null
402 | }
403 | },
404 | "0b479c45e3714b74a432e40f57dc38bb": {
405 | "model_module": "@jupyter-widgets/base",
406 | "model_name": "LayoutModel",
407 | "state": {
408 | "_model_module": "@jupyter-widgets/base",
409 | "_model_module_version": "1.2.0",
410 | "_model_name": "LayoutModel",
411 | "_view_count": null,
412 | "_view_module": "@jupyter-widgets/base",
413 | "_view_module_version": "1.2.0",
414 | "_view_name": "LayoutView",
415 | "align_content": null,
416 | "align_items": null,
417 | "align_self": null,
418 | "border": null,
419 | "bottom": null,
420 | "display": null,
421 | "flex": null,
422 | "flex_flow": null,
423 | "grid_area": null,
424 | "grid_auto_columns": null,
425 | "grid_auto_flow": null,
426 | "grid_auto_rows": null,
427 | "grid_column": null,
428 | "grid_gap": null,
429 | "grid_row": null,
430 | "grid_template_areas": null,
431 | "grid_template_columns": null,
432 | "grid_template_rows": null,
433 | "height": null,
434 | "justify_content": null,
435 | "justify_items": null,
436 | "left": null,
437 | "margin": null,
438 | "max_height": null,
439 | "max_width": null,
440 | "min_height": null,
441 | "min_width": null,
442 | "object_fit": null,
443 | "object_position": null,
444 | "order": null,
445 | "overflow": null,
446 | "overflow_x": null,
447 | "overflow_y": null,
448 | "padding": null,
449 | "right": null,
450 | "top": null,
451 | "visibility": null,
452 | "width": null
453 | }
454 | },
455 | "1fec9b040cf54d908af23343ecd71ab6": {
456 | "model_module": "@jupyter-widgets/controls",
457 | "model_name": "ProgressStyleModel",
458 | "state": {
459 | "_model_module": "@jupyter-widgets/controls",
460 | "_model_module_version": "1.5.0",
461 | "_model_name": "ProgressStyleModel",
462 | "_view_count": null,
463 | "_view_module": "@jupyter-widgets/base",
464 | "_view_module_version": "1.2.0",
465 | "_view_name": "StyleView",
466 | "bar_color": null,
467 | "description_width": "initial"
468 | }
469 | },
470 | "24039552e1aa4798b9ceb0c7b6b34f51": {
471 | "model_module": "@jupyter-widgets/controls",
472 | "model_name": "FloatProgressModel",
473 | "state": {
474 | "_dom_classes": [],
475 | "_model_module": "@jupyter-widgets/controls",
476 | "_model_module_version": "1.5.0",
477 | "_model_name": "FloatProgressModel",
478 | "_view_count": null,
479 | "_view_module": "@jupyter-widgets/controls",
480 | "_view_module_version": "1.5.0",
481 | "_view_name": "ProgressView",
482 | "bar_style": "success",
483 | "description": "Downloading: 100%",
484 | "description_tooltip": null,
485 | "layout": "IPY_MODEL_48f744b848574330831381e56e740f4f",
486 | "max": 456318,
487 | "min": 0,
488 | "orientation": "horizontal",
489 | "style": "IPY_MODEL_5b737580532b4eb0aafd01594cf439b4",
490 | "value": 456318
491 | }
492 | },
493 | "24f5686580354645b27a3aa8e74424e2": {
494 | "model_module": "@jupyter-widgets/controls",
495 | "model_name": "HBoxModel",
496 | "state": {
497 | "_dom_classes": [],
498 | "_model_module": "@jupyter-widgets/controls",
499 | "_model_module_version": "1.5.0",
500 | "_model_name": "HBoxModel",
501 | "_view_count": null,
502 | "_view_module": "@jupyter-widgets/controls",
503 | "_view_module_version": "1.5.0",
504 | "_view_name": "HBoxView",
505 | "box_style": "",
506 | "children": [
507 | "IPY_MODEL_24039552e1aa4798b9ceb0c7b6b34f51",
508 | "IPY_MODEL_9a4704555ac44daa9090e5ee228db98b"
509 | ],
510 | "layout": "IPY_MODEL_a4ba49fc24454f7cb88d805de5e09391"
511 | }
512 | },
513 | "251b02a16e65467cbafd5f783c031fdf": {
514 | "model_module": "@jupyter-widgets/controls",
515 | "model_name": "DescriptionStyleModel",
516 | "state": {
517 | "_model_module": "@jupyter-widgets/controls",
518 | "_model_module_version": "1.5.0",
519 | "_model_name": "DescriptionStyleModel",
520 | "_view_count": null,
521 | "_view_module": "@jupyter-widgets/base",
522 | "_view_module_version": "1.2.0",
523 | "_view_name": "StyleView",
524 | "description_width": ""
525 | }
526 | },
527 | "34ef5f16a9bb401cbf6075e7fca3f4c1": {
528 | "model_module": "@jupyter-widgets/controls",
529 | "model_name": "ProgressStyleModel",
530 | "state": {
531 | "_model_module": "@jupyter-widgets/controls",
532 | "_model_module_version": "1.5.0",
533 | "_model_name": "ProgressStyleModel",
534 | "_view_count": null,
535 | "_view_module": "@jupyter-widgets/base",
536 | "_view_module_version": "1.2.0",
537 | "_view_name": "StyleView",
538 | "bar_color": null,
539 | "description_width": "initial"
540 | }
541 | },
542 | "48f744b848574330831381e56e740f4f": {
543 | "model_module": "@jupyter-widgets/base",
544 | "model_name": "LayoutModel",
545 | "state": {
546 | "_model_module": "@jupyter-widgets/base",
547 | "_model_module_version": "1.2.0",
548 | "_model_name": "LayoutModel",
549 | "_view_count": null,
550 | "_view_module": "@jupyter-widgets/base",
551 | "_view_module_version": "1.2.0",
552 | "_view_name": "LayoutView",
553 | "align_content": null,
554 | "align_items": null,
555 | "align_self": null,
556 | "border": null,
557 | "bottom": null,
558 | "display": null,
559 | "flex": null,
560 | "flex_flow": null,
561 | "grid_area": null,
562 | "grid_auto_columns": null,
563 | "grid_auto_flow": null,
564 | "grid_auto_rows": null,
565 | "grid_column": null,
566 | "grid_gap": null,
567 | "grid_row": null,
568 | "grid_template_areas": null,
569 | "grid_template_columns": null,
570 | "grid_template_rows": null,
571 | "height": null,
572 | "justify_content": null,
573 | "justify_items": null,
574 | "left": null,
575 | "margin": null,
576 | "max_height": null,
577 | "max_width": null,
578 | "min_height": null,
579 | "min_width": null,
580 | "object_fit": null,
581 | "object_position": null,
582 | "order": null,
583 | "overflow": null,
584 | "overflow_x": null,
585 | "overflow_y": null,
586 | "padding": null,
587 | "right": null,
588 | "top": null,
589 | "visibility": null,
590 | "width": null
591 | }
592 | },
593 | "5099abed070a4698b8d66125b90f8b72": {
594 | "model_module": "@jupyter-widgets/controls",
595 | "model_name": "FloatProgressModel",
596 | "state": {
597 | "_dom_classes": [],
598 | "_model_module": "@jupyter-widgets/controls",
599 | "_model_module_version": "1.5.0",
600 | "_model_name": "FloatProgressModel",
601 | "_view_count": null,
602 | "_view_module": "@jupyter-widgets/controls",
603 | "_view_module_version": "1.5.0",
604 | "_view_name": "ProgressView",
605 | "bar_style": "success",
606 | "description": "Downloading: 100%",
607 | "description_tooltip": null,
608 | "layout": "IPY_MODEL_b2bd416e9cf14137915e14163029ea19",
609 | "max": 1042301,
610 | "min": 0,
611 | "orientation": "horizontal",
612 | "style": "IPY_MODEL_1fec9b040cf54d908af23343ecd71ab6",
613 | "value": 1042301
614 | }
615 | },
616 | "5b737580532b4eb0aafd01594cf439b4": {
617 | "model_module": "@jupyter-widgets/controls",
618 | "model_name": "ProgressStyleModel",
619 | "state": {
620 | "_model_module": "@jupyter-widgets/controls",
621 | "_model_module_version": "1.5.0",
622 | "_model_name": "ProgressStyleModel",
623 | "_view_count": null,
624 | "_view_module": "@jupyter-widgets/base",
625 | "_view_module_version": "1.2.0",
626 | "_view_name": "StyleView",
627 | "bar_color": null,
628 | "description_width": "initial"
629 | }
630 | },
631 | "5ed308bb81104a708dea0bd34097f708": {
632 | "model_module": "@jupyter-widgets/controls",
633 | "model_name": "HBoxModel",
634 | "state": {
635 | "_dom_classes": [],
636 | "_model_module": "@jupyter-widgets/controls",
637 | "_model_module_version": "1.5.0",
638 | "_model_name": "HBoxModel",
639 | "_view_count": null,
640 | "_view_module": "@jupyter-widgets/controls",
641 | "_view_module_version": "1.5.0",
642 | "_view_name": "HBoxView",
643 | "box_style": "",
644 | "children": [
645 | "IPY_MODEL_5099abed070a4698b8d66125b90f8b72",
646 | "IPY_MODEL_c2a9536e12b34249a7f54da451e46500"
647 | ],
648 | "layout": "IPY_MODEL_9486ceb22a0643f0858710e12442c623"
649 | }
650 | },
651 | "602c31766d92445aad40725d5fd016bb": {
652 | "model_module": "@jupyter-widgets/controls",
653 | "model_name": "DescriptionStyleModel",
654 | "state": {
655 | "_model_module": "@jupyter-widgets/controls",
656 | "_model_module_version": "1.5.0",
657 | "_model_name": "DescriptionStyleModel",
658 | "_view_count": null,
659 | "_view_module": "@jupyter-widgets/base",
660 | "_view_module_version": "1.2.0",
661 | "_view_name": "StyleView",
662 | "description_width": ""
663 | }
664 | },
665 | "6b73ae3997354d91b305682ebfe2c843": {
666 | "model_module": "@jupyter-widgets/controls",
667 | "model_name": "DescriptionStyleModel",
668 | "state": {
669 | "_model_module": "@jupyter-widgets/controls",
670 | "_model_module_version": "1.5.0",
671 | "_model_name": "DescriptionStyleModel",
672 | "_view_count": null,
673 | "_view_module": "@jupyter-widgets/base",
674 | "_view_module_version": "1.2.0",
675 | "_view_name": "StyleView",
676 | "description_width": ""
677 | }
678 | },
679 | "82e93edff40c44d18a00ee58a9f8319c": {
680 | "model_module": "@jupyter-widgets/base",
681 | "model_name": "LayoutModel",
682 | "state": {
683 | "_model_module": "@jupyter-widgets/base",
684 | "_model_module_version": "1.2.0",
685 | "_model_name": "LayoutModel",
686 | "_view_count": null,
687 | "_view_module": "@jupyter-widgets/base",
688 | "_view_module_version": "1.2.0",
689 | "_view_name": "LayoutView",
690 | "align_content": null,
691 | "align_items": null,
692 | "align_self": null,
693 | "border": null,
694 | "bottom": null,
695 | "display": null,
696 | "flex": null,
697 | "flex_flow": null,
698 | "grid_area": null,
699 | "grid_auto_columns": null,
700 | "grid_auto_flow": null,
701 | "grid_auto_rows": null,
702 | "grid_column": null,
703 | "grid_gap": null,
704 | "grid_row": null,
705 | "grid_template_areas": null,
706 | "grid_template_columns": null,
707 | "grid_template_rows": null,
708 | "height": null,
709 | "justify_content": null,
710 | "justify_items": null,
711 | "left": null,
712 | "margin": null,
713 | "max_height": null,
714 | "max_width": null,
715 | "min_height": null,
716 | "min_width": null,
717 | "object_fit": null,
718 | "object_position": null,
719 | "order": null,
720 | "overflow": null,
721 | "overflow_x": null,
722 | "overflow_y": null,
723 | "padding": null,
724 | "right": null,
725 | "top": null,
726 | "visibility": null,
727 | "width": null
728 | }
729 | },
730 | "900c67376d0843aa855681748e68d637": {
731 | "model_module": "@jupyter-widgets/controls",
732 | "model_name": "FloatProgressModel",
733 | "state": {
734 | "_dom_classes": [],
735 | "_model_module": "@jupyter-widgets/controls",
736 | "_model_module_version": "1.5.0",
737 | "_model_name": "FloatProgressModel",
738 | "_view_count": null,
739 | "_view_module": "@jupyter-widgets/controls",
740 | "_view_module_version": "1.5.0",
741 | "_view_name": "ProgressView",
742 | "bar_style": "success",
743 | "description": "Downloading: 100%",
744 | "description_tooltip": null,
745 | "layout": "IPY_MODEL_9d637ff83cb545ac846ceafea0165cb2",
746 | "max": 555,
747 | "min": 0,
748 | "orientation": "horizontal",
749 | "style": "IPY_MODEL_34ef5f16a9bb401cbf6075e7fca3f4c1",
750 | "value": 555
751 | }
752 | },
753 | "9486ceb22a0643f0858710e12442c623": {
754 | "model_module": "@jupyter-widgets/base",
755 | "model_name": "LayoutModel",
756 | "state": {
757 | "_model_module": "@jupyter-widgets/base",
758 | "_model_module_version": "1.2.0",
759 | "_model_name": "LayoutModel",
760 | "_view_count": null,
761 | "_view_module": "@jupyter-widgets/base",
762 | "_view_module_version": "1.2.0",
763 | "_view_name": "LayoutView",
764 | "align_content": null,
765 | "align_items": null,
766 | "align_self": null,
767 | "border": null,
768 | "bottom": null,
769 | "display": null,
770 | "flex": null,
771 | "flex_flow": null,
772 | "grid_area": null,
773 | "grid_auto_columns": null,
774 | "grid_auto_flow": null,
775 | "grid_auto_rows": null,
776 | "grid_column": null,
777 | "grid_gap": null,
778 | "grid_row": null,
779 | "grid_template_areas": null,
780 | "grid_template_columns": null,
781 | "grid_template_rows": null,
782 | "height": null,
783 | "justify_content": null,
784 | "justify_items": null,
785 | "left": null,
786 | "margin": null,
787 | "max_height": null,
788 | "max_width": null,
789 | "min_height": null,
790 | "min_width": null,
791 | "object_fit": null,
792 | "object_position": null,
793 | "order": null,
794 | "overflow": null,
795 | "overflow_x": null,
796 | "overflow_y": null,
797 | "padding": null,
798 | "right": null,
799 | "top": null,
800 | "visibility": null,
801 | "width": null
802 | }
803 | },
804 | "9a4704555ac44daa9090e5ee228db98b": {
805 | "model_module": "@jupyter-widgets/controls",
806 | "model_name": "HTMLModel",
807 | "state": {
808 | "_dom_classes": [],
809 | "_model_module": "@jupyter-widgets/controls",
810 | "_model_module_version": "1.5.0",
811 | "_model_name": "HTMLModel",
812 | "_view_count": null,
813 | "_view_module": "@jupyter-widgets/controls",
814 | "_view_module_version": "1.5.0",
815 | "_view_name": "HTMLView",
816 | "description": "",
817 | "description_tooltip": null,
818 | "layout": "IPY_MODEL_05f9bc913dec4e0283d609e79860acfd",
819 | "placeholder": "",
820 | "style": "IPY_MODEL_6b73ae3997354d91b305682ebfe2c843",
821 | "value": " 456k/456k [00:02<00:00, 222kB/s]"
822 | }
823 | },
824 | "9d637ff83cb545ac846ceafea0165cb2": {
825 | "model_module": "@jupyter-widgets/base",
826 | "model_name": "LayoutModel",
827 | "state": {
828 | "_model_module": "@jupyter-widgets/base",
829 | "_model_module_version": "1.2.0",
830 | "_model_name": "LayoutModel",
831 | "_view_count": null,
832 | "_view_module": "@jupyter-widgets/base",
833 | "_view_module_version": "1.2.0",
834 | "_view_name": "LayoutView",
835 | "align_content": null,
836 | "align_items": null,
837 | "align_self": null,
838 | "border": null,
839 | "bottom": null,
840 | "display": null,
841 | "flex": null,
842 | "flex_flow": null,
843 | "grid_area": null,
844 | "grid_auto_columns": null,
845 | "grid_auto_flow": null,
846 | "grid_auto_rows": null,
847 | "grid_column": null,
848 | "grid_gap": null,
849 | "grid_row": null,
850 | "grid_template_areas": null,
851 | "grid_template_columns": null,
852 | "grid_template_rows": null,
853 | "height": null,
854 | "justify_content": null,
855 | "justify_items": null,
856 | "left": null,
857 | "margin": null,
858 | "max_height": null,
859 | "max_width": null,
860 | "min_height": null,
861 | "min_width": null,
862 | "object_fit": null,
863 | "object_position": null,
864 | "order": null,
865 | "overflow": null,
866 | "overflow_x": null,
867 | "overflow_y": null,
868 | "padding": null,
869 | "right": null,
870 | "top": null,
871 | "visibility": null,
872 | "width": null
873 | }
874 | },
875 | "a4ba49fc24454f7cb88d805de5e09391": {
876 | "model_module": "@jupyter-widgets/base",
877 | "model_name": "LayoutModel",
878 | "state": {
879 | "_model_module": "@jupyter-widgets/base",
880 | "_model_module_version": "1.2.0",
881 | "_model_name": "LayoutModel",
882 | "_view_count": null,
883 | "_view_module": "@jupyter-widgets/base",
884 | "_view_module_version": "1.2.0",
885 | "_view_name": "LayoutView",
886 | "align_content": null,
887 | "align_items": null,
888 | "align_self": null,
889 | "border": null,
890 | "bottom": null,
891 | "display": null,
892 | "flex": null,
893 | "flex_flow": null,
894 | "grid_area": null,
895 | "grid_auto_columns": null,
896 | "grid_auto_flow": null,
897 | "grid_auto_rows": null,
898 | "grid_column": null,
899 | "grid_gap": null,
900 | "grid_row": null,
901 | "grid_template_areas": null,
902 | "grid_template_columns": null,
903 | "grid_template_rows": null,
904 | "height": null,
905 | "justify_content": null,
906 | "justify_items": null,
907 | "left": null,
908 | "margin": null,
909 | "max_height": null,
910 | "max_width": null,
911 | "min_height": null,
912 | "min_width": null,
913 | "object_fit": null,
914 | "object_position": null,
915 | "order": null,
916 | "overflow": null,
917 | "overflow_x": null,
918 | "overflow_y": null,
919 | "padding": null,
920 | "right": null,
921 | "top": null,
922 | "visibility": null,
923 | "width": null
924 | }
925 | },
926 | "b2bd416e9cf14137915e14163029ea19": {
927 | "model_module": "@jupyter-widgets/base",
928 | "model_name": "LayoutModel",
929 | "state": {
930 | "_model_module": "@jupyter-widgets/base",
931 | "_model_module_version": "1.2.0",
932 | "_model_name": "LayoutModel",
933 | "_view_count": null,
934 | "_view_module": "@jupyter-widgets/base",
935 | "_view_module_version": "1.2.0",
936 | "_view_name": "LayoutView",
937 | "align_content": null,
938 | "align_items": null,
939 | "align_self": null,
940 | "border": null,
941 | "bottom": null,
942 | "display": null,
943 | "flex": null,
944 | "flex_flow": null,
945 | "grid_area": null,
946 | "grid_auto_columns": null,
947 | "grid_auto_flow": null,
948 | "grid_auto_rows": null,
949 | "grid_column": null,
950 | "grid_gap": null,
951 | "grid_row": null,
952 | "grid_template_areas": null,
953 | "grid_template_columns": null,
954 | "grid_template_rows": null,
955 | "height": null,
956 | "justify_content": null,
957 | "justify_items": null,
958 | "left": null,
959 | "margin": null,
960 | "max_height": null,
961 | "max_width": null,
962 | "min_height": null,
963 | "min_width": null,
964 | "object_fit": null,
965 | "object_position": null,
966 | "order": null,
967 | "overflow": null,
968 | "overflow_x": null,
969 | "overflow_y": null,
970 | "padding": null,
971 | "right": null,
972 | "top": null,
973 | "visibility": null,
974 | "width": null
975 | }
976 | },
977 | "c2a9536e12b34249a7f54da451e46500": {
978 | "model_module": "@jupyter-widgets/controls",
979 | "model_name": "HTMLModel",
980 | "state": {
981 | "_dom_classes": [],
982 | "_model_module": "@jupyter-widgets/controls",
983 | "_model_module_version": "1.5.0",
984 | "_model_name": "HTMLModel",
985 | "_view_count": null,
986 | "_view_module": "@jupyter-widgets/controls",
987 | "_view_module_version": "1.5.0",
988 | "_view_name": "HTMLView",
989 | "description": "",
990 | "description_tooltip": null,
991 | "layout": "IPY_MODEL_0b479c45e3714b74a432e40f57dc38bb",
992 | "placeholder": "",
993 | "style": "IPY_MODEL_602c31766d92445aad40725d5fd016bb",
994 | "value": " 1.04M/1.04M [00:03<00:00, 302kB/s]"
995 | }
996 | },
997 | "ca1a1aa529074dbdb5384858a5463b55": {
998 | "model_module": "@jupyter-widgets/base",
999 | "model_name": "LayoutModel",
1000 | "state": {
1001 | "_model_module": "@jupyter-widgets/base",
1002 | "_model_module_version": "1.2.0",
1003 | "_model_name": "LayoutModel",
1004 | "_view_count": null,
1005 | "_view_module": "@jupyter-widgets/base",
1006 | "_view_module_version": "1.2.0",
1007 | "_view_name": "LayoutView",
1008 | "align_content": null,
1009 | "align_items": null,
1010 | "align_self": null,
1011 | "border": null,
1012 | "bottom": null,
1013 | "display": null,
1014 | "flex": null,
1015 | "flex_flow": null,
1016 | "grid_area": null,
1017 | "grid_auto_columns": null,
1018 | "grid_auto_flow": null,
1019 | "grid_auto_rows": null,
1020 | "grid_column": null,
1021 | "grid_gap": null,
1022 | "grid_row": null,
1023 | "grid_template_areas": null,
1024 | "grid_template_columns": null,
1025 | "grid_template_rows": null,
1026 | "height": null,
1027 | "justify_content": null,
1028 | "justify_items": null,
1029 | "left": null,
1030 | "margin": null,
1031 | "max_height": null,
1032 | "max_width": null,
1033 | "min_height": null,
1034 | "min_width": null,
1035 | "object_fit": null,
1036 | "object_position": null,
1037 | "order": null,
1038 | "overflow": null,
1039 | "overflow_x": null,
1040 | "overflow_y": null,
1041 | "padding": null,
1042 | "right": null,
1043 | "top": null,
1044 | "visibility": null,
1045 | "width": null
1046 | }
1047 | },
1048 | "df87db6be6a843048c6615c7f23a6837": {
1049 | "model_module": "@jupyter-widgets/controls",
1050 | "model_name": "HTMLModel",
1051 | "state": {
1052 | "_dom_classes": [],
1053 | "_model_module": "@jupyter-widgets/controls",
1054 | "_model_module_version": "1.5.0",
1055 | "_model_name": "HTMLModel",
1056 | "_view_count": null,
1057 | "_view_module": "@jupyter-widgets/controls",
1058 | "_view_module_version": "1.5.0",
1059 | "_view_name": "HTMLView",
1060 | "description": "",
1061 | "description_tooltip": null,
1062 | "layout": "IPY_MODEL_ca1a1aa529074dbdb5384858a5463b55",
1063 | "placeholder": "",
1064 | "style": "IPY_MODEL_251b02a16e65467cbafd5f783c031fdf",
1065 | "value": " 555/555 [00:04<00:00, 129B/s]"
1066 | }
1067 | },
1068 | "f9f3950f71ab4faf820e328f906bd184": {
1069 | "model_module": "@jupyter-widgets/controls",
1070 | "model_name": "HBoxModel",
1071 | "state": {
1072 | "_dom_classes": [],
1073 | "_model_module": "@jupyter-widgets/controls",
1074 | "_model_module_version": "1.5.0",
1075 | "_model_name": "HBoxModel",
1076 | "_view_count": null,
1077 | "_view_module": "@jupyter-widgets/controls",
1078 | "_view_module_version": "1.5.0",
1079 | "_view_name": "HBoxView",
1080 | "box_style": "",
1081 | "children": [
1082 | "IPY_MODEL_900c67376d0843aa855681748e68d637",
1083 | "IPY_MODEL_df87db6be6a843048c6615c7f23a6837"
1084 | ],
1085 | "layout": "IPY_MODEL_82e93edff40c44d18a00ee58a9f8319c"
1086 | }
1087 | }
1088 | }
1089 | }
1090 | },
1091 | "nbformat": 4,
1092 | "nbformat_minor": 1
1093 | }
1094 |
--------------------------------------------------------------------------------
/notebooks/3.3_aitextgen_cpu_cch.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "# AI TEXT GENERATION FOR BEGINNERS: CREATING AND FINE TUNING YOUR OWN SINGLISH CHATBOT\n",
8 | "\n",
9 | "# PART 4: ALTERNATIVE USING CPU\n",
10 | "\n",
11 | "If you are just starting out in NLP/data science, it is likely that you wouldn't want to spend money on Colab Pro + additonal storage before you are sure this is something you would be doing a lot more of in the future. Thankfully there are CPU-based alternatives if you are merely dipping your toes into this area.\n",
12 | "\n",
13 | "I'll just highlight one that I've been trying out - [aitextgen](https://github.com/minimaxir/aitextgen) by Max Woolf.\n",
14 | "\n",
15 | "The code below is lifted from the demo on his Github repo. This notebook ran for about 2 hours on a 2018 Mac Mini (64Gb RAM), but you can dial down the training parameters for a faster iteration. The results weren't as satisfactory as the ones from fine tuning DialoGPT-medium, but I reckon it's not a fair comparison.\n",
16 | "\n",
17 | "But if you are keen to try aitextgen on Colab, here's another [demo notebook](https://colab.research.google.com/drive/144MdX5aLqrQ3-YW-po81CQMrD6kpgpYh) you can try."
18 | ]
19 | },
20 | {
21 | "cell_type": "code",
22 | "execution_count": null,
23 | "metadata": {},
24 | "outputs": [],
25 | "source": [
26 | "# at the time of writing, aitextgen doesn't work with transformers > v3.0.0\n",
27 | "# check the version on your local machine if there's a conflict\n",
28 | "\n",
29 | "from aitextgen.TokenDataset import TokenDataset\n",
30 | "from aitextgen.tokenizers import train_tokenizer\n",
31 | "from aitextgen.utils import GPT2ConfigCPU\n",
32 | "from aitextgen import aitextgen"
33 | ]
34 | },
35 | {
36 | "cell_type": "code",
37 | "execution_count": null,
38 | "metadata": {},
39 | "outputs": [],
40 | "source": [
41 | "# this was created at the end of notebook 1.0\n",
42 | "\n",
43 | "file_name = \"../data/singlish_sms.txt\""
44 | ]
45 | },
46 | {
47 | "cell_type": "code",
48 | "execution_count": null,
49 | "metadata": {},
50 | "outputs": [],
51 | "source": [
52 | "# Train a custom BPE Tokenizer\n",
53 | "# This will save two files: aitextgen-vocab.json and aitextgen-merges.txt, which are needed to rebuild the tokenizer.\n",
54 | "\n",
55 | "train_tokenizer(file_name)\n",
56 | "vocab_file = \"aitextgen-vocab.json\"\n",
57 | "merges_file = \"aitextgen-merges.txt\""
58 | ]
59 | },
60 | {
61 | "cell_type": "code",
62 | "execution_count": null,
63 | "metadata": {},
64 | "outputs": [],
65 | "source": [
66 | "# GPT2ConfigCPU is a mini variant of GPT-2 optimized for CPU-training\n",
67 | "# e.g. the # of input tokens here is 64 vs. 1024 for base GPT-2\n",
68 | "\n",
69 | "config = GPT2ConfigCPU()"
70 | ]
71 | },
72 | {
73 | "cell_type": "code",
74 | "execution_count": null,
75 | "metadata": {},
76 | "outputs": [],
77 | "source": [
78 | "# Instantiate aitextgen using the created tokenizer and config\n",
79 | "ai = aitextgen(vocab_file=vocab_file, merges_file=merges_file, config=config)"
80 | ]
81 | },
82 | {
83 | "cell_type": "code",
84 | "execution_count": null,
85 | "metadata": {},
86 | "outputs": [],
87 | "source": [
88 | "# You can build datasets for training by creating TokenDatasets,\n",
89 | "# which automatically processes the dataset with the appropriate size.\n",
90 | "\n",
91 | "data = TokenDataset(\n",
92 | " file_name,\n",
93 | " vocab_file=vocab_file,\n",
94 | " merges_file=merges_file,\n",
95 | " block_size=64,\n",
96 | " num_workers=12,\n",
97 | ")\n"
98 | ]
99 | },
100 | {
101 | "cell_type": "code",
102 | "execution_count": null,
103 | "metadata": {},
104 | "outputs": [],
105 | "source": [
106 | "ai.train(\n",
107 | " data,\n",
108 | " batch_size=32,\n",
109 | " num_steps=20000,\n",
110 | " num_workers=12,\n",
111 | " learning_rate=1e-5,\n",
112 | " generate_every=10000,\n",
113 | " save_every=10000,\n",
114 | ")"
115 | ]
116 | },
117 | {
118 | "cell_type": "markdown",
119 | "metadata": {},
120 | "source": [
121 | "Sample training text you can expect to see:\n",
122 | "\n",
123 | "10,000 steps reached: saving model to /trained_model\n",
124 | "10,000 steps reached: generating sample texts.\n",
125 | "\n",
126 | "==========\n",
127 | "', 'Haha s my not so I know 'I just m in the the the best Haha', 'Haha what s the lot', 'Haha oh Haha I think we think t go my way time I m s the not I no I want to see I have to make me and it s I can be',\n",
128 | "==========\n",
129 | "\n",
130 | "20,000 steps reached: saving model to /trained_model\n",
131 | "20,000 steps reached: generating sample texts.\n",
132 | "==========\n",
133 | " slp', 'Hahaha okay it s really just be out for the last one haha I just know I m m at the house', 'Eh I m sure', 'Haha no no you want that s', 'Haha okay how to do you all', 'Haha but I m not not free', 'Haha no also"
134 | ]
135 | },
136 | {
137 | "cell_type": "code",
138 | "execution_count": null,
139 | "metadata": {},
140 | "outputs": [],
141 | "source": [
142 | "ai.generate(n=5, max_length=15, prompt=\"eh how ah\")"
143 | ]
144 | }
145 | ],
146 | "metadata": {
147 | "kernelspec": {
148 | "display_name": "Python 3",
149 | "language": "python",
150 | "name": "python3"
151 | },
152 | "language_info": {
153 | "codemirror_mode": {
154 | "name": "ipython",
155 | "version": 3
156 | },
157 | "file_extension": ".py",
158 | "mimetype": "text/x-python",
159 | "name": "python",
160 | "nbconvert_exporter": "python",
161 | "pygments_lexer": "ipython3",
162 | "version": "3.6.8"
163 | }
164 | },
165 | "nbformat": 4,
166 | "nbformat_minor": 2
167 | }
168 |
--------------------------------------------------------------------------------
/notebooks/4.4_tamil_to_english_fairseq.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "# MACHINE TRANSLATION WITH FAIRSEQ (2/2) - TAMIL_TO_ENGLISH\n",
8 | "\n",
9 | "Facebook's AI team recently released its machine translation models for Tamil<->English, and I was eager to give it a try since Tamil is among the most under-served languages in machine learning, and related language pairs are pretty hard to come by.\n",
10 | "\n",
11 | "This is also a good opportunity to try out FB's Fairseq library, which seems pretty user-friendly for folks who work with pandas dataframes. Over two short notebooks, I'll demo a simple workflow for:\n",
12 | "\n",
13 | "* translating English speeches and news stories to Tamil\n",
14 | "* translating Tamil speeches and news stories to English.\n",
15 | "\n",
16 | "## DATASET\n",
17 | "The datasets used in these two notebooks involve some existing ones already in use by other notebooks in this repo, as well as new ones selected for this exercise.\n",
18 | "\n",
19 | "* Existing datasets:\n",
20 | "\n",
21 | " - The English speeches are taken from an existing dataset comprising 11 speeches in 4 languages (English, Malay, Chinese, and Tamil) from the website of the Singapore Prime Minister's Office.\n",
22 | " - The English news stories (on Covid-19) were published on Singapore news outlet's CNA's website in March 2020, and were used in earlier notebooks on English-to-Chinese translation.\n",
23 | "\n",
24 | "* New datasets:\n",
25 | " - The Tamil speeches (tamil_speeches.csv) are also taken from the website of the Singapore Prime Minister's Office. These are official speeches with English versions (not direct translations though) for reference.\n",
26 | " - The Tamil news stories (tamil_stories.csv) are taken from Sethi, Singapore state broadcaster Mediacorp's Tamil-language news website\n",
27 | "I kept the new datasets small so as to keep the run times manageable.\n",
28 | "\n",
29 | "## RESULTS\n",
30 | "The output CSV files with the translated text and original copy can be [downloaded here](https://www.dropbox.com/sh/26b7q5tqyqp8kim/AAB6HGPhmrF4_Ijdr0NN8hAFa). \n",
31 | "\n",
32 | "There are still some obvious problems with the quality of the translation. But as mentioned in earlier notebooks, machine translation gets about 70-80% of the job done, allowing human translators to work more efficiently.\n",
33 | "\n",
34 | "I've not done comparisons to see whether the machine translation results from fairseq are better/comparable with those from MarianMT.\n",
35 | "\n",
36 | "This notebook focuses on Tamil-to-English translations. See notebook4.3 for English-to-Tamil translation."
37 | ]
38 | },
39 | {
40 | "cell_type": "code",
41 | "execution_count": 1,
42 | "metadata": {},
43 | "outputs": [],
44 | "source": [
45 | "import pandas as pd\n",
46 | "import re\n",
47 | "import torch\n",
48 | "import warnings\n",
49 | "\n",
50 | "warnings.filterwarnings('ignore')"
51 | ]
52 | },
53 | {
54 | "cell_type": "markdown",
55 | "metadata": {},
56 | "source": [
57 | "# 1. TRANSLATE TAMIL SPEECHES TO ENGLISH\n",
58 | "\n",
59 | "I'm unfamiliar with the tools out there for Tamil NLP, and there doesn't seem to be a Tamil-language equivalent for NLTK's sentence tokenizer in the wild. So I took the clumsy approach of splitting each sentence into a separate row for translation before concating the results back again. OK, I think, for a simple exercise like this but clearly not recommended if you need to do this in production......."
60 | ]
61 | },
62 | {
63 | "cell_type": "code",
64 | "execution_count": 2,
65 | "metadata": {},
66 | "outputs": [],
67 | "source": [
68 | "raw = pd.read_csv('../data/tamil_speeches.csv')"
69 | ]
70 | },
71 | {
72 | "cell_type": "code",
73 | "execution_count": 3,
74 | "metadata": {},
75 | "outputs": [
76 | {
77 | "data": {
78 | "text/html": [
79 | "\n",
80 | "\n",
93 | "
\n",
94 | " \n",
95 | " \n",
96 | " | \n",
97 | " Date | \n",
98 | " Speaker | \n",
99 | " Title | \n",
100 | " Language | \n",
101 | " Text | \n",
102 | " URL | \n",
103 | "
\n",
104 | " \n",
105 | " \n",
106 | " \n",
107 | " 0 | \n",
108 | " 2020-04-30 | \n",
109 | " Lee Hsien Loong | \n",
110 | " May Day Message 2020 | \n",
111 | " Tamil | \n",
112 | " இவ்வாண்டு, நாம் சிரமமான சூழ்நிலைகளுக்கு இடையில... | \n",
113 | " https://www.pmo.gov.sg/Newsroom/PM-Lee-Hsien-L... | \n",
114 | "
\n",
115 | " \n",
116 | " 1 | \n",
117 | " 2020-08-09 | \n",
118 | " S Iswaran | \n",
119 | " National Day Message 2020 | \n",
120 | " Tamil | \n",
121 | " ஒவ்வோர் ஆண்டும், மழையோ வெயிலோ, ஆகஸ்ட் 9-ஆம் தே... | \n",
122 | " https://www.pmo.gov.sg/Newsroom/National-Day-M... | \n",
123 | "
\n",
124 | " \n",
125 | " 2 | \n",
126 | " 2019-08-09 | \n",
127 | " S Iswaran | \n",
128 | " National Day Message 2019 | \n",
129 | " Tamil | \n",
130 | " தேசிய தினச் செய்தி 2019\\nஎன் சக சிங்கப்பூரர்கள... | \n",
131 | " https://www.pmo.gov.sg/Newsroom/National-Day-M... | \n",
132 | "
\n",
133 | " \n",
134 | " 3 | \n",
135 | " 2018-08-09 | \n",
136 | " S Iswaran | \n",
137 | " National Day Message 2018 | \n",
138 | " Tamil | \n",
139 | " என் சக சிங்கப்பூரர்களே, வணக்கம்.\\n\\nஒவ்வோர் ஆண... | \n",
140 | " https://www.pmo.gov.sg/Newsroom/national-day-m... | \n",
141 | "
\n",
142 | " \n",
143 | " 4 | \n",
144 | " 2017-08-09 | \n",
145 | " S Iswaran | \n",
146 | " National Day Message 2017 | \n",
147 | " Tamil | \n",
148 | " என் சக சிங்கப்பூரர்களே,\\nவணக்கம்.\\n\\nநான் இப்ப... | \n",
149 | " https://www.pmo.gov.sg/Newsroom/national-day-m... | \n",
150 | "
\n",
151 | " \n",
152 | "
\n",
153 | "
"
154 | ],
155 | "text/plain": [
156 | " Date Speaker Title Language \\\n",
157 | "0 2020-04-30 Lee Hsien Loong May Day Message 2020 Tamil \n",
158 | "1 2020-08-09 S Iswaran National Day Message 2020 Tamil \n",
159 | "2 2019-08-09 S Iswaran National Day Message 2019 Tamil \n",
160 | "3 2018-08-09 S Iswaran National Day Message 2018 Tamil \n",
161 | "4 2017-08-09 S Iswaran National Day Message 2017 Tamil \n",
162 | "\n",
163 | " Text \\\n",
164 | "0 இவ்வாண்டு, நாம் சிரமமான சூழ்நிலைகளுக்கு இடையில... \n",
165 | "1 ஒவ்வோர் ஆண்டும், மழையோ வெயிலோ, ஆகஸ்ட் 9-ஆம் தே... \n",
166 | "2 தேசிய தினச் செய்தி 2019\\nஎன் சக சிங்கப்பூரர்கள... \n",
167 | "3 என் சக சிங்கப்பூரர்களே, வணக்கம்.\\n\\nஒவ்வோர் ஆண... \n",
168 | "4 என் சக சிங்கப்பூரர்களே,\\nவணக்கம்.\\n\\nநான் இப்ப... \n",
169 | "\n",
170 | " URL \n",
171 | "0 https://www.pmo.gov.sg/Newsroom/PM-Lee-Hsien-L... \n",
172 | "1 https://www.pmo.gov.sg/Newsroom/National-Day-M... \n",
173 | "2 https://www.pmo.gov.sg/Newsroom/National-Day-M... \n",
174 | "3 https://www.pmo.gov.sg/Newsroom/national-day-m... \n",
175 | "4 https://www.pmo.gov.sg/Newsroom/national-day-m... "
176 | ]
177 | },
178 | "execution_count": 3,
179 | "metadata": {},
180 | "output_type": "execute_result"
181 | }
182 | ],
183 | "source": [
184 | "raw.head()"
185 | ]
186 | },
187 | {
188 | "cell_type": "markdown",
189 | "metadata": {},
190 | "source": [
191 | "## 1.2 SPLIT + CLEAN TEXT\n",
192 | "\n",
193 | "I've used this approach as well in earlier notebooks. Essentially the new function creates a new DF with the text split into individual rows."
194 | ]
195 | },
196 | {
197 | "cell_type": "code",
198 | "execution_count": 4,
199 | "metadata": {},
200 | "outputs": [],
201 | "source": [
202 | "# source: https://github.com/cognoma/genes/blob/721204091a96e55de6dcad165d6d8265e67e2a48/2.process.py#L61-L95\n",
203 | "def split_text(df, column, sep=\".\", keep=False):\n",
204 | " indexes = list()\n",
205 | " new_values = list()\n",
206 | " df = df.dropna(subset=[column])\n",
207 | " for i, presplit in enumerate(df[column].astype(str)):\n",
208 | " values = presplit.split(sep)\n",
209 | " if keep and len(values) > 1:\n",
210 | " indexes.append(i)\n",
211 | " new_values.append(presplit)\n",
212 | " for value in values:\n",
213 | " indexes.append(i)\n",
214 | " new_values.append(value)\n",
215 | " new_df = df.iloc[indexes, :].copy()\n",
216 | " new_df[column] = new_values\n",
217 | " return new_df"
218 | ]
219 | },
220 | {
221 | "cell_type": "code",
222 | "execution_count": 5,
223 | "metadata": {},
224 | "outputs": [],
225 | "source": [
226 | "def clean_text(text):\n",
227 | " text = re.sub(r\"\\n\", \" \", text)\n",
228 | " text = re.sub(r\"\\n\\n\", \" \", text)\n",
229 | " text = text.strip(\" \")\n",
230 | " text = re.sub(' +',' ', text).strip() # gets rid of multiple spaces and replace with a single\n",
231 | " return text"
232 | ]
233 | },
234 | {
235 | "cell_type": "code",
236 | "execution_count": 6,
237 | "metadata": {},
238 | "outputs": [],
239 | "source": [
240 | "raw[\"Clean_Text\"] = raw['Text'].map(lambda text: clean_text(text))\n",
241 | "\n",
242 | "speeches = split_text(raw, \"Clean_Text\")\n",
243 | "\n",
244 | "speeches = speeches[speeches[\"Clean_Text\"] != \"\"].copy()"
245 | ]
246 | },
247 | {
248 | "cell_type": "markdown",
249 | "metadata": {},
250 | "source": [
251 | "## 1.3 TRANSLATE\n",
252 | "\n",
253 | "This took about 11.5 minutes on my late-2015 iMac. Prob can go much faster on the newer machines or Colab Pro."
254 | ]
255 | },
256 | {
257 | "cell_type": "code",
258 | "execution_count": 7,
259 | "metadata": {},
260 | "outputs": [
261 | {
262 | "name": "stderr",
263 | "output_type": "stream",
264 | "text": [
265 | "Using cache found in /Users/empire/.cache/torch/hub/pytorch_fairseq_master\n"
266 | ]
267 | }
268 | ],
269 | "source": [
270 | "ta2en = torch.hub.load('pytorch/fairseq', 'transformer.wmt20.ta-en')"
271 | ]
272 | },
273 | {
274 | "cell_type": "code",
275 | "execution_count": 8,
276 | "metadata": {},
277 | "outputs": [
278 | {
279 | "name": "stdout",
280 | "output_type": "stream",
281 | "text": [
282 | "CPU times: user 34min 52s, sys: 5.31 s, total: 34min 58s\n",
283 | "Wall time: 8min 51s\n"
284 | ]
285 | }
286 | ],
287 | "source": [
288 | "%%time\n",
289 | "speeches[\"Machine_Translation\"] = speeches[\"Clean_Text\"].apply(lambda text: ta2en.translate(text))"
290 | ]
291 | },
292 | {
293 | "cell_type": "markdown",
294 | "metadata": {},
295 | "source": [
296 | "## 1.4 RE-ORG FOR CLARITY\n",
297 | "\n",
298 | "The translated speeches can be \"re-assembled\" back using a simple groupby operation and removing the duplicates. An additional step was needed to replace the odd \".,\" characters after joining up the rows."
299 | ]
300 | },
301 | {
302 | "cell_type": "code",
303 | "execution_count": 9,
304 | "metadata": {},
305 | "outputs": [
306 | {
307 | "name": "stdout",
308 | "output_type": "stream",
309 | "text": [
310 | "CPU times: user 68.5 ms, sys: 6.72 ms, total: 75.2 ms\n",
311 | "Wall time: 60 ms\n"
312 | ]
313 | }
314 | ],
315 | "source": [
316 | "%%time \n",
317 | "speeches['English_Translation'] = speeches.groupby([\"Title\"])[\"Machine_Translation\"].transform(lambda x: ','.join(x))\n",
318 | "\n",
319 | "speeches = speeches.drop_duplicates(subset=[\"English_Translation\"]).copy()\n",
320 | "\n",
321 | "speeches[\"English_Translation\"] = speeches['English_Translation'].str.replace(\".,\", \". \", regex=False)"
322 | ]
323 | },
324 | {
325 | "cell_type": "code",
326 | "execution_count": 10,
327 | "metadata": {},
328 | "outputs": [],
329 | "source": [
330 | "cols1 = [\"Date\", \"Speaker\", \"Title\", \"Text\", \"English_Translation\", \"URL\"]\n",
331 | "\n",
332 | "speeches_translated = speeches[cols1]"
333 | ]
334 | },
335 | {
336 | "cell_type": "code",
337 | "execution_count": 11,
338 | "metadata": {},
339 | "outputs": [
340 | {
341 | "data": {
342 | "text/html": [
343 | "\n",
344 | "\n",
357 | "
\n",
358 | " \n",
359 | " \n",
360 | " | \n",
361 | " Date | \n",
362 | " Speaker | \n",
363 | " Title | \n",
364 | " Text | \n",
365 | " English_Translation | \n",
366 | " URL | \n",
367 | "
\n",
368 | " \n",
369 | " \n",
370 | " \n",
371 | " 0 | \n",
372 | " 2020-04-30 | \n",
373 | " Lee Hsien Loong | \n",
374 | " May Day Message 2020 | \n",
375 | " இவ்வாண்டு, நாம் சிரமமான சூழ்நிலைகளுக்கு இடையில... | \n",
376 | " This year, we observe May Day, amid difficult ... | \n",
377 | " https://www.pmo.gov.sg/Newsroom/PM-Lee-Hsien-L... | \n",
378 | "
\n",
379 | " \n",
380 | " 1 | \n",
381 | " 2020-08-09 | \n",
382 | " S Iswaran | \n",
383 | " National Day Message 2020 | \n",
384 | " ஒவ்வோர் ஆண்டும், மழையோ வெயிலோ, ஆகஸ்ட் 9-ஆம் தே... | \n",
385 | " Every year, rain or heat, on August 9th, Singa... | \n",
386 | " https://www.pmo.gov.sg/Newsroom/National-Day-M... | \n",
387 | "
\n",
388 | " \n",
389 | " 2 | \n",
390 | " 2019-08-09 | \n",
391 | " S Iswaran | \n",
392 | " National Day Message 2019 | \n",
393 | " தேசிய தினச் செய்தி 2019\\nஎன் சக சிங்கப்பூரர்கள... | \n",
394 | " National Day News 2019 My fellow Singaporeans,... | \n",
395 | " https://www.pmo.gov.sg/Newsroom/National-Day-M... | \n",
396 | "
\n",
397 | " \n",
398 | " 3 | \n",
399 | " 2018-08-09 | \n",
400 | " S Iswaran | \n",
401 | " National Day Message 2018 | \n",
402 | " என் சக சிங்கப்பூரர்களே, வணக்கம்.\\n\\nஒவ்வோர் ஆண... | \n",
403 | " My fellow Singaporeans, salute. Every year, on... | \n",
404 | " https://www.pmo.gov.sg/Newsroom/national-day-m... | \n",
405 | "
\n",
406 | " \n",
407 | " 4 | \n",
408 | " 2017-08-09 | \n",
409 | " S Iswaran | \n",
410 | " National Day Message 2017 | \n",
411 | " என் சக சிங்கப்பூரர்களே,\\nவணக்கம்.\\n\\nநான் இப்ப... | \n",
412 | " My fellow Singaporeans, salute. I am now in th... | \n",
413 | " https://www.pmo.gov.sg/Newsroom/national-day-m... | \n",
414 | "
\n",
415 | " \n",
416 | "
\n",
417 | "
"
418 | ],
419 | "text/plain": [
420 | " Date Speaker Title \\\n",
421 | "0 2020-04-30 Lee Hsien Loong May Day Message 2020 \n",
422 | "1 2020-08-09 S Iswaran National Day Message 2020 \n",
423 | "2 2019-08-09 S Iswaran National Day Message 2019 \n",
424 | "3 2018-08-09 S Iswaran National Day Message 2018 \n",
425 | "4 2017-08-09 S Iswaran National Day Message 2017 \n",
426 | "\n",
427 | " Text \\\n",
428 | "0 இவ்வாண்டு, நாம் சிரமமான சூழ்நிலைகளுக்கு இடையில... \n",
429 | "1 ஒவ்வோர் ஆண்டும், மழையோ வெயிலோ, ஆகஸ்ட் 9-ஆம் தே... \n",
430 | "2 தேசிய தினச் செய்தி 2019\\nஎன் சக சிங்கப்பூரர்கள... \n",
431 | "3 என் சக சிங்கப்பூரர்களே, வணக்கம்.\\n\\nஒவ்வோர் ஆண... \n",
432 | "4 என் சக சிங்கப்பூரர்களே,\\nவணக்கம்.\\n\\nநான் இப்ப... \n",
433 | "\n",
434 | " English_Translation \\\n",
435 | "0 This year, we observe May Day, amid difficult ... \n",
436 | "1 Every year, rain or heat, on August 9th, Singa... \n",
437 | "2 National Day News 2019 My fellow Singaporeans,... \n",
438 | "3 My fellow Singaporeans, salute. Every year, on... \n",
439 | "4 My fellow Singaporeans, salute. I am now in th... \n",
440 | "\n",
441 | " URL \n",
442 | "0 https://www.pmo.gov.sg/Newsroom/PM-Lee-Hsien-L... \n",
443 | "1 https://www.pmo.gov.sg/Newsroom/National-Day-M... \n",
444 | "2 https://www.pmo.gov.sg/Newsroom/National-Day-M... \n",
445 | "3 https://www.pmo.gov.sg/Newsroom/national-day-m... \n",
446 | "4 https://www.pmo.gov.sg/Newsroom/national-day-m... "
447 | ]
448 | },
449 | "execution_count": 11,
450 | "metadata": {},
451 | "output_type": "execute_result"
452 | }
453 | ],
454 | "source": [
455 | "speeches_translated.head()"
456 | ]
457 | },
458 | {
459 | "cell_type": "markdown",
460 | "metadata": {},
461 | "source": [
462 | "## 1.5 CHECK RESULTS"
463 | ]
464 | },
465 | {
466 | "cell_type": "code",
467 | "execution_count": 24,
468 | "metadata": {},
469 | "outputs": [],
470 | "source": [
471 | "#uncomment to generate a separate file if you need it\n",
472 | "\n",
473 | "#speeches_translated.to_csv('../data/tamil_to_english_speeches.csv', index=False)"
474 | ]
475 | },
476 | {
477 | "cell_type": "code",
478 | "execution_count": 13,
479 | "metadata": {},
480 | "outputs": [
481 | {
482 | "data": {
483 | "text/plain": [
484 | "'My fellow Singaporeans, salute. Every year, on the ninth of August, we celebrate our progress as a nation; we pledge to be a united people. In just fifty-three years, Singapore has achieved a lot. Today, we are a vibrant and prosperous city nation. Our economy continues to see consistent growth. In recent years, that\\'s 3 to 3. It has grown by 5 percent. Productivity improves; incomes rise. Singaporeans live better lives than many other nationalities. But there are signs that complications are arising. Over the past year, trade tensions between the major countries have worsened. This affects international trade, investment and industry confidence. As a result, Singapore\\'s growth and progress will be affected. Trade disputes will undermine trust between major countries and impede cooperation. Therefore, regional and international security may also be at stake. For example, the situation on the Korean Peninsula. Two months ago, a high-level meeting was held between US President Donald Trump and North Korean leader Kim Jong Un. We successfully adapted to that. With that meeting, Korean tensions have eased. However, before nuclear weapons are abandoned on the Korean Peninsula and peace is achieved, there are many challenges we have to deal with. In this work, ASEAN stands by us. Having presided over ASEAN, we want to strengthen cooperation with our neighbours. After a general election in Malaysia, a new government has taken over. On the basis of bilateral good and respect, we will try to maintain good relations with Malaysia. Indonesia will host presidential elections next year. We will continue to work with them to improve the extensive cooperation we have with that country. 5 to No. The government watches these events around us closely. Regardless of the external environment, our wish is for Singapore to excel. We, we strengthen our resilience and create new opportunities. We need to improve the lives of Singaporeans; strengthen social assistance programs; and build a more united nation. To this end, the government, over the past few years, has been reviewing housing, education and health care policies. Today, I speak to you from Kampung Admiralty. Kampung Admiralty, an innovation in public housing. This is an integrated housing estate created for our senior citizens. For them to live comfortably and safely, the houses here have features such as handles and unwrapped floorboards. And not just that. A mall, medical centre, community garden, childcare centre and restaurant station are all located in one place. In Kampung Admiralty, what would one day be like? home to many grandparents. Their children and grandchildren live nearby. Grandparents, looking after their grandchildren. They regularly exercise or go to the community garden to plant. They meet friends there. Working children, when they return home in the evening, sit and dine together with their elderly parents and children. In short, Kampung Admiralty, a pole with high-rise buildings. Family, friends and neighbors are close and loving. This is what our forebears said: \"If we live together, billions of good.\",For us to be an integrated society, HDB will continue to develop innovative housing projects like Kampung Admiralty. What will happen to the current housing estates, which will be maintained and improved over time?,There are still many years to go before the lease of the elderly petals ends. However, we need to think now to keep them a suitable place to live. In terms of education, we increase the number of paler school places. We are expanding childcare facilities across Singapore. The childcare facility at Kampung Admiralty is an example of that. Through committed teachers and good facilities, all children will have a strong start in life. Among the many new health facilities emerging across the country, the clinic here is one. It provides affordable health care. We have plans for MediShield Life, CHAS and CareShield Life. They help with the need for hospital bills, outpatient treatment costs for diseases such as diabetes, and long-term care. Housing, education, health care - Singaporeans are more worried about the costs associated with them. We ensure that these services are quality and affordable for all. In this way, we help families cope with the cost of living; we provide additional assistance to those in need. 12 to No. Our work should not be confined to this. We must continue to improve Singapore. We still have a long way to go on this journey. We will plan with courage and innovation. That requires social cohesion, strong economic, political stability and good government. Today, Singapore is a nation full of opportunities. With the foundation that one generation creates, the other generation creates an even better home. That\\'s why today we are able to excel in the fields we like and build an improved future. Now, we must play our part for the next generation; we must continue to flourish, as a united nation. As a National Day Tamil song puts it, 1, let\\'s say, \"To join many races, to celebrate solidarity, Singhai is my home, any motherland.\",To everyone, my Happy National Day.'"
485 | ]
486 | },
487 | "execution_count": 13,
488 | "metadata": {},
489 | "output_type": "execute_result"
490 | }
491 | ],
492 | "source": [
493 | "# Check translation quality of 1 speech\n",
494 | "\n",
495 | "speeches_translated['English_Translation'].values[3]"
496 | ]
497 | },
498 | {
499 | "cell_type": "markdown",
500 | "metadata": {},
501 | "source": [
502 | "# 2. TRANSLATE TAMIL STORIES TO ENGLISH\n",
503 | "\n",
504 | "The stories on Sethi are relatively short, so we don't run into problems with the token limit. Pretty straightforward implementation "
505 | ]
506 | },
507 | {
508 | "cell_type": "code",
509 | "execution_count": 14,
510 | "metadata": {},
511 | "outputs": [],
512 | "source": [
513 | "stories = pd.read_csv('../data/tamil_stories.csv')"
514 | ]
515 | },
516 | {
517 | "cell_type": "code",
518 | "execution_count": 15,
519 | "metadata": {},
520 | "outputs": [
521 | {
522 | "data": {
523 | "text/html": [
524 | "\n",
525 | "\n",
538 | "
\n",
539 | " \n",
540 | " \n",
541 | " | \n",
542 | " Date | \n",
543 | " Source | \n",
544 | " Headline | \n",
545 | " Story_Text | \n",
546 | " URL | \n",
547 | "
\n",
548 | " \n",
549 | " \n",
550 | " \n",
551 | " 0 | \n",
552 | " 2020-12-23 | \n",
553 | " TamilSeithi (Mediacorp) | \n",
554 | " புதுவகை கொரோனா கிருமிப்பரவல் இதுவரை சிங்கப்பூர... | \n",
555 | " சிங்கப்பூரில், புதுவகைக் கொரோனா கிருமிப்பரவல் ... | \n",
556 | " https://seithi.mediacorp.sg/mobilet/singapore/... | \n",
557 | "
\n",
558 | " \n",
559 | " 1 | \n",
560 | " 2020-12-23 | \n",
561 | " TamilSeithi (Mediacorp) | \n",
562 | " தாம்சன் வட்டாரத்தில் கண்டுபிடிக்கப்பட்ட போர்க்... | \n",
563 | " தாம்சன் வட்டாரத்தில் உள்ள ஜாலான் ராபு சாலையில்... | \n",
564 | " https://seithi.mediacorp.sg/mobilet/singapore/... | \n",
565 | "
\n",
566 | " \n",
567 | " 2 | \n",
568 | " 2020-12-22 | \n",
569 | " TamilSeithi (Mediacorp) | \n",
570 | " COVID-19: மலேசியாவில் Pfizer தடுப்பூசி போட்டுக... | \n",
571 | " மலேசியாவில் Pfizer நிறுவனத்தின் தடுப்பூசியைப் ... | \n",
572 | " https://seithi.mediacorp.sg/mobilet/asia/first... | \n",
573 | "
\n",
574 | " \n",
575 | " 3 | \n",
576 | " 2020-12-22 | \n",
577 | " TamilSeithi (Mediacorp) | \n",
578 | " COVID-19: முன்னிலை ஊழியர்கள், எளிதில் பாதிக்கப... | \n",
579 | " COVID-19 தடுப்பூசிகளின் முதல் தொகுதி, சிங்கப்ப... | \n",
580 | " https://seithi.mediacorp.sg/mobilet/singapore/... | \n",
581 | "
\n",
582 | " \n",
583 | " 4 | \n",
584 | " 2020-12-22 | \n",
585 | " TamilSeithi (Mediacorp) | \n",
586 | " இந்தியாவில் TikTok செயலியைப் போன்ற மற்றொரு செய... | \n",
587 | " இந்தியாவில் TikTok செயலியைப் போன்ற மற்றொரு செய... | \n",
588 | " https://seithi.mediacorp.sg/mobilet/asia/india... | \n",
589 | "
\n",
590 | " \n",
591 | "
\n",
592 | "
"
593 | ],
594 | "text/plain": [
595 | " Date Source \\\n",
596 | "0 2020-12-23 TamilSeithi (Mediacorp) \n",
597 | "1 2020-12-23 TamilSeithi (Mediacorp) \n",
598 | "2 2020-12-22 TamilSeithi (Mediacorp) \n",
599 | "3 2020-12-22 TamilSeithi (Mediacorp) \n",
600 | "4 2020-12-22 TamilSeithi (Mediacorp) \n",
601 | "\n",
602 | " Headline \\\n",
603 | "0 புதுவகை கொரோனா கிருமிப்பரவல் இதுவரை சிங்கப்பூர... \n",
604 | "1 தாம்சன் வட்டாரத்தில் கண்டுபிடிக்கப்பட்ட போர்க்... \n",
605 | "2 COVID-19: மலேசியாவில் Pfizer தடுப்பூசி போட்டுக... \n",
606 | "3 COVID-19: முன்னிலை ஊழியர்கள், எளிதில் பாதிக்கப... \n",
607 | "4 இந்தியாவில் TikTok செயலியைப் போன்ற மற்றொரு செய... \n",
608 | "\n",
609 | " Story_Text \\\n",
610 | "0 சிங்கப்பூரில், புதுவகைக் கொரோனா கிருமிப்பரவல் ... \n",
611 | "1 தாம்சன் வட்டாரத்தில் உள்ள ஜாலான் ராபு சாலையில்... \n",
612 | "2 மலேசியாவில் Pfizer நிறுவனத்தின் தடுப்பூசியைப் ... \n",
613 | "3 COVID-19 தடுப்பூசிகளின் முதல் தொகுதி, சிங்கப்ப... \n",
614 | "4 இந்தியாவில் TikTok செயலியைப் போன்ற மற்றொரு செய... \n",
615 | "\n",
616 | " URL \n",
617 | "0 https://seithi.mediacorp.sg/mobilet/singapore/... \n",
618 | "1 https://seithi.mediacorp.sg/mobilet/singapore/... \n",
619 | "2 https://seithi.mediacorp.sg/mobilet/asia/first... \n",
620 | "3 https://seithi.mediacorp.sg/mobilet/singapore/... \n",
621 | "4 https://seithi.mediacorp.sg/mobilet/asia/india... "
622 | ]
623 | },
624 | "execution_count": 15,
625 | "metadata": {},
626 | "output_type": "execute_result"
627 | }
628 | ],
629 | "source": [
630 | "stories.head()"
631 | ]
632 | },
633 | {
634 | "cell_type": "markdown",
635 | "metadata": {},
636 | "source": [
637 | "## 2.1 CLEAN TEXT AND TRANSLATE"
638 | ]
639 | },
640 | {
641 | "cell_type": "code",
642 | "execution_count": 16,
643 | "metadata": {},
644 | "outputs": [],
645 | "source": [
646 | "stories[\"Clean_Text\"] = stories['Story_Text'].map(lambda text: clean_text(text))"
647 | ]
648 | },
649 | {
650 | "cell_type": "code",
651 | "execution_count": 17,
652 | "metadata": {},
653 | "outputs": [
654 | {
655 | "name": "stdout",
656 | "output_type": "stream",
657 | "text": [
658 | "CPU times: user 30 s, sys: 76.1 ms, total: 30.1 s\n",
659 | "Wall time: 7.64 s\n"
660 | ]
661 | }
662 | ],
663 | "source": [
664 | "%%time\n",
665 | "stories['Headline_Translation'] = stories[\"Headline\"].apply(lambda text: ta2en.translate(text))"
666 | ]
667 | },
668 | {
669 | "cell_type": "code",
670 | "execution_count": 18,
671 | "metadata": {},
672 | "outputs": [
673 | {
674 | "name": "stdout",
675 | "output_type": "stream",
676 | "text": [
677 | "CPU times: user 3min 55s, sys: 1.42 s, total: 3min 56s\n",
678 | "Wall time: 59.9 s\n"
679 | ]
680 | }
681 | ],
682 | "source": [
683 | "%%time\n",
684 | "stories['Story_Translation'] = stories[\"Story_Text\"].apply(lambda text: ta2en.translate(text))"
685 | ]
686 | },
687 | {
688 | "cell_type": "markdown",
689 | "metadata": {},
690 | "source": [
691 | "## 2.2 RE-ORG FOR CLARITY"
692 | ]
693 | },
694 | {
695 | "cell_type": "code",
696 | "execution_count": 19,
697 | "metadata": {},
698 | "outputs": [],
699 | "source": [
700 | "cols2 = [\n",
701 | " \"Date\",\n",
702 | " \"Source\",\n",
703 | " \"Headline\",\n",
704 | " \"Headline_Translation\", \n",
705 | " \"Story_Text\",\n",
706 | " \"Story_Translation\",\n",
707 | " \"URL\",\n",
708 | "]\n",
709 | "\n",
710 | "stories_translated = stories[cols2]\n"
711 | ]
712 | },
713 | {
714 | "cell_type": "code",
715 | "execution_count": 20,
716 | "metadata": {},
717 | "outputs": [
718 | {
719 | "data": {
720 | "text/html": [
721 | "\n",
722 | "\n",
735 | "
\n",
736 | " \n",
737 | " \n",
738 | " | \n",
739 | " Date | \n",
740 | " Source | \n",
741 | " Headline | \n",
742 | " Headline_Translation | \n",
743 | " Story_Text | \n",
744 | " Story_Translation | \n",
745 | " URL | \n",
746 | "
\n",
747 | " \n",
748 | " \n",
749 | " \n",
750 | " 0 | \n",
751 | " 2020-12-23 | \n",
752 | " TamilSeithi (Mediacorp) | \n",
753 | " புதுவகை கொரோனா கிருமிப்பரவல் இதுவரை சிங்கப்பூர... | \n",
754 | " New type of corona virus hasn't been in Singap... | \n",
755 | " சிங்கப்பூரில், புதுவகைக் கொரோனா கிருமிப்பரவல் ... | \n",
756 | " In Singapore, Education Minister Lawrence Wong... | \n",
757 | " https://seithi.mediacorp.sg/mobilet/singapore/... | \n",
758 | "
\n",
759 | " \n",
760 | " 1 | \n",
761 | " 2020-12-23 | \n",
762 | " TamilSeithi (Mediacorp) | \n",
763 | " தாம்சன் வட்டாரத்தில் கண்டுபிடிக்கப்பட்ட போர்க்... | \n",
764 | " A wartime bomb found in Thompson circles. | \n",
765 | " தாம்சன் வட்டாரத்தில் உள்ள ஜாலான் ராபு சாலையில்... | \n",
766 | " On Jalan Rabu Road in Thompson locality, a war... | \n",
767 | " https://seithi.mediacorp.sg/mobilet/singapore/... | \n",
768 | "
\n",
769 | " \n",
770 | " 2 | \n",
771 | " 2020-12-22 | \n",
772 | " TamilSeithi (Mediacorp) | \n",
773 | " COVID-19: மலேசியாவில் Pfizer தடுப்பூசி போட்டுக... | \n",
774 | " COVID-19: Prime Minister Muhidin in the first ... | \n",
775 | " மலேசியாவில் Pfizer நிறுவனத்தின் தடுப்பூசியைப் ... | \n",
776 | " Prime Minister Muhyiddin Yassin has said he wi... | \n",
777 | " https://seithi.mediacorp.sg/mobilet/asia/first... | \n",
778 | "
\n",
779 | " \n",
780 | " 3 | \n",
781 | " 2020-12-22 | \n",
782 | " TamilSeithi (Mediacorp) | \n",
783 | " COVID-19: முன்னிலை ஊழியர்கள், எளிதில் பாதிக்கப... | \n",
784 | " COVID-19: Frontline staff, susceptible people ... | \n",
785 | " COVID-19 தடுப்பூசிகளின் முதல் தொகுதி, சிங்கப்ப... | \n",
786 | " The first batch of COVID-19 vaccines, arrived ... | \n",
787 | " https://seithi.mediacorp.sg/mobilet/singapore/... | \n",
788 | "
\n",
789 | " \n",
790 | " 4 | \n",
791 | " 2020-12-22 | \n",
792 | " TamilSeithi (Mediacorp) | \n",
793 | " இந்தியாவில் TikTok செயலியைப் போன்ற மற்றொரு செய... | \n",
794 | " Google, Microsoft, $100 million in funding for... | \n",
795 | " இந்தியாவில் TikTok செயலியைப் போன்ற மற்றொரு செய... | \n",
796 | " The company that developed another app similar... | \n",
797 | " https://seithi.mediacorp.sg/mobilet/asia/india... | \n",
798 | "
\n",
799 | " \n",
800 | "
\n",
801 | "
"
802 | ],
803 | "text/plain": [
804 | " Date Source \\\n",
805 | "0 2020-12-23 TamilSeithi (Mediacorp) \n",
806 | "1 2020-12-23 TamilSeithi (Mediacorp) \n",
807 | "2 2020-12-22 TamilSeithi (Mediacorp) \n",
808 | "3 2020-12-22 TamilSeithi (Mediacorp) \n",
809 | "4 2020-12-22 TamilSeithi (Mediacorp) \n",
810 | "\n",
811 | " Headline \\\n",
812 | "0 புதுவகை கொரோனா கிருமிப்பரவல் இதுவரை சிங்கப்பூர... \n",
813 | "1 தாம்சன் வட்டாரத்தில் கண்டுபிடிக்கப்பட்ட போர்க்... \n",
814 | "2 COVID-19: மலேசியாவில் Pfizer தடுப்பூசி போட்டுக... \n",
815 | "3 COVID-19: முன்னிலை ஊழியர்கள், எளிதில் பாதிக்கப... \n",
816 | "4 இந்தியாவில் TikTok செயலியைப் போன்ற மற்றொரு செய... \n",
817 | "\n",
818 | " Headline_Translation \\\n",
819 | "0 New type of corona virus hasn't been in Singap... \n",
820 | "1 A wartime bomb found in Thompson circles. \n",
821 | "2 COVID-19: Prime Minister Muhidin in the first ... \n",
822 | "3 COVID-19: Frontline staff, susceptible people ... \n",
823 | "4 Google, Microsoft, $100 million in funding for... \n",
824 | "\n",
825 | " Story_Text \\\n",
826 | "0 சிங்கப்பூரில், புதுவகைக் கொரோனா கிருமிப்பரவல் ... \n",
827 | "1 தாம்சன் வட்டாரத்தில் உள்ள ஜாலான் ராபு சாலையில்... \n",
828 | "2 மலேசியாவில் Pfizer நிறுவனத்தின் தடுப்பூசியைப் ... \n",
829 | "3 COVID-19 தடுப்பூசிகளின் முதல் தொகுதி, சிங்கப்ப... \n",
830 | "4 இந்தியாவில் TikTok செயலியைப் போன்ற மற்றொரு செய... \n",
831 | "\n",
832 | " Story_Translation \\\n",
833 | "0 In Singapore, Education Minister Lawrence Wong... \n",
834 | "1 On Jalan Rabu Road in Thompson locality, a war... \n",
835 | "2 Prime Minister Muhyiddin Yassin has said he wi... \n",
836 | "3 The first batch of COVID-19 vaccines, arrived ... \n",
837 | "4 The company that developed another app similar... \n",
838 | "\n",
839 | " URL \n",
840 | "0 https://seithi.mediacorp.sg/mobilet/singapore/... \n",
841 | "1 https://seithi.mediacorp.sg/mobilet/singapore/... \n",
842 | "2 https://seithi.mediacorp.sg/mobilet/asia/first... \n",
843 | "3 https://seithi.mediacorp.sg/mobilet/singapore/... \n",
844 | "4 https://seithi.mediacorp.sg/mobilet/asia/india... "
845 | ]
846 | },
847 | "execution_count": 20,
848 | "metadata": {},
849 | "output_type": "execute_result"
850 | }
851 | ],
852 | "source": [
853 | "stories_translated.head()"
854 | ]
855 | },
856 | {
857 | "cell_type": "markdown",
858 | "metadata": {},
859 | "source": [
860 | "## 2.3 CHECK RESULTS"
861 | ]
862 | },
863 | {
864 | "cell_type": "code",
865 | "execution_count": 21,
866 | "metadata": {},
867 | "outputs": [],
868 | "source": [
869 | "#uncomment to generate a separate file if you need it\n",
870 | "\n",
871 | "#stories_translated.to_csv('../data/tamil_to_english_stories.csv', index=False)"
872 | ]
873 | },
874 | {
875 | "cell_type": "code",
876 | "execution_count": 22,
877 | "metadata": {},
878 | "outputs": [
879 | {
880 | "data": {
881 | "text/plain": [
882 | "'தாம்சன் வட்டாரத்தில் உள்ள ஜாலான் ராபு சாலையில், போர்க்கால வெடிகுண்டு ஒன்று கண்டுபிடிக்கப்பட்டுள்ளது.\\n\\nதரைவீடுகள் அமைந்துள்ள அந்தப் பகுதியில் வெடிகுண்டு இருப்பதாக, நேற்று (டிசம்பர் 22) பிற்பகல் 2 மணிக்குத் தகவல் கிடைத்ததாக, சிங்கப்பூர்க் காவல்துறை தெரிவித்தது.\\n\\nகுடிமைத் தற்காப்புப் படையின் வெடிகுண்டு அகற்றும் பிரிவுடன் நடத்தப்பட்ட ஆலோசனையில், அதைப் பாதுகாப்பாக இடம் மாற்றி அப்புறப்படுத்த தீர்மானிக்கப்பட்டது.\\n\\nஇரண்டாம் உலகப் போரில் பயன்படுத்தப்பட்ட வெடிகுண்டுகள், சிங்கப்பூரில் ஆங்காங்கே அவ்வப்போது கண்டுபிடிக்கப்படுவதுண்டு.\\n\\nகடந்த நவம்பர் மாதம், ரிவர் வேலி பகுதியில் உள்ள ஜியாக் கிம் ரோட்டில் இரண்டாம் உலகப் போர்க்கால வெடிகுண்டு ஒன்று கட்டுப்படுத்தப்பட்ட சூழலில் வெடிக்கச் செய்யப்பட்டது.\\n\\nவானிலிருந்து வீசப்பட்ட 50 கிலோகிராம் வெடிகுண்டு, கட்டுமானத் தலத்தில் நிலந்தோண்டும் பணியின்போது கண்டுபிடிக்கப்பட்டது.\\n\\nஅதை அங்கிருந்து அப்புறப்படுத்தி எடுத்துச் செல்வது ஆபத்தானது என்பதால், கிடைத்த இடத்திலேயே அதை வெடிக்கச் செய்ய முடிவெடுக்கப்பட்டு நிறைவேற்றப்பட்டது.'"
883 | ]
884 | },
885 | "execution_count": 22,
886 | "metadata": {},
887 | "output_type": "execute_result"
888 | }
889 | ],
890 | "source": [
891 | "stories_translated['Story_Text'].values[1]"
892 | ]
893 | },
894 | {
895 | "cell_type": "code",
896 | "execution_count": 23,
897 | "metadata": {},
898 | "outputs": [
899 | {
900 | "data": {
901 | "text/plain": [
902 | "\"On Jalan Rabu Road in Thompson locality, a wartime bomb has been found.Singapore police said they received a report at 2pm yesterday (December 22) that there was a bomb in the area, where the ground houses are located.In consultation with the Civil Self-Defense Force's bomb disposal unit, it was determined to safely relocate and dispose of it.The explosives used in World War II are regularly found in Singapore.Last November, a World War II bomb was detonated in a controlled environment on Jiyak Kim Road in the River Valley area.A 50kg bomb dropped from the sky was found during landfill work at the construction site, as it was dangerous to evacuate and take it away.\""
903 | ]
904 | },
905 | "execution_count": 23,
906 | "metadata": {},
907 | "output_type": "execute_result"
908 | }
909 | ],
910 | "source": [
911 | "stories_translated['Story_Translation'].values[1]"
912 | ]
913 | }
914 | ],
915 | "metadata": {
916 | "kernelspec": {
917 | "display_name": "Python 3",
918 | "language": "python",
919 | "name": "python3"
920 | },
921 | "language_info": {
922 | "codemirror_mode": {
923 | "name": "ipython",
924 | "version": 3
925 | },
926 | "file_extension": ".py",
927 | "mimetype": "text/x-python",
928 | "name": "python",
929 | "nbconvert_exporter": "python",
930 | "pygments_lexer": "ipython3",
931 | "version": "3.6.8"
932 | }
933 | },
934 | "nbformat": 4,
935 | "nbformat_minor": 4
936 | }
937 |
--------------------------------------------------------------------------------