Tải bản đầy đủ (.pdf) (10 trang)

NGHIÊN CỨU, ĐÁNH GIÁ VÀ THÍ NGHIỆM KHẢ NĂNG ỨNG DỤNG CÔNG CỤ MÃ NGUỒN MỞ PYTHON TRONG XỬ LÝ VĂN BẢN

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (612.41 KB, 10 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

<b>NGHIÊN C U, ÁNH GIÁ VÀ TH NGHI M KH N NG NGNG CÔNG C MÃ NGU N M PYTHON TRONG</b>

<b> LÝ V N B N</b>

<b>Hoàng Anh Vi t, inh Th Phng Thu, Hu nh Quy t Th ng</b>

<i>Khoa CNTT, Trng HBK Hà N i</i>

<i>Email: , , </i>

<i><b>Tóm t t: Python là m t ngơn ng mã ngu n m</b>ang phát tri n và thu hút c squan 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 thi 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</i>

<i>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ácbi 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 nnh 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ántách t tng v i các t p v n b n ti ng Vi t và ti ng Anh có dung lng khácnhau. Các so sánh c th c hi n trên hai công c Python và ngơn ng C#.NET .</i>

<i><b> khố: ngơn ng Python, mã ngu n m , x lý v n b n, tách t v n b n.</b></i>

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 <i> d ng v n b n (text), nh d ng này</i>

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.

<b>2. TH VI N CHU N C A PYTHON TRONG X LÝ XÂU CHU I</b>

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

<b>2.1 Công c ngu n m Python và các module c b n x lý xâu chu i</b>

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

<i>ch c Python Software Foudation[1]. Python là m t ngơn ng l p trình </i> 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.

<b>Hình 1. Các module h tr cho x lý xâu, chu i trong Python</b>

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:

<i>Module string: ch c các ph</i> ng th c th c hi n các thao tác xâu c b n.

<i>Module Re: ch a các ph</i> ng th c h tr x lý bi u th c chính quy.

<i>Module Unicodedata: ch a các ph</i> ng th c th c hi n các thao tác v i d li u d ng unicode.

<i>Module Codecs: ch a các ph</i> ng th c mã hóa và gi i mã d li u.

<i>Module StringIO: ch a các ph</i> ng th c th c hi n thao tác x lý vào ra.

<i>Module Stringprep: ch a các ph</i> ng th c th c hi n ti n x lý xâu.

<b>2.2 Các phng th c c b n x lý ký t và xâu chu i trong Python</b>

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

<i>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>

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,....

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="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 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.... 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 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 <i>“[“ và “]” bao hàm m t l p các bi u th c chính quy. M t bi u th c</i>

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 ,

<i>bi u th c chính quy ”[abc]” kh p v i ba kí t a, b ho c c.</i>

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

<i>chính quy “[a-d]” là t</i> ng <i>ng v i bi u th c chính quy “[abcd]”.</i>

Khi c t v trí <b>u tiên c a m t l p, siêu ký t “^” s th c hi n vi c “ph</b> nh”

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

<i><b>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 </b></i> 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

<i><b>“[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</b></i>

<i>xâu “7y-3z”.</i>

<b>2.3.3. S h p nhóm</b>

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 ó:

<i>expression1 = \r"(\w+ \w+), n tho i: (\d{3}-\d{4}), E-mail: (\w+@\w+\.\w{3})"</i>

<i><b>Siêu ký t “(“ và “)” mơ t m t nhóm. Bi u th c chính quy expression1 mơ t 3 nhóm.</b></i>

Nhóm <i>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à</i>

t t khác.

<i>Nhóm th 2 so kh p v i 3 ch s , theo sau là ký t “-“, theo sau b i 4 ch s .</i>

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 .

<i>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</i>

xâu theo nh d ng: tên, s n tho i và a ch email c a m t ng <i>i, ví d : "Hồng Anh Vi t,</i>

<i>n tho i: 868-2595, e-mail:", và s d ng câu l nh:re.match( expression1, teststring) trong module Re.</i>

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.

<i>Các siêu ký t “+” và “*” <b>c g i là các toán t tham lam.</b></i> 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.

<b>3. Phát tri n th vi n x lý v n b n trên Python:</b>

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

<i>ng, phát tri n và th nghi m trên module pyparsing c a Paul McGuire [3] – m t module ã</i>

c ánh giá là x lý r t t t cho v n này.

<i>Module pyparsing có các thành ph n x lý d li u </i> u vào và ra trong nh ng môi tr ng và ngôn ng khác nhau. <i>ng th i trong module pyparsing chúng ta có th d dàng tr c ti p</i>

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

<i>pyparsing ta có th</i> á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

<i>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</i> c mô t trong hình 2.

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

<b>Hình 2. Bi u phân l p môdule x lý v n b n c a th vi n pyparsing</b>

o <i>parsetFile(sourceFile): ây là m t hàm r t ti n d ng, th c hi n </i> 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

<i>n parseString().</i>

o <i>scanString(sourceString): hàm này dùng </i> tìm ki m và trích rút các n so

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

o <i>setDebug(): hàm thi t l p ch</i> g l i thông tin khi ang so kh p d li u o <i>leaveWhiteSpace(): b qua d u tr ng khi ti n hành so kh p.</i>

o <i>setWhiteSpace(chars): xác nh danh sách các ký hi u dùng nh các ký hi u</i>

tr ng trong quá trình so kh p.

<i>Literal: l p ch a các ph</i> ng th c ph c v cho thi t l p xâu dùng so kh p.

<i>Word: l p ch a các ph</i> ng th c ph c v thi t l p m t xâu ch a t p h p các ký t

<i>Dict: l p ch a các phng th c gi ng Group, nh ng th c hi n thi t l p cho m t t</i>

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 .

<i>ParsetResults: l p dùng ch a và qu n lý danh sách các ký hi u </i> c t o b i vi c phân tích bi u th c <i>u vào. ParseResults có th s d ng ki u list ho c dictionary.</i>

<i>ParsException:</i> 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.

<i> 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</i>

<i>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ú</i>

<i>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</i>

trong x lý các bi u th c chính quy (hình 3).

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

<i>t s hàm chính trong Word Analysis nh :</i>

<i>def Stringstart(Position): vi c so kh p </i> 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.

<i>def Match(string): Hàm dùng ki m tra xem xâu </i> u vào có trong t n t v ng hay khơng.

<i>def ListLine(string): Hàm dùng </i> 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.

<i>def ListSentence(string): Hàm dùng phân tích v n b n </i> 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

<i>c nh ngh a trong l p Word.</i>

<i>def Find(string): Hàm dùng </i> 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.

<i>def count(string,char): Hàm dùng </i> xác nh s l n xu t hi n c a m t xâu con trong xâu u vào.

<i>def Listcorrect(string): Hàm dùng </i> 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.

<i>Listfail: </i> 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 <i>ng th c xây d ng trong th vi n Word Analysis này ã </i> 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.

<b>4. Th nghi m và ánh giá trên bài toán tách t v n b n</b>

Bài toán tách t t <i>ng cho v n b n (Word Segmentation) là m t trong nh ng bài tốn</i>

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

<i>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ânp 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</i>

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>i v i ngôn ng Python, chúng tôi s d ng th vi n Word Analysis ã xây d ng </i>

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.

<b>4.1. Môi trng, d li u th nghi m</b>

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 tố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

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

trá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 tố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à

<b>4.2. K t qu th nghi m</b>

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

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

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.

<b>5. K t lu n và hng phát tri n</b>

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

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

Xâ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

<i>Python c ng nh module x lý pyparsing.</i>

Á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.

<b>Tài li u tham kh o</b>

[1]

[2] David Mertz, “Text Processing in Python”, Addison Wesley, June 06, 2003 [3]

[4] <i>Wesley J. Chun , Core Python Programming</i>, Prentice Hall Publishion, 2002

<i><b>[5] Harvey Deitel, Paul Deitel, Jonathan Liperi, Ben Wiedermann, Python How to Program,</b></i>

Deitel and Deitel Publishion, 2002

[6] Hu nh Quy t Th ng, inh Th Ph <i>ng Thu. Ti p c n phng pháp h c không giám sáttrong h c có giám sát v i bài tốn phân l p v n b n ti ng Vi t và xu t cơng th c c i ti ntí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à</i>

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.

<i>[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</i>

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.

</div>

×