{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"provenance":[],"authorship_tag":"ABX9TyPBliLqRNOOG0Kz4iK4qz+Q"},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"}},"cells":[{"cell_type":"markdown","source":["# Vietnamese Language Processing Pipeline\n","\n","In this notebook, we will learn how to use Vietnamese NLP Tools to do NLP Pipeline including:\n","\n","- Sentence Segmentation\n","- Tokenization\n","- POS Tagging\n","- Named-Entity Recognition\n","\n","We will use [underthesea](https://github.com/undertheseanlp/underthesea) for Vietnamese NLP Pipeline."],"metadata":{"id":"Kdg0FrWkfkwC"}},{"cell_type":"markdown","source":["## Running example\n"],"metadata":{"id":"pPAPm4NDiU3n"}},{"cell_type":"code","source":["text = (\"Vì vậy, Văn phòng Chính phủ đã báo cáo Thủ tướng cần phải thực hiện các biện pháp phòng chống dịch cao hơn khuyến cáo của WHO. \"\n"," \"Chiều mùng 3 Tết, Thủ tướng chủ trì họp, đưa ra thông điệp chống dịch bệnh. Công điện số 05 của Thủ tướng ban hành ngày 28/1/2020, \"\n"," \"tức mùng 4 Tết Nguyên đán Canh Tý đã nêu nhiều biện pháp quyết liệt, như tạm thời ngừng cấp phép các chuyến bay từ Việt Nam đến \"\n"," \"các vùng có dịch của Trung Quốc và ngược lại; phòng chống dịch cho các hành khách trên các phương tiện vận tải; giao \"\n"," \"Bộ Y tế hoàn thành kịch bản ứng phó với dịch bệnh, đảm bảo thuốc, trang thiết bị y tế...\")"],"metadata":{"id":"mOmw2O6-iYBJ","executionInfo":{"status":"ok","timestamp":1704529133409,"user_tz":-420,"elapsed":5,"user":{"displayName":"Minh Pham","userId":"01293297774691882951"}}},"execution_count":1,"outputs":[]},{"cell_type":"markdown","source":["## Underthesea\n","\n","[Underthesea](https://github.com/undertheseanlp/underthesea) is an open-source NLP Tool for Vietnamese. Underthesea can be used to perform NLP tasks in NLP pipeline. We can use that tool to do text classification as well."],"metadata":{"id":"gZLli8Cphgl-"}},{"cell_type":"code","source":["!pip install -q underthesea"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"ecrrhlhpiL3s","executionInfo":{"status":"ok","timestamp":1704529156142,"user_tz":-420,"elapsed":14666,"user":{"displayName":"Minh Pham","userId":"01293297774691882951"}},"outputId":"e61ec6db-3750-404c-ccc5-a36a80624523"},"execution_count":2,"outputs":[{"output_type":"stream","name":"stdout","text":["\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m20.9/20.9 MB\u001b[0m \u001b[31m6.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.1/1.1 MB\u001b[0m \u001b[31m41.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m657.8/657.8 kB\u001b[0m \u001b[31m30.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25h"]}]},{"cell_type":"markdown","source":["### Sentence tokenization"],"metadata":{"id":"mMo2XLECpVdP"}},{"cell_type":"code","source":["from underthesea import sent_tokenize\n","\n","sent_tokenize(text)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"RIr0kG_XpeDc","executionInfo":{"status":"ok","timestamp":1704529191137,"user_tz":-420,"elapsed":2337,"user":{"displayName":"Minh Pham","userId":"01293297774691882951"}},"outputId":"2725a6d2-ee81-44af-93bd-8fefe9d50d3b"},"execution_count":3,"outputs":[{"output_type":"execute_result","data":{"text/plain":["['Vì vậy, Văn phòng Chính phủ đã báo cáo Thủ tướng cần phải thực hiện các biện pháp phòng chống dịch cao hơn khuyến cáo của WHO.',\n"," 'Chiều mùng 3 Tết, Thủ tướng chủ trì họp, đưa ra thông điệp chống dịch bệnh.',\n"," 'Công điện số 05 của Thủ tướng ban hành ngày 28/1/2020, tức mùng 4 Tết Nguyên đán Canh Tý đã nêu nhiều biện pháp quyết liệt, như tạm thời ngừng cấp phép các chuyến bay từ Việt Nam đến các vùng có dịch của Trung Quốc và ngược lại; phòng chống dịch cho các hành khách trên các phương tiện vận tải; giao Bộ Y tế hoàn thành kịch bản ứng phó với dịch bệnh, đảm bảo thuốc, trang thiết bị y tế...']"]},"metadata":{},"execution_count":3}]},{"cell_type":"markdown","source":["### Text normalization"],"metadata":{"id":"rODF8EVCp1MJ"}},{"cell_type":"code","source":["from underthesea import text_normalize\n","text_normalize('Ðảm baỏ chất lựơng phòng thí nghịêm hoá học')"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":36},"id":"EAEKme3pp3sc","executionInfo":{"status":"ok","timestamp":1704529205708,"user_tz":-420,"elapsed":385,"user":{"displayName":"Minh Pham","userId":"01293297774691882951"}},"outputId":"d285cc5a-39c0-42ab-d25c-2ebaf9cc4a55"},"execution_count":4,"outputs":[{"output_type":"execute_result","data":{"text/plain":["'Đảm bảo chất lượng phòng thí nghiệm hóa học'"],"application/vnd.google.colaboratory.intrinsic+json":{"type":"string"}},"metadata":{},"execution_count":4}]},{"cell_type":"markdown","source":["### Word Tokenization"],"metadata":{"id":"YHa7dLjbpi0s"}},{"cell_type":"code","source":["from underthesea import word_tokenize\n","\n","sentence = 'Vì vậy, Văn phòng Chính phủ đã báo cáo Thủ tướng cần phải thực hiện các biện pháp phòng chống dịch cao hơn khuyến cáo của WHO.'\n","word_tokenize(sentence)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"pNpVdxesppls","executionInfo":{"status":"ok","timestamp":1704529210595,"user_tz":-420,"elapsed":513,"user":{"displayName":"Minh Pham","userId":"01293297774691882951"}},"outputId":"09852791-fbdb-4544-ec95-ddffe072a190"},"execution_count":5,"outputs":[{"output_type":"execute_result","data":{"text/plain":["['Vì vậy',\n"," ',',\n"," 'Văn phòng',\n"," 'Chính phủ',\n"," 'đã',\n"," 'báo cáo',\n"," 'Thủ tướng',\n"," 'cần',\n"," 'phải',\n"," 'thực hiện',\n"," 'các',\n"," 'biện pháp',\n"," 'phòng chống',\n"," 'dịch',\n"," 'cao',\n"," 'hơn',\n"," 'khuyến cáo',\n"," 'của',\n"," 'WHO',\n"," '.']"]},"metadata":{},"execution_count":5}]},{"cell_type":"code","source":["word_tokenize(sentence, format=\"text\")"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":36},"id":"jramF8xXpstA","executionInfo":{"status":"ok","timestamp":1704494372949,"user_tz":-420,"elapsed":7,"user":{"displayName":"Minh Pham","userId":"01293297774691882951"}},"outputId":"4c0bccfe-5198-4023-bfa0-1caf0e3c51fb"},"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["'Vì_vậy , Văn_phòng Chính_phủ đã báo_cáo Thủ_tướng cần phải thực_hiện các biện_pháp phòng_chống dịch cao hơn khuyến_cáo của WHO .'"],"application/vnd.google.colaboratory.intrinsic+json":{"type":"string"}},"metadata":{},"execution_count":6}]},{"cell_type":"markdown","source":["### POS Tagging"],"metadata":{"id":"FtTfyET2qoCD"}},{"cell_type":"code","source":["from underthesea import pos_tag\n","pos_tag(sentence)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"pEuq5xKEq3rl","executionInfo":{"status":"ok","timestamp":1704494374381,"user_tz":-420,"elapsed":2,"user":{"displayName":"Minh Pham","userId":"01293297774691882951"}},"outputId":"57906382-37a2-4780-c1db-01c7036c1731"},"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["[('Vì vậy', 'C'),\n"," (',', 'CH'),\n"," ('Văn phòng', 'N'),\n"," ('Chính phủ', 'N'),\n"," ('đã', 'R'),\n"," ('báo cáo', 'V'),\n"," ('Thủ tướng', 'N'),\n"," ('cần', 'V'),\n"," ('phải', 'V'),\n"," ('thực hiện', 'V'),\n"," ('các', 'L'),\n"," ('biện pháp', 'N'),\n"," ('phòng chống', 'V'),\n"," ('dịch', 'N'),\n"," ('cao', 'A'),\n"," ('hơn', 'A'),\n"," ('khuyến cáo', 'N'),\n"," ('của', 'E'),\n"," ('WHO', 'Np'),\n"," ('.', 'CH')]"]},"metadata":{},"execution_count":7}]},{"cell_type":"markdown","source":["### Chunking"],"metadata":{"id":"WAcN7owcrNGZ"}},{"cell_type":"code","source":["from underthesea import chunk\n","chunk(sentence)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"aZSCamxQru4b","executionInfo":{"status":"ok","timestamp":1704494375921,"user_tz":-420,"elapsed":3,"user":{"displayName":"Minh Pham","userId":"01293297774691882951"}},"outputId":"962d549f-a2c3-401f-accf-a09944c67a11"},"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["[('Vì vậy', 'C', 'O'),\n"," (',', 'CH', 'O'),\n"," ('Văn phòng', 'N', 'B-NP'),\n"," ('Chính phủ', 'N', 'B-NP'),\n"," ('đã', 'R', 'O'),\n"," ('báo cáo', 'V', 'B-VP'),\n"," ('Thủ tướng', 'N', 'B-NP'),\n"," ('cần', 'V', 'B-VP'),\n"," ('phải', 'V', 'B-VP'),\n"," ('thực hiện', 'V', 'B-VP'),\n"," ('các', 'L', 'B-NP'),\n"," ('biện pháp', 'N', 'B-NP'),\n"," ('phòng chống', 'V', 'B-VP'),\n"," ('dịch', 'N', 'B-NP'),\n"," ('cao', 'A', 'B-AP'),\n"," ('hơn', 'A', 'B-AP'),\n"," ('khuyến cáo', 'N', 'B-NP'),\n"," ('của', 'E', 'B-PP'),\n"," ('WHO', 'Np', 'B-NP'),\n"," ('.', 'CH', 'O')]"]},"metadata":{},"execution_count":8}]},{"cell_type":"markdown","source":["### Dependency Parsing"],"metadata":{"id":"4wCFx6bqrzVn"}},{"cell_type":"code","source":["!pip install -q underthesea[deep]"],"metadata":{"id":"RaQ774aUsJFn","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1704494450696,"user_tz":-420,"elapsed":72630,"user":{"displayName":"Minh Pham","userId":"01293297774691882951"}},"outputId":"2d31214d-26ad-4234-f2c8-db2f53719210"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m776.3/776.3 MB\u001b[0m \u001b[31m2.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25h\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n","torchaudio 2.1.0+cu121 requires torch==2.1.0, but you have torch 1.12.1 which is incompatible.\n","torchdata 0.7.0 requires torch==2.1.0, but you have torch 1.12.1 which is incompatible.\n","torchtext 0.16.0 requires torch==2.1.0, but you have torch 1.12.1 which is incompatible.\n","torchvision 0.16.0+cu121 requires torch==2.1.0, but you have torch 1.12.1 which is incompatible.\u001b[0m\u001b[31m\n","\u001b[0m"]}]},{"cell_type":"code","source":["from underthesea import dependency_parse\n","\n","sentence = 'Tối 29/11, Việt Nam thêm 2 ca mắc Covid-19'\n","dependency_parse(sentence)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"8b2vIU-WsN7B","executionInfo":{"status":"ok","timestamp":1671811007762,"user_tz":-420,"elapsed":438,"user":{"displayName":"Minh Pham","userId":"01293297774691882951"}},"outputId":"f57e9d7f-6ffb-4acf-be61-2ba42e937772"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stderr","text":[]},{"output_type":"execute_result","data":{"text/plain":["[('Tối', 5, 'obl:tmod'),\n"," ('29/11', 1, 'compound'),\n"," (',', 4, 'punct'),\n"," ('Việt Nam', 5, 'nsubj'),\n"," ('thêm', 0, 'root'),\n"," ('2', 7, 'nummod'),\n"," ('ca', 5, 'obj'),\n"," ('mắc', 5, 'obj'),\n"," ('Covid-19', 5, 'punct')]"]},"metadata":{},"execution_count":14}]},{"cell_type":"markdown","source":["### Named-Entity Recognition"],"metadata":{"id":"28F3nrrAsuhl"}},{"cell_type":"code","source":["from underthesea import ner\n","text = 'Chưa tiết lộ lịch trình tới Việt Nam của Tổng thống Mỹ Donald Trump'\n","ner(text)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"tVQwsIWUs5ah","executionInfo":{"status":"ok","timestamp":1671811035636,"user_tz":-420,"elapsed":5,"user":{"displayName":"Minh Pham","userId":"01293297774691882951"}},"outputId":"5ba7e634-806b-44b4-c79d-f0d322323c3f"},"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["[('Chưa', 'R', 'O', 'O'),\n"," ('tiết lộ', 'V', 'B-VP', 'O'),\n"," ('lịch trình', 'V', 'B-VP', 'O'),\n"," ('tới', 'E', 'B-PP', 'O'),\n"," ('Việt Nam', 'Np', 'B-NP', 'B-LOC'),\n"," ('của', 'E', 'B-PP', 'O'),\n"," ('Tổng thống', 'N', 'B-NP', 'B-LOC'),\n"," ('Mỹ Donald Trump', 'Np', 'B-NP', 'I-LOC')]"]},"metadata":{},"execution_count":15}]},{"cell_type":"markdown","source":["## Other NLP Toolkits\n","\n","- [VnCoreNLP](https://github.com/vncorenlp/VnCoreNLP) (Java)\n","- [UETnlp](https://github.com/phongnt570/UETnlp) (Java)\n","- [trankit](https://github.com/nlp-uoregon/trankit)\n","- [pyvi](https://github.com/trungtv/pyvi)\n","- [PhoNLP](https://github.com/VinAIResearch/PhoNLP)"],"metadata":{"id":"9ivvKwjmvsYk"}},{"cell_type":"markdown","source":["## Other NLP tasks in Vietnamese\n","\n"],"metadata":{"id":"E8FQ5ihBv_EQ"}},{"cell_type":"markdown","source":["### Spelling & Grammar Error Correction\n","\n","Correct sentences with spelling and grammar errors such as \"Cô ấy rất sinh đẹp.\""],"metadata":{"id":"jL55_7FMxAhc"}},{"cell_type":"markdown","source":["### Diacritics Restoration\n","\n","Restore diactritics in Vietnamese sentences. For instance\n","\"truong dai hoc khoa hoc va cong nghe hien dang la co so dao tao cntt hang dau viet nam.\""],"metadata":{"id":"yO3oK3WGxBfJ"}}]}