日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
正群調(diào)整Python編寫速度

Spark 是一種用 Python 編寫的強(qiáng)大的、通用的解析器/編譯器框架。在某些方面,Spark 所提供的比 SimpleParse 或其它 Python 解析器提供的都要多,下面進(jìn)行學(xué)習(xí)研究。

專注于為中小企業(yè)提供網(wǎng)站設(shè)計(jì)制作、成都做網(wǎng)站服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)樅陽免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了1000多家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

然而,因?yàn)樗耆怯?Python 編寫的,所以速度也會(huì)比較慢。David 在本文中討論了 Spark 模塊,給出了一些代碼樣本,解釋了它的用途,并對其應(yīng)用領(lǐng)域提供了一些建議。本文中會(huì)介紹一些解析的基本概念,并對 Spark 模塊進(jìn)行了討論。解析框架是一個(gè)內(nèi)容豐富的主題,它值得我們多花時(shí)間去全面了解;

這兩篇文章為讀者和我自己都開了一個(gè)好頭。在日常的編程中,我經(jīng)常需要標(biāo)識(shí)存在于文本文檔中的部件和結(jié)構(gòu),這些文檔包括:日志文件、配置文件、定界的數(shù)據(jù)以及格式更自由的(但還是半結(jié)構(gòu)化的)報(bào)表格式。所有這些文檔都擁有它們自己的“小語言”,用于規(guī)定什么能夠出現(xiàn)在文檔內(nèi)。我編寫這些非正式解析任務(wù)的程序的方法總是有點(diǎn)象大雜燴。

其中包括定制狀態(tài)機(jī)、正則表達(dá)式以及上下文驅(qū)動(dòng)的字符串測試。這些程序中的模式大概總是這樣:“讀一些文本,弄清是否可以用它來做些什么,然后可能再多讀一些文本,一直嘗試下去。”

解析器將文檔中部件和結(jié)構(gòu)的描述提煉成簡明、清晰和說明性的規(guī)則,確定由什么組成文檔。大多數(shù)正式的解析器都使用擴(kuò)展巴科斯范式(Extended Backus-Naur Form,EBNF)上的變體來描述它們所描述的語言的“語法”。

基本上,EBNF 語法對您可能在文檔中找到的部件賦予名稱;另外,較大的部件通常由較小的部件組成。小部件在較大的部件中出現(xiàn)的頻率和順序由操作符指定。舉例來說,清單 1 是 EBNF 語法 typographify.def,我們在 SimpleParse 那篇文章中見到過這個(gè)語法(其它工具運(yùn)行的方式稍有不同):

 
 
 
  1. #-*- encoding: gb2312 -*-
  2. import quopri
  3. a = "only a test數(shù)據(jù)"
  4. b = quopri.encodestring(a) # 對字符串編碼
  5. print b
  6. print quopri.decodestring(b) # 對字符串解碼
  7. import StringIO
  8. c = StringIO.StringIO()
  9. d = StringIO.StringIO()
  10. e = StringIO.StringIO()
  11. c.write(a)
  12. c.seek(0)
  13. quopri.encode(c, d, 0)  # 編碼StringIO中的數(shù)據(jù), 第三個(gè)參數(shù)0表示不對空格和tab符號(hào)編碼,為1表示進(jìn)行編碼
  14. print d.getvalue()
  15. d.seek(0)
  16. quopri.decode(d, e)  # 解碼StringIO中的數(shù)據(jù)
  17. print e.getvalue()
  18. f1 = open("aaa.txt", "w")
  19. f1.write(a)
  20. f1.close()
  21. f1 = open("aaa.txt", "r")
  22. f2 = open("bbb.txt", "w")
  23. quopri.encode(f1, f2, 0) # 編碼aaa.txt中的數(shù)據(jù)到bbb.txt
  24. f1.close()
  25. f2.close()
  26. print open("bbb.txt", "r").read()

這里有一個(gè)有趣的地方。WordScanner 本身是一個(gè)完美的掃描程序類;但 Spark 掃描程序類本身可以通過繼承進(jìn)一步特化:子正則表達(dá)式模式在父正則表達(dá)式之前匹配,而如果需要,子方法/正則表達(dá)式可以覆蓋父方法/正則表達(dá)式。

所以,WordPlusScanner 將在 WordScanner 之前對特化進(jìn)行匹配(可能會(huì)因此先獲取一些字節(jié))。模式文檔字符串中允許使用任何正則表達(dá)式(舉例來說,.t_contraction() 方法包含模式中的一個(gè)“向后插入”)。查找記號(hào)的確有一點(diǎn)意思,但真正有意思的是如何向記號(hào)列表應(yīng)用語法。解析階段在記號(hào)列表的基礎(chǔ)上創(chuàng)建任意的樹結(jié)構(gòu)。它只是指定了表達(dá)式語法而已。

Spark 有好幾種創(chuàng)建 AST 的方法。“手工”的方法是特化 GenericParser 類。在這種情況下,具體子解析器會(huì)提供很多方法。方法名的形式為 p_foobar(self, args)。每個(gè)這樣的方法的文檔字符串都包含一個(gè)或多個(gè)模式到名稱的分配。只要語法表達(dá)式匹配,每種方法就可以包含任何要執(zhí)行的代碼。


分享文章:正群調(diào)整Python編寫速度
當(dāng)前URL:http://www.dlmjj.cn/article/djchihc.html