các khả năng định dạng kí tự

1/ Phong chữ. màu chữ . cỡ chữ. kiểu chữ. Định dạng đoạn văn bản là làm thay đổi các tính chất sau đây của đoạn văn bản: ­ Kiểu căn lề Duới đây là các thông tin và kiến thức về chủ đề các khả năng định dạng ký tự là hay nhất do chính tay đội ngũ Newthang biên soạn và tổng hợp: Nội dung chính 1. Câu 2 trang 114 SGK Tin học 10 - loigiaihay.com2. Hãy kể những khả năng định dạng kí tự. - Baitapsgk.com3. Bài tập và thực hành 7: Định dạng đoạn văn 10 ký hiệu định dạng ẩn trong văn bản word. #1. Ký hiệu định dạng TAB () “Tab” được sử dụng nhiều cho việc dàn trang và soạn thảo văn bản trên word. Cho phép người dùng tạo tạo khoảng trống mặc định (1,27 cm) khi nhấn vào nút “Tab” trên bàn phím. Một ví dụ dễ Bài 2 trang 114 Tin học 10: Hãy kể những khả năng định dạng kí tự. Lời giải: Các thuộc tính định dạng kí tự cơ bản bao gồm phông chữ, kiểu chữ, cỡ chứ, màu sắc,… Ta có thể định dang kí tự để có văn bản mang tính thẩm mĩ cao và thống nhất chung. Giải pháp bóc tách dữ liệu IONE có khả năng nhận dạng ký tự tiếng Việt chính xác đến 98%. Trang chủ CESTI | +84-028-38221635 info@techport.vn Site Rencontre Totalement Gratuit Sans Inscription. Như hầu hết các ngôn ngữ lập trình khác, python cũng chứa các định dạng dữ liệu data type cơ bản gồm float, integer, boolean, string. Hãy ghi nhớ những định dạng dữ liệu này vì chúng ta sẽ bắt gặp lại chúng ở nhiều ngôn ngữ lập trình khác. Ý nghĩa của những định dạng dữ liệu này như sau float Lưu trữ số thập phân. Ví dụ trong đó 1993 là phần nguyên và .0709 là phần thập phân. integer Định dạng số nguyên. Ví dụ 123. boolean Chỉ gồm hai giá trị True/False. string Chuỗi ký tự Các kiểu dữ liệu float và integer chúng ta sẽ chia thành float8, float16, float32 và int8, int16, int32 tuỳ theo theo kích thước lưu trữ bit size của chúng. Những định dạng có số bits càng cao thì miền giá trị của nó càng rộng. Ví dụ Định dạng int8 sẽ có kích thước là 8 bits nên nó có thể chứa tối đa là \2^8=256\ số nguyên từ -128 dến 127. import numpy as np Giá trị của -129 trong định dạng int8 sẽ thành 127 -129, 3], dtype= array[ 1, 127, 3], dtype=int8 Để kiểm tra định dạng dữ liệu của một biến chúng ta dùng hàm type x = y = 4 z = False t = "Vi mot cong dong AI vung manh hon" printtypex printtypey printtypez printtypet Kiểu numeric¶ Kiểu numeric sẽ bao gồm số thập phân và số nguyên. Chúng ta có thể thực hiện các phép +, -, *, / đổi với kiểu numeric. x = add = x+1 minus = x-1 mul = x*2 div = x/5 printadd, minus, mul, div Ngoài ra cúng ta có thể viếtx=x+1đơn giản hơn thành x+=1. Tương tự với phép -, *, / x= x+=1 Tương đương x=x+1 printx x= x-=1 Tương đương x=x-1 printx x= x*=2 Tương đương x=x*2 printx x= x/=5 Tương đương x=x/5 printx Khi thực hiện các phép +,-,*,/ giữa hai số khác nhau về định dạng dữ liệu thì định dạng dữ liệu của kết quả trả về sẽ có định dạng dữ liệu là kiểu được ưu tiên hơn. Chúng ta qui ước thứ tự ưu tiên của định dạng dữ liệu là float > integer > boolean. x = y = 1 printtypex+y printtypex-y printtypex*y printtypex/y Như vậy phép +, -, *, / giữa một số float và integer sẽ trả ra kết quả là một số dạng float. Kiểu boolean¶ Kiểu boolean sẽ gồm hai giá trị là True và False. Các toán tử được thực hiện trên kiểu boolean gồm Và Trả về True nếu cả hai vế đều đúng. Còn lại là False. Có thể sử dụng ký hiệu & hoặc chữ and. Hoặc Trả về True nếu một trong hai vế đúng. Còn lại là False. Có thể sử dụng ký hiệu hoặc chữ or. Vì python là ngôn ngữ hướng tới mục tiêu rõ ràng nhìn vào là hiểu ngay nên theo chuẩn convention thì chúng ta sẽ thường sử dụng từ tiếng anh như and, or thay cho ký tự &, . Kiểu boolean còn có thể thực hiện các phép +, -, *, / như kiểu numeric. Để biết kết quả của biểu thức khi thực hiện trên boolean, chúng ta qui ước True là 1, False là 0 và thực hiện phép tính như bình thường. x = True y = False z = 5 print'and ', x&y, x and y print'or ', xy, x or y print'x*y ', x*y print'x+y ', x+y print'x/z ', x/z and False False or True True x*y 0 x+y 1 x/z Phép so sánh giữa hai số sẽ trả về là kiểu dữ liệu boolean. Một số toán tử so sánh x lớn hơn y x>y x nhỏ hơn y x3. print'* From indices 1->3 list1[14]\n', list1[14] Truy cập vào 2 index đầu tiên print'* 2 first indices list1[2]\n', list1[2] Truy cập vào 2 index cuối cùng print'* 2 last indices list1[-2]\n', list1[-2] Truy cập vào các phần tử từ phần tử đầu tiên tới phần tử liền trước vị trí cuối cùng là hai vị trí. print'* From first to -2 indices 2 orders to touch last list1[-2]\n', list1[-2] Truy cập từ index thứ 2 đến index cuối cùng print'* From second indice to last indice list1[2]\n', list1[2] chemistry * From indices 1->3 list1[14] ['chemistry', 1997, 'people'] * 2 first indices list1[2] ['math', 'chemistry'] * 2 last indices list1[-2] ['student', ['people', 'teacher', 'student']] * From first to -2 indices 2 orders to touch last list1[-2] ['math', 'chemistry', 1997, 'people', 'teacher'] * From second indice to last indice list1[2] [1997, 'people', 'teacher', 'student', ['people', 'teacher', 'student']] Sử dụng list các thứ tự cần truy cập Cách này chúng ta sẽ khai báo các vị trí phần tử của list mà chúng ta muốn truy cập. Những vị trí này có thể cách rời nhau. Ưu điểm của phương pháp này là có thể truy cập bất kỳ vị trí nào trong list, nhược điểm là phải gõ nhiều. Truy cập vào vị trí có indice 1 và 3 trong list1 [item for i, item in enumeratelist1 if i in [1, 3]] Các thành phần của một list có được phép trùng nhau? List cho phép các phần tử được trùng nhau. Tính chất này không được chấp nhận ở dictionary và set. list4 = ['machine', 'learning', 'algorithms', 'to', 'practice', 'practice'] Ngoài ra các thành phần trong một list có thể khác nhau về định dạng. Bên dưới là list chứa thành phần vừa có kiểu ký tự và kiểu số. list4 = ['machine', 'learning', 'algorithms', 'to', 'practice', 2021] Sort một list thì như thế nào ? Chúng ta dùng lệnh sort. Có hai lựa chọn là reverse=True đảo ngược hoặc `reverse=False tăng tiến. list5 = [4, 5, 1, 7, 2] Sort tăng tiến print'* normal sort list5 \n', list5 Sort reverse print'* reverse sort list5 \n', list5 * normal sort list5 [1, 2, 4, 5, 7] * reverse sort list5 [7, 5, 4, 2, 1] Theo cách trên thì hàm sort được coi là một method của biến list5. Sau khi gọi hàm thì phép sắp xếp được kích hoạt và thay thế chính giá trị của list5 gốc đây là tính chất inplace. Chúng ta có thể sử dụng hàm sorted độc lập bên ngoài để sort giá trị của list5 mà giá trị của list5 sẽ không bị thay đổi. list5 = [4, 5, 1, 7, 2] print'* sortedlist5 \n',sortedlist5 * sortedlist5 [1, 2, 4, 5, 7] Ngoài ra chúng ta có thể sort theo key là một hàm bất kỳ trong sorted. Theo cách này chúng ta có thể sắp xếp biến đầu vào \x\ sao cho giá trị của hàm đầu ra \x-3^2\ là tăng dần. sortedlist5, key = lambda x x-3**2 Tuple¶ Tuple cũng tương tự như list nhưng là định dạng immutable, tức là không thể sửa, xóa, cập nhật. Các phần tử của tuple được cách nhau bởi dấu phảy và bao quanh bởi ngoặc đơn. Khởi tạo tuple tuple1 = 'a', 'b', 'c', '2020' print'tuple1 ', tuple1 Truy cập vào các phần tử của tuple for item in tuple1 printitem Độ dài print'length tuple1 ', lentuple1 Concate 2 tuple tuple2 = 'x', 'y', 'z' tuple_concate = tuple1 + tuple2 print'tuple concatenate ', tuple_concate Truy cập vào phần tử đầu tiên tuple1[0] tuple1 'a', 'b', 'c', '2020' a b c 2020 length tuple1 4 tuple concatenate 'a', 'b', 'c', '2020', 'x', 'y', 'z' Lưu ý Tupple là định dạng immutatble tức là không thay đổi được. Chúng ta sẽ không thể thêm/sửa/xoá các phần tử của tupple. VD Cập nhật tuple1[0] = 0 sẽ báo lỗi. %%script echo skipping tuple1[0] = 0 Dictionary¶ Dictionary là định dạng cho phép truy cập các giá trị thông qua một key duy nhất. key giống như tên gọi và giá trị là thứ được trả về thông qua key. Mỗi một phần tử của dictionary được đặc trưng bởi một cặp {key value}. Các phần tử ngăn cách nhau bởi dấu phảy và bao quanh dấu {}. Các biến đổi đơn giản trên dictionary gồm những gì? Chúng ta có thể truy cập các phần tử của dictionary thông qua giá trị key của nó. Các giá trị tương ứng với một key cũng có thể được cập nhật bằng phép gán. Khởi tạo một dictionary dict1 = {'name' 'khanh', 'age' '27', 'job' 'AI research engineer', 'love' 'math'} In ra giá trị thông qua key print'name ', dict1['name'] print'age ', dict1['age'] print'job ', dict1['job'] print'love ', dict1['love'] Cập nhật giá trị một phần tử dict1['love'] = 'girl' print'love update ', dict1['love'] Độ dài của dict1 print'dict1 length ', lendict1 Truy cập vào toàn bộ các key print'all keys ', Truy cập vào toàn bộ giá trị print'all values ', Thêm một phần tử mới cho dict dict1['IQ'] = '145' print'dict after update ', dict1 name khanh age 27 job AI research engineer love math love update girl dict1 length 4 all keys dict_keys['name', 'age', 'job', 'love'] all values dict_values['khanh', '27', 'AI research engineer', 'girl'] dict after update {'name' 'khanh', 'age' '27', 'job' 'AI research engineer', 'love' 'girl', 'IQ' '145'} Cách khởi tạo dictionary trên là thủ công, bạn có thể khởi tạo một dictionary gồm 100 keys liên tiếp có cùng một giá trị thông qua hàm value. Khởi tạo dictionary gồm các keys từ 0 tới 3, giá trị đều là [] dict2 = [] dict2 {0 [], 1 [], 2 [], 3 []} Sort một dictionary như thế nào? Chúng ta dùng hàm sorted như bên dưới. Khi đó giá trị trả về của dict sẽ tự động sort theo key. ['IQ', 'age', 'job', 'love', 'name'] Muốn customize sâu hơn cách sort của hàm sorted, ta có thể dùng thêm chức năng key của hàm lambda. Đây là một vũ khí khá lợi hại Chỉ sort dict1 theo giá trị cuối của dictionary sorteddict1, key=lambda x x[-1] ['IQ', 'job', 'name', 'age', 'love'] Nếu không muốn sort theo keys mà sort theo values thì sao? Đây là một ứng dụng rất phổ biến mà bạn sẽ thường xuyên bắt gặp nó khi làm việc với dữ liệu. Để thực hiện phương pháp sort này, hẳn bạn còn nhớ cú pháp vòng for trong list ở chương list chứ ? Chúng ta sẽ áp dụng nó ở đây. {k v for k, v in sorted key=lambda item item[1]} {'IQ' '145', 'age' '27', 'job' 'AI research engineer', 'love' 'girl', 'name' 'khanh'} Set¶ Set là một tợp hợp gồm các giá trị duy nhất. Set không cho phép truy cập thông qua index vì nó không được đánh index. các phần tử trong set không thể thay đổi được nhưng set có thể thêm bớt. Để khởi tạo một set thì các phần tử của set cách nhau bởi dấu phảy và bao quanh dấu {}. Các phép biến đổi cơ bản đối với set Khởi tạo một set set1 = set[1, 2, 3, 4, 'alo'] or {1, 2, 3, 4, 'alo'} print'set1 ', set1 Truy cập vào các phần tử của set for item in set1 printitem Độ dài của set print'length set1 ', lenset1 Xóa 1 phần tử trong set print'set1 after discard 4 ', set1 Hợp 2 set với nhau set2 = {1, 3, 5, 8} print'set2 ', set2 set_union = print'union set1 and set2 ', set_union Tìm ra các phần tử chung bằng phép giao set_intersection = print'intersection set1 and set2', set_intersection Tìm ra các phần tử thuộc set2 nhưng không thuộc set1 print'belong set2 but not set1 ', set2 - set1 Kiểm tra quan hệ giữa 2 set print'check set2 belong set1 ', set1 >= set2 print'check set1 belong set2 ', set1 <= set2 set1 {1, 2, 3, 4, 'alo'} 1 2 3 4 alo length set1 5 set1 after discard 4 {1, 2, 3, 'alo'} set2 {8, 1, 3, 5} union set1 and set2 {1, 2, 3, 5, 8, 'alo'} intersection set1 and set2 {1, 3} belong set2 but not set1 {8, 5} check set2 belong set1 False check set1 belong set2 False Tóm tắt¶ Như vậy qua bài viết này bạn đã nắm vững được các kiến thức cơ bản về những định dạng dữ liệu built-in trong python gồm Các kiểu dữ liệu float, integer, boolean, string, miền giá trị và cách thức làm việc với chúng. Định dạng dữ liệu sequence list, tuple, dictionary, set, cách sử dụng, những cú pháp thường gặp trong xử lý dữ liệu kèm theo những tip and trick để giải quyết nhanh vấn đề. Bạn đọc hãy cùng làm những bài tập bên dưới để cải thiện kỹ năng của mình. Bài tập¶ Cho một dictionary gồm tên và điểm số. points = {'an' 9, 'binh' 7, 'khanh' 8, 'linh' 10, 'huyen' 6} Hãy sắp xếp dictionary trên theo điểm số tăng dần. Hãy tạo một dictionary có key là điểm số và giá trị là tên. Tiếp theo, cho một list như sau target = ['vi', 'mot', 'cong', 'dong', 'AI', 'vung', 'vung', 'manh', 'manh', 'hon'] Tìm các giá trị duy nhất của list đó. Đếm số lần lặp lại của mỗi phần tử trong list. Tạo ra một list mới mà nếu phần tử đó đã xuất hiện trong list rồi thì chỉ lấy duy nhất giá trị bắt gặp đầu tiên. Cho một đoạn văn bản như sau 'Machine Learning Algorithms to Practice là một cuốn sách cân bằng giữa lý thuyết và thực hành' 'Machine Learning Algorithms to Practice là một cuốn sách cân bằng giữa lý thuyết và thực hành' Hãy phân chia câu văn trên thành một list mà mỗi một từ trong câu là một phần tử của list. Đảo ngược vị trí các từ trong list vừa tạo được. Tiếp theo, tính các giá trị sau 8. Giá trị \n! = 1\times 2 \times 3 \dots \times n\ 9. Tích của các số chẵn liên tiếp nhỏ hơn \n\. 10. Tích của các số lẻ liên tiếp nhỏ hơn \n\. Định dạng kí tự là thay đổi dáng vẻ của 1 hay 1 nhóm kí tự Các cách định dạng kí tự Các tính chất phổ biến gồm Phông chữ nháy nút có dấu mũi tên chĩa xuống ở bên phải hộp font Cỡ chữ nháy nút font side Màu chữ nháy nút font color Kiểu chữ nháy Bold chữ đậm nháy Italic chữ nghiêng nháy Underline chữ có gạch chân Các chức năng chung của hệ soạn thảo văn bản Hệ soạn thảo văn bản là một phần mềm ứng dụng cho phép thực hiện các thao tác liên quan đến công việc soạn văn bản gõ nhập văn bản, sửa đổi, trình bày, kết hợp với các văn bản khác, lưu trữ và in văn bản. a. Nhập và lưu trữ văn bản Các hệ soạn thảo văn bản thường cho phép ta nhập văn bản vào máy tính một cách nhanh chóng mà chưa cần quan tâm đến việc trình bày văn bản. Trong khi ta gõ, hệ soạn thảo văn bản quản lí một cách tự động việc xuống dòng. Bằng cách này ta có thể nhanh chóng nhận được bản đầu tiên và có thể lưu trữ để tiếp tục hoàn thiện hoặc in ra giấy hoặc được in ra giấy. b. Sửa đổi văn bản Hệ soạn thảo văn bản cung cấp các công cụ cho phép ta thực hiện công việc sửa đổi văn bản một cách nhanh chóng. Các sửa đổi trên văn bản gồm sửa đổi kí tự và từ, sửa đổi cấu trúc văn bản. Sửa đổi kí tự và từ Hệ soạn thảo văn bản cung cấp công cụ xóa, chèn thêm hoặc thay thế kí tự, từ hay cụm từ nào đó để sửa chúng một cách nhanh chóng. Sửa đổi cấu trúc văn bản Khi làm việc với văn bản ta có thể thay đổi cấu trúc của văn bản xóa, sao chép, di chuyển, chèn thêm một đoạn văn bản hay hình ảnh đã có sẵn. c. Trình bày văn bản Trình bày văn bảng là một chức năng rất mạnh của các hệ soạn thảo giúp tạo ra các văn bản phù hợp, nội dung đẹp mắt. Có ba mức trình bày Mức kí tự, mức đoạn, mức trang. Khả năng định dạng kí tự Phông chữ Time New Roman, Arial, Courier New,...; ví dụ Times New Roman, .VnTime, .VnTimeH, Arial, Tahoma,…; Cỡ chữ cỡ chữ 12, cỡ chữ 18, cỡ chữ 24,…; 10pt, 12pt,…pt là viết tắt của point điểm; 1pt ≈ 0,353mm; Kiểu chữ đậm, nghiêng, gạch chân,...; Màu sắc đỏ, xanh, vàng,...; Vị trí tương đối so với dòng kẻ cao hơn, thấp hơn; Khoảng cách giữa các kí tự trong một từ và giữa các từ với nhau. Hình 1. Định dạng kí tự Khả năng định dạng đoạn văn bản Vị trí lề trái, lề phải của đoạn văn bản; Căn lề trái, phải, giữa, đều hai bên; Dòng đầu tiên thụt vào hay nhô ra so với cả đoạn văn bản; Khoảng cách đến đoạn văn bản trước, sau; Khoảng cách giữa các dòng trong cùng đoạn văn bản,... Hình 2. Định dạng đoạn văn bản Khả năng định dạng trang văn bản Lề trên, lề dưới, lề trái, lề phải của trang; Hướng giấy nằm ngang hay thẳng đứng; Kích thước trang giấy; Tiêu đề trên đầu trang, tiêu đề dưới cuối trang,... Hình 3. Định dạng trang văn bản c. Một số chức năng khác Tìm kiếm thay thế; Gõ tắt hoặc tự động sửa lỗi gõ sai; Tạo bảng, tính toán, sắp xếp trong bảng; Tự động đánh số trang; Tạo chữ nghệ thuật trong văn bản; In ấn; ... . Một số quy ước trong việc gõ văn bản a. Các đơn vị xử lí trong văn bản Văn bản được tạo từ các kí tự Character. Một hoặc một vài kí tự ghép lại với nhau thành một từ Word. Các từ được phân cách bởi dấu cách còn gọi là kí tự trống - Space hoặc các dấu câu. Tập hợp nhiều từ kết thúc bằng một trong các dấu kết thúc câu, ví dụ dấu chấm ., dấu chấm hỏi ?, dấu chấm than !, được gọi là câu Sentence. Tập hợp các kí tự nằm trên cùng một hàng được gọi là một dòng Line. Nhiều câu có liên quan với nhau hoàn chỉnh về ngữ nghĩa nào đó tạo thành một đoạn văn bản Paragraph. Các đoạn văn bản được phân cách bởi dấu ngắt đoạn hay còn gọi là xuống dòng bằng phím Enter. Phần văn bản định dạng để in ra trên một trang giấy được gọi là trang Page. Phần văn bản hiển thị trên màn hình tại một thời điểm được gọi là trang màn hình. b. Một số quy ước trong việc gõ văn bản Giữa các từ chỉ dùng một kí tự trống để phân cách. Giữa các đoạn chỉ xuống dòng bằng một lần nhấn phím Enter. Các dấu ngắt câu . , ; ? ! phải đặt sát vào từ đứng tr­ớc nó, tiếp theo đến dấu cách. Các dấu ' " ] } cũng phải đặt sát vào từ đứng tr­ớc nó, tiếp theo đến dấu cách. Các dấu ' " { [ phải đặt sát vào bên trái kí tự đầu tiên của từ tiếp theo. Chú ý Tuy nhiên, do mục đích thẩm mĩ, một số sách vẫn đặt các dấu như dấu hai chấm , dấu chấm phẩy ;, dấu chấm than !, dấu chấm hỏi ? cách từ đứng trước nó một dấu cách. Trong những trường hợp này người soạn thảo phải tự kiểm soát việc xuống dòng của các kí tự này. Tiếng Việt trong soạn thảo văn bản a. Xử lí chữ Việt trong máy tính Xử lí được chữ Việt trong môi trường máy tính bao gồm các việc chính sau Nhập văn bản tiếng Việt vào máy tính. Lưu trữ, hiển thị và in ấn văn bản tiếng Việt. Truyền văn bản tiếng Việt qua mạng máy tính. b. Gõ chữ Việt Để nhập văn bản chữ Việt vào máy tính cần sử dụng ch­ương trình hỗ trợ gõ chữ Việt. Ví dụ Vietkey. Thao tác sử dụng chương trình hỗ trợ gõ chữ Việt Bước 1. Khởi động chương trình hỗ trợ gõ chữ Việt Vietkey Bước 2. Chọn kiểu gõ và bộ mã chữ Việt Kiểu gõ hai kiểu gõ chữ Việt đang đ­ợc sử dụng phổ biến hiện nay Kiểu VNI; Kiểu TELEX. Hai kiểu gõ này được trình bày trong bảng dưới đây Kiểu TELEX Kiểu VNI Để gõ chữ Ta gõ Ta gõ ă aw a8 â aa a6 đ dd d9 ê ee e6 ô oo o6 ơ ow hoặc [ o7 ư uw hoặc ] u7 Để gõ dấu Huyền f 2 Sắc s 1 Hỏi r 3 Ngã x 4 Nặng j 5 Xoá dấu z 0 Bảng 1. Gõ chữ Việt theo kiểu TELEX và VNI c. Bộ mã chữ Việt TCVN3 ABC, VNI dựa trên bộ mã ASCII UNCODE là bộ mã dùng chung cho hầu hết ngôn ngữ các Quốc gia. d. Bộ phông chữ Việt Để hiển thị và in được chữ Việt, cần có các bộ chữ Việt còn được gọi là bộ phông tương ứng với từng bộ mã. Có nhiều bộ phông với nhiều kiểu chữ khác nhau được xây dựng để hiển thị và in chữ Việt. Ví dụ, những bộ phông ứng với bộ mã TCVN3 được đặt tên với tiếp đầu ngữ .Vn, chẳng hạn .VnTime, .VnArial,... hay những bộ phông ứng với bộ mã VNI được đặt tên với tiếp đầu ngữ VNI như VNI-Times, VNI-Helve,... Hiện nay, đã có một số bộ phông ứng với bộ mã Unicode hỗ trợ cho chữ Việt như Times New Roman, Arial, Tahoma,... e. Các phần mềm hỗ trợ chữ Việt Để máy tính có thể kiểm tra chính tả, sửa lỗi, sắp xếp,... văn bản tiếng Việt, cần dùng các phần mềm tiện ích riêng. Hiện nay, một số phần mềm tiện ích như kiểm tra chính tả, nhận dạng chữ Việt,…... đã và đang được phát triển.

các khả năng định dạng kí tự