Kỹ Thuật - Công Nghệ - Công Nghệ Thông Tin, it, phầm mềm, website, web, mobile app, trí tuệ nhân tạo, blockchain, AI, machine learning - Công nghệ thông tin 0͡ t s͙ v̭ n ÿ͉ ch͕ n l͕ c cͯ a Công ngh͏ thông tin, H̫ i Phòng 2005 1 NGHIÊN CӬU, ĈÁNH GIÁ VÀ THӰ NGHIӊM KHҦ NĂNG ӬNG ''''ӨNG CÔNG CӨ MÃ NGUӖN MӢ PYTHON TRONG ;Ӱ LÝ VĂN BҦN Hoàng Anh ViӋt, Ĉinh Thӏ Phѭѫng Thu, HuǤnh QuyӃt Thҳng Khoa CNTT, Tr˱ͥ ng ĈHBK Hà N͡ i Email: hoanganhviet2002yahoo.com, thudtpit-hut.edu.vn, thanghqit-hut.edu.vn Tóm t̷ t: Python là m͡ t ngôn ngͷ mã ngu͛ n mͧÿ ang phát tri͋ n và thu hút ÿ˱ͫ c s quan tâm cͯ a r̭ t nhi͉ u chuyên gia xây dng và phát tri͋ n ͱng dͭ ng trong thc t͇ hi͏ n nay. Trong bài báo này chúng tôi ÿ͉ c̵ p ÿ͇ n nhͷng nghiên cͱu v͉ th͇ m̩ nh Fͯ a Python trong lƭnh vc x͵ lý văn b̫ n vͣ i vi͏ c s͵ dͭ ng Python trong x͵ lý các bi͋ u thͱc chính quy, tͳÿó phát tri͋ n m͡ t th˱ vi͏ n trͫ giúp x͵ lý dͷ li͏ u văn b̫ n nh̹ m phͭ c vͭ cho các bài toán x͵ lý văn b̫ n quan tr͕ ng nh˱: tách tͳ , phân tích cú pháp, tóm t̷ t văn b̫ n,... Chúng tôi cNJng ÿã ti͇ n hành th͵ nghi͏ m trên bài toán tách tͳ tÿ͡ ng vͣ i các t̵ p văn b̫ n ti͇ ng Vi͏ t và ti͇ ng Anh có dung l˱ͫ ng khác nhau. Các so sánh ÿ˱ͫ c thc hi͏ n trên hai công cͭ Python và ngôn ngͷ C.NET . 7ͳ khoá: ngôn ngͷ Python, mã ngu͛ n mͧ , x͵ lý văn b̫ n, tách tͳ văn b̫ n. 1. MӢĈҪU Khai phá văn bҧn là mӝt bài toán quan trӑng trong lӟp các bài toán khai phá dӳ liӋ u và phát hiӋn tri thӭc. HiӋn nay phҫn lӟn dӳ liӋu ÿѭӧc lѭu trӳӣ dҥng văn bҧn (text), ÿӏnh dҥ ng này chiӃm ÿa sӕ trong các dӳ liӋu tác nghiӋp, trong các dӳ liӋu lѭu trӳ nghiên cӭu,... Ĉӕi vӟi các lұ p trình viên, nhӳng ngѭӡi xây dӵng và phát triӇn ӭng dөng thӵc tӃ, thì vӟi mӝt khӕi lѭӧng dӳ liӋu Oӟn viӋc xӱ lý văn bҧn ÿѭӧc coi là tӕn nhiӅu chi phí thӡi gian và tài nguyên hӋ thӕng. Vì thӃ chúng ta cҫn có nhӳng công cө xӱ lý văn bҧn thӵc sӵ mҥnh ÿӇÿáp ӭng tӕt hѫn nhu cҫ u phát triӇn các ӭng dөng trong thӵc tӃ . Trong bài báo này chúng tôi trình bày các nghiên cӭu, ÿánh giá và thӱ nghiӋm khҧ năng ӭng dөng cӫa mӝt công cө mã nguӗn mӣ - ngôn ngӳ Python - trong bài toán xӱ lý văn bҧ n 2. Python là ngôn ngӳ mã nguӗn mӣ trong sáng, dӉ hiӇu, ÿa năng và rҩt hӳu dөng cho các ӭng Gөng, ÿһc biӋt là các thao tác liên quan ÿӃn xӱ lý văn bҧn. Các thѭ viӋn, hàm, lӟp trong Python ÿѭӧc xây dӵng ÿӇ thích hӧp cho sӵ phát triӇn cӫa nhӳng trình soҥn thҧo, các bӝ xӱ lý tӯ , ngôn ngӳ, phҫn mӅm dàn trang, các hӋ thӕng lӳu trӳ và xӱ lý thông tin văn bҧn,… ҩu trúc cӫa bài báo ÿѭӧc trình bày nhѭ sau. Trong phҫn 2 chúng tôi giӟi thiӋu tәng quan YӅ thѭ viӋn chuҭn cӫa Python trong xӱ lý xâu chuӛi, chӫ yӃu ÿӅ cұp tӟi các hàm cѫ bҧn cӫ a Python và khҧ năng xӱ lý các biӇu thӭc chính quy trong Python. Phҫn 3 trình bày viӋc phát triӇn Pӝt thѭ viӋn xӱ lý văn bҧn mà chúng tôi ÿã thӵc hiӋn xây dӵng dӵa trên thѭ viӋn chuҭn cӫ a Python. Cuӕi cùng, trong phҫn 4, chúng tôi trình bày các kӃt quҧ so sánh ÿánh giá hiӋu quҧ giӳ a các thӱ nghiӋm trên thѭ viӋn xӱ lý văn bҧn Python ÿã phát triӇn vӟi công cө C ӭng dө ng trong bài toán tách tӯ văn bҧn. KӃt quҧ thӱ nghiӋm thӵc hiӋn trên cҧ hai loҥi văn bҧn tiӃng Anh và Yăn bҧn tiӃng ViӋt. 2. THѬ VIӊN CHUҬN CӪA PYTHON TRONG XӰ LÝ XÂU CHUӚI 0͡ t s͙ v̭ n ÿ͉ ch͕ n l͕ c cͯ a Công ngh͏ thông tin, H̫ i Phòng 2005 2 2.1 Công cө nguӗn mӣ Python và các module cѫ bҧn xӱ lý xâu chuӛi Python ra ÿӡi vào năm 1989 bӣi Guido van Rossum tҥi Hà Lan và bҳt ÿҫu ÿѭӧc biӃt ÿӃn Wӯ năm 1991. Sau ÿó Python tiӃp tөc ÿѭӧc phát triӇn dѭӟi dҥng ngôn ngӳ mã nguӗn mӣ bӣi tә chӭc Python Software Foudation1. Python là mӝt ngôn ngӳ lұp trình ÿѫn giҧn nhѭng mҥnh m Ӂ Eӣi nó vӯa có ÿѭӧc sӭc mҥnh giӕng nhѭ các ngôn ngӳ biên dӏch truyӅn thӕng nhѭng cNJng vӯ a có ÿѭӧc các lӧi thӃ cӫa mӝt ngôn ngӳ thông dӏch. Python là ngôn ngӳ lұp trình tѭѫng tác, thông Gӏch, hѭӟng ÿӕi tѭӧng vӟi rât nhiӅu ѭu ÿLӇm nәi bұt 1,2: cú pháp trong sáng, dӉ hiӇu; tính Wѭѫng thích cao; khҧ năng mӣ rӝng; các kiӇu dӳ liӋu ÿӝng ӣ mӭc cao; chҥy trên ÿa nӅn. Hình 1. Các module hӛ trӧ cho xӱ lý xâu, chuӛi trong Python Các module trong Python hӛ trӧ cho xӱ lý văn bҧn ÿѭӧc mô tҧ trong hình 1. Có 10 module trong ÿó các module cѫ bҧn nhҩt bao gӗm: Module string: chӭc các phѭѫng thӭc thӵc hiӋn các thao tác xâu cѫ bҧn. Module Re: chӭa các phѭѫng thӭc hӛ trӧ xӱ lý biӇu thӭc chính quy. Module Unicodedata: chӭa các phѭѫng thӭc thӵc hiӋn các thao tác vӟi dӳ liӋu dҥ ng unicode. Module Codecs: chӭa các phѭѫng thӭc mã hóa và giҧi mã dӳ liӋu. Module StringIO: chӭa các phѭѫng thӭc thӵc hiӋn thao tác xӱ lý vào ra. Module Stringprep: chӭa các phѭѫng thӭc thӵc hiӋn tiӅn xӱ lý xâu. 2.2 Các phѭѫng thӭc cѫ bҧn xӱ lý ký tӵ và xâu chuӛi trong Python Python hӛ trӧ xâu chuӛi nhѭ mӝt kiӇu dӳ liӋu cѫ bҧn. Ngoài mӝt sӕ các thao tác cѫ bҧ n nhѭ: lҩy chiӅu dài xâu vӟi hàm len, kӃt hӧp các xâu vӟi toán tӱ “+” và các kiӇu ÿӏnh dҥng xâu Yӟi toán tӱ ÿӏnh dҥng ””,… thì xâu chuӛi trong Python còn ÿѭӧc hӛ trӧ bӣi mӝt loҥ t các phѭѫng thӭc nhҵm thӵc hiӋn các ÿӏnh dҥng và khҧ năng xӱ lý khác. Thѭ viӋn chuҭn cӫ a Python bao gӗm gҫn 50 phѭѫng thӭc xӱ lý xâu chuӛi. Các phѭѫng thӭc này chia làm 5 nhóm: Nhóm các phѭѫng thӭc dùng ÿӇÿӏnh vӏ trong xâu: thӵc hiӋn xác ÿӏnh vӏ trí các ký tӵ trong xâu, tìm kiӃm các xâu con..... Nhóm các phѭѫng thӭc dùng ÿӇ chuyӇn ÿәi xâu: thӵc hiӋn chuyӇn dҥng cӫa các ký tӵ , xâu con trong xâu gӕc nhѭ chuyӇn sang dҥng chӳ hoa, chӳ thѭӡng, mã Unicode,.... 0͡ t s͙ v̭ n ÿ͉ ch͕ n l͕ c cͯ a Công ngh͏ thông tin, H̫ i Phòng 2005 3 Nhóm các phѭѫng thӭc dùng ÿӇ kӃt hӧp và phân tách xâu: thӵc hiӋn viӋ c phân tách xâu thành các xâu con hoһc ghép nӕi các xâu con thành mӝt xâu duy nhҩt. Nhóm các phѭѫng thӭc dùng ÿӇ kiӇm tra thuӝc tính cӫa xâu: thӵc hiӋn viӋc xác ÿӏ nh xem mӝt sӕ thuӝc tính cӫa xâu có thӓa mãn các ÿLӅu kiӋn nào ÿó hay không, ví dө kiӇ m tra xem mӝt xâu có bҳt ÿҫu hay kӃt thúc bҵng mӝt xâu con nào ÿó không.... Nhóm các phѭѫng thӭc dùng ÿӇ tinh chӍnh xâu: thӵc hiӋn viӋc loҥi bӓ ký tӵ trҳng, căn OӅ xâu,... 2.3. BiӇu thӭc chính quy và khҧ năng xӱ lý biӇu thӭ c chính quy trong Python 2.3.1. BiӇu thӭc chính quy Khҧ năng xӱ lý biӇu thӭc chính quy là mӝt trong nhӳng khҧ năng hiӋu quҧ nhҩt cӫ a Python. Mӝt biӇu thӭc chính quy là mӝt kiӇu xâu chuӛi ÿһc biӋt mà mӝt chѭѫ ng trình Python dùng ÿӇ xӱ lý các xâu chuӛi trong văn bҧn phù hӧp vӟi các mүu và yêu cҫu ÿã chӍ ra trong biӇ u thӭc chính quy ÿ ó. Trong Python xӱ lý biӇu thӭc chính quy ÿѭӧc cài ÿһt trong module Re. 2.3.2. Các lӟp ký tӵ và chuӛi ÿһc biӋt Trong phҫn này, chúng tôi sӁÿӅ cұp tӟi hai ÿѫn vӏ cҩu thành nên biӇu thӭc chính quy: các Oӟp ký tӵ và các chuӛi ÿһc biӋt. Mӝt lӟp ký tӵ xác ÿӏnh mӝt nhóm các ký tӵÿӇ so khӟp trong Pӝt xâu. Mӝt chuӛi ÿһc biӋt là mӝt hình thӭc tҥo nhanh cho mӝt lӟp ký tӵ thông thѭӡng, ví dө: Các siêu ký tӵ ““ và “” bao hàm mӝt lӟp các biӇu thӭc chính quy. Mӝt biӇu thӭ c chính quy mà chӭa mӝt lӟp các ký tӵ thì sӁ “so khӟp” vӟi mӝt ký tӵ trong lӟp ÿó. Ví dө , biӇu thӭc chính quy ”abc” khӟp vӟi ba kí tӵ a, b hoһc c. Các lӟp có thӇ sӱ dөng ký tӵ “-“ ÿӇ chӍÿӏnh mӝt dҧi các ký tӵ liên tiӃp. Ví dө, biӇu thӭ c chính quy “a-d” là tѭѫng ÿѭѫng vӟi biӇu thӭc chính quy “abcd”. Khi ÿѭӧc ÿһt ӣ vӏ trí ÿҫu tiên cӫa mӝt lӟp, siêu ký tӵ “^” sӁ thӵc hiӋn viӋc “phӫÿӏnh” Oӟp. ĈLӅu này có nghƭa là biӇu thӭc chính quy sӁ so khӟp tҩt cҧ các ký tӵ trӯ các ký t ӵ ÿѭӧc chӍÿӏnh trong lӟp ÿó. Ví dө, lӟp “^a-c” sӁ so khӟp bҩt kǤ ký tӵ nào ngoài a,b, và c,… 0ӝt sӕ ký tӵÿһc biӋt và vai trò cӫa chúng ÿѭӧc chӍ ra trong bҧng 1. Ký tӵÿһc biӋt Ý nghƭa \d lӟp các sӕ (0-9) \D Oӟp phӫÿӏnh cӫa lӟp sӕ (^0-9) \s lӟp các dҩu trҳng ( \n\f\r\t\v) \S lӟp phӫ ÿӏnh cӫa lӟp các dҩu trҳng (^\n\f\r\t\v) \w Oӟp cӫa các ký tӵ chӳ và chӳ sӕ (a-zA-Z0-9) \W lӟp phӫ ÿӏnh cӫa lӟp kӻ tӵ chӳ và chӳ sӕ (^a-zA-Z0-9) \\ dҩu gҥch chéo (\) ҧng 1. Các chuӛi ÿһc biӋt cӫa biӇu thӭc chính quy trong Python Ví dө mӝt biӇu thӭc chính quy : expressions = r"2x\+5y7y-3z",9 r"0-9a-zA-Z0-9.0-9yz",10 r"\d\w-\d\w" 0͡ t s͙ v̭ n ÿ͉ ch͕ n l͕ c cͯ a Công ngh͏ thông tin, H̫ i Phòng 2005 4 BiӇu thӭc chính quy trên chӭa mӝt siêu ký tӵ mӟi: siêu ký tӵ “” dùng ÿӇ so khӟp vӟi biӇu thӭ c chính quy ӣ bên trái hoһc bên phҧi cӫa siêu ký tӵ, chҷng hҥn cách khác ÿӇ viӃt biӇu thӭc “abc” là “abc”. Theo cách ÿó, biӇu thӭc chính quy trên sӁ so khӟp vӟi xâu “2x+5y” hoһ c xâu “7y-3z”. 2.3.3. Sӵ hӧp nhóm 0ӝt biӇu thӭc chính quy có thӇ chӍÿӏnh các nhóm cӫa nhӳng xâu con ÿӇ so khӟp trong Pӝt xâu. Mӝt chѭѫng trình trên Python sau khi tìm kiӃm hoһc so khӟp mӝt xâu vӟi biӇu thӭ c chính quy sӁ trích ra các thông tin tӯ các nhóm thӓa mãn. Ví dө 2 dѭӟi ÿây tҥo ra các biӇu thӭ c chính quy vӟi các nhóm và ÿѭa ra nhӳng thông tin trích tӯ các nhóm ÿó: expression1 = \r"(\w+ \w+), ĈL͏ n tho̩ i: (\d{3}-\d{4}), E-mail: (\w+\w+\.\w{3})" Siêu ký tӵ “(“ và “)” mô tҧ mӝt nhóm. BiӇu thӭc chính quy expression1 mô tҧ 3 nhóm. Nhóm ÿҫu tiên so khӟp vӟi mӝt tӯ “(\w+)”, theo sau là 1 khoҧng trҳng, theo sau tiӃp là Pӝt tӯ khác. Nhóm thӭ 2 so khӟp vӟi 3 chӳ sӕ, theo sau là ký tӵ “-“, theo sau bӣi 4 chӳ sӕ. Nhóm thӭ 3 so khӟp vӟi 1 hoһc nhiӅu chӳ sӕ hoһc chӳ cái, theo sau là ký tӵ “”, theo sau tiӃp là 1 hoһc nhiӅu ký tӵ chӳ sӕ hoһc chӳ cái, theo sau tiӃp là ký tӵ “.”, và tiӃp cuӕ i cùng là 3 ký tӵ chӳ cái hoһc sӕ . Nhѭ vұy có thӇ thҩy biӇu thӭc chính quy expression1 chính là viӋc thӵc hiӋn tìm kiӃm so khӟ p xâu theo ÿӏnh dҥng: tên, sӕÿLӋn thoҥi và ÿӏa chӍ email cӫa mӝt ngѭӡi, ví dө: "Hoàng Anh Vi͏ t, ĈL͏ n tho̩ i: 868-2595, e-mail: hoanganhvietyahoo.com", và sӱ dөng câu lӋnh: re.match( expression1, teststring) trong module Re . Bên cҥnh ÿó, viӋc gom nhóm biӇu thӭc chính quy còn mang lҥi mӝt kӃt quҧ hӳ u ích khác. Các siêu ký tӵ “+” và “” ÿѭӧc gӑi là các toán t͵ tham lam. 0ӝt toán tӱ tham lam sӁ cӕ gҳ ng giúp thӵc hiӋn so khӟp thұt nhiӅu ký tӵ có thӇ nhҩt giúp nâng cao hiӋu quҧ xӱ lý. Ĉѭѫng nhiên ÿôi khi có thӇÿLӅu này không phҧi là ÿLӅu mong muӕn. 3. Phát triӇn thѭ viӋn xӱ lý văn bҧn trên Python: ''''ӵa trên các thѭ viӋn chuҭn cӫa Python và vӟi mong muӕn phát triӇn mӝt thѭ viӋn nhҵ m phөc vө lƭnh vӵc xӱ lý văn bҧn, trong cӝng ÿӗng mã nguӗn mӣ cӫa Python, chúng tôi ÿã s ӱ Gөng, phát triӇn và thӱ nghiӋm trên module pyparsing cӫa Paul McGuire 3 – mӝt module ÿã ÿѭӧc ÿánh giá là xӱ lý rҩt tӕt cho vҩn ÿӅ này. Module pyparsing có các thành phҫn xӱ lý dӳ liӋu ÿҫu vào và ra trong nhӳng môi trѭӡ ng và ngôn ngӳ khác nhau. Ĉӗng thӡi trong module pyparsing chúng ta có thӇ dӉ dàng trӵc tiӃp ÿӏnh nghƭa cú pháp lӟp cho bҩt kǤ ӭng dөng phân tích và xӱ lý văn bҧn nào. Do ÿó, vӟi pyparsing ta có thӇÿánh giá các biӇu thӭc chính quy c...
Trang 1NGHIÊN C U, ÁNH GIÁ VÀ TH NGHI M KH N NG NG
NG CÔNG C MÃ NGU N M PYTHON TRONG
LÝ V N B N Hoàng Anh Vi t, inh Th Ph ng Thu, Hu nh Quy t Th ng
Khoa CNTT, Tr ng HBK Hà N i Email: hoanganhviet2002@yahoo.com, thudtp@it-hut.edu.vn, thanghq@it-hut.edu.vn
Tóm t t: Python là m t ngôn ng mã ngu n m ang phát tri n và thu hút c s quan tâm c a r t nhi u chuyên gia xây d ng và phát tri n ng d ng trong th c t
hi n nay Trong bài báo này chúng tôi c p n nh ng nghiên c u v th m nh
a Python trong l nh v c x lý v n b n v i vi c s d ng Python trong x lý các
bi u th c chính quy, t ó phát tri n m t th vi n tr giúp x lý d li u v n b n
nh m ph c v cho các bài toán x lý v n b n quan tr ng nh : tách t , phân tích cú pháp, tóm t t v n b n, Chúng tôi c ng ã ti n hành th nghi m trên bài toán tách t t ng v i các t p v n b n ti ng Vi t và ti ng Anh có dung l ng khác nhau Các so sánh c th c hi n trên hai công c Python và ngôn ng C#.NET
khoá: ngôn ng Python, mã ngu n m , x lý v n b n, tách t v n b n.
Khai phá v n b n là m t bài toán quan tr ng trong l p các bài toán khai phá d li u và phát hi n tri th c Hi n nay ph n l n d li u c l u tr d ng v n b n (text), nh d ng này
chi m a s trong các d li u tác nghi p, trong các d li u l u tr nghiên c u, i v i các l p trình viên, nh ng ng i xây d ng và phát tri n ng d ng th c t , thì v i m t kh i l ng d li u
n vi c x lý v n b n c coi là t n nhi u chi phí th i gian và tài nguyên h th ng Vì th chúng ta c n có nh ng công c x lý v n b n th c s m nh áp ng t t h n nhu c u phát tri n các ng d ng trong th c t
Trong bài báo này chúng tôi trình bày các nghiên c u, ánh giá và th nghi m kh n ng
ng d ng c a m t công c mã ngu n m - ngôn ng Python - trong bài toán x lý v n b n [2] Python là ngôn ng mã ngu n m trong sáng, d hi u, a n ng và r t h u d ng cho các ng
ng, c bi t là các thao tác liên quan n x lý v n b n Các th vi n, hàm, l p trong Python
c xây d ng thích h p cho s phát tri n c a nh ng trình so n th o, các b x lý t , ngôn
ng , ph n m m dàn trang, các h th ng l u tr và x lý thông tin v n b n,…
u trúc c a bài báo c trình bày nh sau Trong ph n 2 chúng tôi gi i thi u t ng quan
th vi n chu n c a Python trong x lý xâu chu i, ch y u c p t i các hàm c b n c a Python và kh n ng x lý các bi u th c chính quy trong Python Ph n 3 trình bày vi c phát tri n
t th vi n x lý v n b n mà chúng tôi ã th c hi n xây d ng d a trên th vi n chu n c a Python Cu i cùng, trong ph n 4, chúng tôi trình bày các k t qu so sánh ánh giá hi u qu gi a các th nghi m trên th vi n x lý v n b n Python ã phát tri n v i công c C# ng d ng trong bài toán tách t v n b n K t qu th nghi m th c hi n trên c hai lo i v n b n ti ng Anh và
n b n ti ng Vi t
2 TH VI N CHU N C A PYTHON TRONG X LÝ XÂU CHU I
Trang 22.1 Công c ngu n m Python và các module c b n x lý xâu chu i
Python ra i vào n m 1989 b i Guido van Rossum t i Hà Lan và b t u c bi t n
n m 1991 Sau ó Python ti p t c c phát tri n d i d ng ngôn ng mã ngu n m b i t
ch c Python Software Foudation[1] Python là m t ngôn ng l p trình n gi n nh ng m nh m
i nó v a có c s c m nh gi ng nh các ngôn ng biên d ch truy n th ng nh ng c ng v a
có c các l i th c a m t ngôn ng thông d ch Python là ngôn ng l p trình t ng tác, thông
ch, h ng i t ng v i rât nhi u u m n i b t [1,2]: cú pháp trong sáng, d hi u; tính
ng thích cao; kh n ng m r ng; các ki u d li u ng m c cao; ch y trên a n n
Hình 1 Các module h tr cho x lý xâu, chu i trong Python
Các module trong Python h tr cho x lý v n b n c mô t trong hình 1 Có 10 module trong ó các module c b n nh t bao g m:
Module string: ch c các ph ng th c th c hi n các thao tác xâu c b n
Module Re: ch a các ph ng th c h tr x lý bi u th c chính quy
Module Unicodedata: ch a các ph ng th c th c hi n các thao tác v i d li u d ng unicode
Module Codecs: ch a các ph ng th c mã hóa và gi i mã d li u
Module StringIO: ch a các ph ng th c th c hi n thao tác x lý vào ra
Module Stringprep: ch a các ph ng th c th c hi n ti n x lý xâu
2.2 Các ph ng th c c b n x lý ký t và xâu chu i trong Python
Python h tr xâu chu i nh m t ki u d li u c b n Ngoài m t s các thao tác c b n
nh : l y chi u dài xâu v i hàm len, k t h p các xâu v i toán t “+” và các ki u nh d ng xâu
i toán t nh d ng ”%”,… thì xâu chu i trong Python còn c h tr b i m t lo t các
ph ng th c nh m th c hi n các nh d ng và kh n ng x lý khác Th vi n chu n c a Python bao g m g n 50 ph ng th c x lý xâu chu i Các ph ng th c này chia làm 5 nhóm:
Nhóm các ph ng th c dùng nh v trong xâu: th c hi n xác nh v trí các ký t trong xâu, tìm ki m các xâu con
Nhóm các ph ng th c dùng chuy n i xâu: th c hi n chuy n d ng c a các ký t , xâu con trong xâu g c nh chuy n sang d ng ch hoa, ch th ng, mã Unicode,
Trang 3Nhóm các ph ng th c dùng k t h p và phân tách xâu: th c hi n vi c phân tách xâu thành các xâu con ho c ghép n i các xâu con thành m t xâu duy nh t
Nhóm các ph ng th c dùng ki m tra thu c tính c a xâu: th c hi n vi c xác nh xem m t s thu c tính c a xâu có th a mãn các u ki n nào ó hay không, ví d ki m tra xem m t xâu có b t u hay k t thúc b ng m t xâu con nào ó không
Nhóm các ph ng th c dùng tinh ch nh xâu: th c hi n vi c lo i b ký t tr ng, c n xâu,
2.3 Bi u th c chính quy và kh n ng x lý bi u th c chính quy trong Python
2.3.1 Bi u th c chính quy
Kh n ng x lý bi u th c chính quy là m t trong nh ng kh n ng hi u qu nh t c a Python M t bi u th c chính quy là m t ki u xâu chu i c bi t mà m t ch ng trình Python dùng x lý các xâu chu i trong v n b n phù h p v i các m u và yêu c u ã ch ra trong bi u
th c chính quy ó
Trong Python x lý bi u th c chính quy c cài t trong module Re.
2.3.2 Các l p ký t và chu i c bi t
Trong ph n này, chúng tôi s c p t i hai n v c u thành nên bi u th c chính quy: các
p ký t và các chu i c bi t M t l p ký t xác nh m t nhóm các ký t so kh p trong
t xâu M t chu i c bi t là m t hình th c t o nhanh cho m t l p ký t thông th ng, ví d : Các siêu ký t “[“ và “]” bao hàm m t l p các bi u th c chính quy M t bi u th c
chính quy mà ch a m t l p các ký t thì s “so kh p” v i m t ký t trong l p ó Ví d ,
bi u th c chính quy ”[abc]” kh p v i ba kí t a, b ho c c.
Các l p có th s d ng ký t “-“ ch nh m t d i các ký t liên ti p Ví d , bi u th c
chính quy “[a-d]” là t ng ng v i bi u th c chính quy “[abcd]”.
Khi c t v trí u tiên c a m t l p, siêu ký t “^” s th c hi n vi c “ph nh”
p u này có ngh a là bi u th c chính quy s so kh p t t c các ký t tr các ký t
c ch nh trong l p ó Ví d , l p “[^a-c]” s so kh p b t k ký t nào ngoài a,b,
và c,…
t s ký t c bi t và vai trò c a chúng c ch ra trong b ng 1
\d l p các s ([0-9])
\D p ph nh c a l p s ([^0-9])
\s l p các d u tr ng ([ \n\f\r\t\v])
\S l p ph nh c a l p các d u tr ng ([^\n\f\r\t\v])
\w p c a các ký t ch và ch s ([a-zA-Z0-9_])
\W l p ph nh c a l p k t ch và ch s ([^a-zA-Z0-9_])
\\ d u g ch chéo (\)
ng 1 Các chu i c bi t c a bi u th c chính quy trong Python
Ví d m t bi u th c chính quy :
expressions = [ r"2x\+5y|7y-3z",9 r"[0-9][a-zA-Z0-9_].[0-9][yz]",10 r"\d\w-\d\w"]
Trang 4Bi u th c chính quy trên ch a m t siêu ký t m i: siêu ký t “|” dùng so kh p v i bi u th c chính quy bên trái ho c bên ph i c a siêu ký t , ch ng h n cách khác vi t bi u th c
“[abc]” là “a|b|c” Theo cách ó, bi u th c chính quy trên s so kh p v i xâu “2x+5y” ho c
xâu “7y-3z”.
2.3.3 S h p nhóm
t bi u th c chính quy có th ch nh các nhóm c a nh ng xâu con so kh p trong
t xâu M t ch ng trình trên Python sau khi tìm ki m ho c so kh p m t xâu v i bi u th c chính quy s trích ra các thông tin t các nhóm th a mãn Ví d 2 d i ây t o ra các bi u th c chính quy v i các nhóm và a ra nh ng thông tin trích t các nhóm ó:
expression1 = \r"(\w+ \w+), n tho i: (\d{3}-\d{4}), E-mail: (\w+@\w+\.\w{3})"
Siêu ký t “(“ và “)” mô t m t nhóm Bi u th c chính quy expression1 mô t 3 nhóm.
Nhóm u tiên so kh p v i m t t “(\w+)”, theo sau là 1 kho ng tr ng, theo sau ti p là
t t khác
Nhóm th 2 so kh p v i 3 ch s , theo sau là ký t “-“, theo sau b i 4 ch s
Nhóm th 3 so kh p v i 1 ho c nhi u ch s ho c ch cái, theo sau là ký t “@”, theo sau ti p là 1 ho c nhi u ký t ch s ho c ch cái, theo sau ti p là ký t “.”, và ti p cu i cùng là 3 ký t ch cái ho c s
Nh v y có th th y bi u th c chính quy expression1 chính là vi c th c hi n tìm ki m so kh p
xâu theo nh d ng: tên, s n tho i và a ch email c a m t ng i, ví d : "Hoàng Anh Vi t,
n tho i: 868-2595, e-mail: hoanganhviet@yahoo.com ", và s d ng câu l nh: re.match( expression1, teststring) trong module Re.
Bên c nh ó, vi c gom nhóm bi u th c chính quy còn mang l i m t k t qu h u ích khác
Các siêu ký t “+” và “*” c g i là các toán t tham lam. t toán t tham lam s c g ng giúp th c hi n so kh p th t nhi u ký t có th nh t giúp nâng cao hi u qu x lý ng nhiên
ôi khi có th u này không ph i là u mong mu n
3 Phát tri n th vi n x lý v n b n trên Python:
a trên các th vi n chu n c a Python và v i mong mu n phát tri n m t th vi n nh m
ph c v l nh v c x lý v n b n, trong c ng ng mã ngu n m c a Python, chúng tôi ã s
ng, phát tri n và th nghi m trên module pyparsing c a Paul McGuire [3] – m t module ã
c ánh giá là x lý r t t t cho v n này
Module pyparsing có các thành ph n x lý d li u u vào và ra trong nh ng môi tr ng
và ngôn ng khác nhau ng th i trong module pyparsing chúng ta có th d dàng tr c ti p
nh ngh a cú pháp l p cho b t k ng d ng phân tích và x lý v n b n nào Do ó, v i
pyparsing ta có th ánh giá các bi u th c chính quy c a ng i dùng, th c hi n trích rút thông
tin, d li u t các v n b n ã nh d ng Các l p c b n c a th vi n pyparsing c mô t trong hình 2
Trang 5Hình 2 Bi u phân l p môdule x lý v n b n c a th vi n pyparsing
Th vi n pyparsing bao g m các l p chính:
ParserElement: l p tr u tr ng cho t t c các l p khác c a module pyparsing Các
ph ng th c chính c a l p này bao g m:
o parserString(sourceString): K t qu phân tích tr v m t i t ng phù h p
i d ng là m t danh sách
o parsetFile(sourceFile): ây là m t hàm r t ti n d ng, th c hi n c toàn b file u vào và toàn b n i dung trong file s c truy n d i d ng m t xâu
n parseString().
o scanString(sourceString): hàm này dùng tìm ki m và trích rút các n so
Trang 6o setDebug(): hàm thi t l p ch g l i thông tin khi ang so kh p d li u
o leaveWhiteSpace(): b qua d u tr ng khi ti n hành so kh p.
o setWhiteSpace(chars): xác nh danh sách các ký hi u dùng nh các ký hi u
tr ng trong quá trình so kh p
Literal: l p ch a các ph ng th c ph c v cho thi t l p xâu dùng so kh p
Word: l p ch a các ph ng th c ph c v thi t l p m t xâu ch a t p h p các ký t
kh i t o
CharNotIn: l p ch a các ph ng th c t ng t nh l p Word, nh ng so kh p các ký
không có trong xâu kh i t o
Group: l p ch a các ph ng th c t o ra các ký hi u so kh p nhóm l i m t danh sách
Dict: l p ch a các ph ng th c gi ng Group, nh ng th c hi n thi t l p cho m t t
n, s d ng tham s u tiên c a danh sách ký hi u làm khóa, còn các ký hi u khác là giá tr
ParsetResults: l p dùng ch a và qu n lý danh sách các ký hi u c t o b i vi c phân tích bi u th c u vào ParseResults có th s d ng ki u list ho c dictionary.
ParsException: p ch a các ph ng th c x lý ngo i l , k t qu c tr v khi câu phân tích không thành công
th a th vi n pyparsing trên chúng tôi ã phát tri n m t th vi n – th vi n Word
Analysis- nh m ph c v cho các bài toán x lý v n b n quan tr ng nh : tách t , phân tích cú
pháp, tóm t t v n b n, Trong th vi n này chúng tôi c ng s d ng th vi n Re c a Python
trong x lý các bi u th c chính quy (hình 3)
Trang 7t s hàm chính trong Word Analysis nh :
def Stringstart(Position): vi c so kh p c ti n hành ng v i v trí u tiên ho c v trí
cu i cùng c a xâu u vào
def Match(string): Hàm dùng ki m tra xem xâu u vào có trong t n t v ng hay không
def ListLine(string): Hàm dùng phân tích t p v n b n u vào thành m t danh sách các dòng theo c u trúc t p M i dòng có th bao g m m t t p các câu
def ListSentence(string): Hàm dùng phân tích v n b n u vào thành m t t p các hình v ng n h n Trong ó các ký hi u phân tách nh : “,”, “.”, “!”, “;”, “…”, v… s
c nh ngh a trong l p Word.
def Find(string): Hàm dùng th c hi n tìm ki m m t xâu theo thu t toán c a bài toán,
th trong bài toán tách t t ng thì hàm này s th c hi n vi c ch n t có dài l n
nh t t bên trái sang
def count(string,char): Hàm dùng xác nh s l n xu t hi n c a m t xâu con trong xâu u vào
def Listcorrect(string): Hàm dùng a ra danh sách các t c phân tách t xâu u vào và có trong t n t v ng
Listfail: a ra danh sách các k t qu sai trong xâu u vào, c th ây là các t phân tách c t xâu u vào nh ng không tìm th y trong t n t v ng
…
Các ph ng th c xây d ng trong th vi n Word Analysis này ã c chúng tôi s
ng th nghi m b c u trên m t bài toán x lý v n b n t ng và ã ch ng minh c tính
hi u qu c a mình qua k t qu th c nghi m (ph n 4) Hi n nay chúng tôi ang hoàn thi n h n
th vi n này h tr nhi u h n trên các bài toán x lý v n b n t ng khác
4 Th nghi m và ánh giá trên bài toán tách t v n b n
Bài toán tách t t ng cho v n b n (Word Segmentation) là m t trong nh ng bài toán
b n và vô cùng quan tr ng trong x lý và khai phá d li u v n b n V i m t v n b n u vào,
t qu u ra c a bài toán s tr v danh sách các t c tách ra t v n b n ban u K t qu
a bài toán tách t c s d ng nh m t ti n cho hàng lo t bài toán quan tr ng khác v sau
nh : tìm c m t (chunking), gán nhãn t lo i (POS tagging), phân tích cú pháp (Parsing), phân
p v n b n (Text Categorization), phân nhóm v n b n (Text Clustering), tóm t t v n b n (Text
Summarization),…
th y c các k t qu nghiên c u, ánh giá và th nghi m kh n ng ng d ng c a ngôn ng Python trong l nh v c x lý v n b n, chúng tôi ã ti n hành s d ng Python và m t công c khác – ngôn ng C#, m t công c phát tri n ng d ng r t m nh trên môi tr ng NET ang c s d ng r ng rãi hi n nay - áp d ng trong bài toán tách t t ng cho v n b n Trong ó i v i ngôn ng Python, chúng tôi s d ng th vi n Word Analysis ã xây d ng
ph n 3 ti n hành th nghi m K t qu th nghi m th c hi n trên c hai lo i v n b n ti ng Anh và v n b n ti ng Vi t
4.1 Môi tr ng, d li u th nghi m
th c hi n tách t t ng cho v n b n ti ng Vi t và ti ng Anh có r t nhi u thu t toán khác nhau, ví d v i ti ng Vi t nh : thu t toán tách t d a trên i sánh dài t dài nh t t
Trang 8trái sang, t ph i sang, tách t d a trên th ,…[6, 7] Trong th nghi m này c a chúng tôi, thu t toán tách t c chúng tôi s d ng chung cho c hai lo i v n b n ti ng Vi t và ti ng Anh
là thu t toán tách t d a trên i sánh dài t dài nh t t trái sang
Môi tr ng th nghi m c ti n hành trên c u hình máy: P.IV 2.8; 512Mb Ram T p d
li u các v n b n ti ng Vi t c t i v t các trang báo n t www.vnexpress.net và
www.vnn.net T p d li u các v n b n ti ng Anh c t i v t các trang báowww.cnn.com và
www.bbc.com
4.2 K t qu th nghi m
i d li u và môi tr ng, gi i thu t th nghi m trên chúng tôi ã ti n hành so sánh t c
t c th c thi c a bài toán tách t t ng gi a hai ngôn ng Python và C# trên cùng các
p v n b n v i kích th c khác nhau K t qu so sánh c mô t trong b ng 2, hình 4 cho t p các v n b n ti ng Vi t và b ng 3, hình 5 cho t p các v n b n ti ng Anh
Th i gian (s) Dung l ng (Mb)
700kb 69,828 8,95 1Mb 152,53 14,53 2Mb 201,64 21,44 3Mb 286,44 31,45 5Mb 333,23 49,34
ng 2 K t qu so sánh phân tách t v i t p các v n b n ti ng Vi t
69.828
152.530
201.640
286.440
333.230
0.00
50.00
100.00
150.00
200.00
250.00
300.00
350.00
Size
Hình 4 So sánh th i gian x lý gi i thu t tách t trên t p v n b n ti ng Vi t
gi a công c Python và C#
Th i gian (s) Dung l ng (Mb)
Trang 910 1.523 0.956
ng 3 K t qu so sánh phân tách t v i t p các v n b n ti ng Anh
0.391 0.641
1.523 1.623
2.768
0.203 0.453
0.956 1.011
2.296
0.00
0.50
1.00
1.50
2.00
2.50
3.00
Size
C# (s) Python(s)
Hình 5 So sánh th i gian x lý gi i thu t tách t trên t p v n b n ti ng Anh
gi a công c Python và C#
t cách tr c quan t k t qu so sánh th nghi m trên chúng ta có th th y rõ hi u qu
m t th i gian x lý v n b n c a ngôn ng Python cao h n C#.NET r t nhi u, c bi t là cho
lý v n b n ti ng Vi t - m t ngôn ng v i nh ng khó kh n c thù riêng so v i các ngôn ng khác n gi n h n nh ti ng Anh, Pháp,… Kh i l ng d li u x lý càng l n, u vi t v m t
c th c thi c a Python càng th hi n rõ u này ã kh ng nh kh n ng ng d ng to l n
a công c mã ngu n m Python trong l nh v c x lý v n b n nói chung và cho x lý v n b n
ti ng Vi t nói riêng
5 K t lu n và h ng phát tri n
Python - m t ngôn ng mã ngu n m v i nh ng c m h tr cho x lý v n b n r t
nh m - ang ngày càng hoàn thi n và phát tri n Ngoài kh n ng xây d ng các ng d ng c
p, Python còn có u m n i b t trong vi c k t h p v i các h th ng khác v i vai trò nh m t ngôn ng n n và h tr cho h u h t các công c , ngôn ng thông d ng khác hi n nay H n th
a, v i m t cú pháp vô cùng n gi n, rõ ràng và hi u qu cao ã c ch ng minh, Python ngày càng th c s thu hút c s quan tâm r t l n c a các l p trình viên, nh ng ng i xây
ng và phát tri n ng d ng th c t
Bài báo này m i ch d ng m c tìm hi u Python nh m t công c x lý v n b n, các c
m c ng nh th m nh c a Python c ng m i ch c tìm hi u m c c b n Nh ng l i ích
mà Python mang l i s còn c ti p t c tìm hi u và phát huy v sau, c bi t là trong l nh v c
lý v n b n - m t trong nh ng l i th m nh nh t c a Python
Trong t ng l i, các nghiên c u và phát tri n c a chúng tôi s t p trung vào các nh ng:
Trang 10Xây d ng hoàn thi n b th vi n x lý v n b n b ng vi c s d ng th vi n chu n c a
Python c ng nh module x lý pyparsing.
Áp d ng v i các bài toán x lý v n b n c tr ng, xây d ng các module cho t ng bài toán c th , c bi t là cho các bài toán cho x lý v n b n ti ng Vi t
t h p th vi n x lý v n b n ti ng Vi t v i nhi u h th ng và nhi u bài toán khác
Tài li u tham kh o
[1] http://www.python.org
[2] David Mertz, “Text Processing in Python”, Addison Wesley, June 06, 2003
[3] http://pyparsing.sourceforge.net
[4] Wesley J Chun , Core Python Programming, Prentice Hall Publishion, 2002
[5] Harvey Deitel, Paul Deitel, Jonathan Liperi, Ben Wiedermann, Python How to Program,
Deitel and Deitel Publishion, 2002
[6] Hu nh Quy t Th ng, inh Th Ph ng Thu Ti p c n ph ng pháp h c không giám sát trong h c có giám sát v i bài toán phân l p v n b n ti ng Vi t và xu t công th c c i ti n tính liên quan gi a hai v n b n H i th o khoa h c qu c gia v Nghiên c u phát tri n và
ng d ng Công ngh thông tin và truy n thông ICT.RDA l n th II, Hà n i 24-25/9 K y u
i th o – Trang 251-261
[7] N.N Binh, V.N Ti p, N.T Phuong Trích ch n t khóa trong v n b n ti ng Vi t H i th o
khoa h c qu c gia v Nghiên c u phát tri n và ng d ng Công ngh thông tin và truy n thông ICT.RDA l n th II, Hà n i 24-25/9