鄧學(xué)鳴
(民航珠海進(jìn)近管制中心,珠海 519000)
Python 是一種計算機(jī)程序設(shè)計語言,也是一種動態(tài)的、面向?qū)ο蟮哪_本語言。Python 在設(shè)計上堅持清晰劃一的風(fēng)格,這使得Python 成為一門易讀、易維護(hù),并且被大量用戶所歡迎的、用途廣泛的語言。同時,Python 也是一種代表簡單主義思想的語言,而且極其容易上手,其底層是用C 語言寫的,很多標(biāo)準(zhǔn)庫和第三方庫也都是用C 寫的,運(yùn)行速度非常快。
正則表達(dá)式是計算機(jī)科學(xué)的一個概念,是對字符串(包括普通字符,例如a 到z 之間的字母)和特殊字符(稱為“元字符”)操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個“規(guī)則字符串”,這個“規(guī)則字符串”用來表達(dá)對字符串的一種過濾邏輯。正則表達(dá)式是一種文本模式,模式描述在搜索文本時要匹配的一個或多個字符串[1]。正則表達(dá)式的特點是靈活性、邏輯性和功能性非常強(qiáng),可以迅速地用極簡單的方式達(dá)到字符串的復(fù)雜控制。給定一個正則表達(dá)式和另一個字符串,可以判斷給定的字符串是否符合正則表達(dá)式的過濾邏輯(稱作“匹配”),也可以通過正則表達(dá)式,從字符串中獲取我們想要的特定部分。
管制指令是飛行器在空中飛行的指向標(biāo),有效的管制指令確保了旅客、機(jī)組人員的生命安全,管制指揮不當(dāng)可能會引發(fā)嚴(yán)重的飛行事故,其重要性不言而喻。盡管目前空管系統(tǒng)使用的內(nèi)話設(shè)備有側(cè)音功能,可以將管制員發(fā)出的話音反饋到管制員的耳機(jī),但是在飛機(jī)流量過大的情況下,管制員發(fā)錯指令或者遺忘已發(fā)出的指令的情況仍然時有發(fā)生。
本系統(tǒng)的主要目的是記錄和分析管制員發(fā)出的每一條指令,讓管制員可以清晰地掌握自己所發(fā)出的各條指令,從而提高管制指令的準(zhǔn)確性,減少“錯忘漏”的現(xiàn)象。對于安全管理的工作而言,本系統(tǒng)可以以文本的形式記錄和顯示管制員發(fā)出的所有指令,有利于預(yù)防各種飛行安全事故的發(fā)生,對于飛行安全事故的事后追查來說,也是一個有力的工具。
如圖1所示,管制員在管制席位上發(fā)出的指令經(jīng)過語音采集模塊之后會形成wav 音頻文件,通過網(wǎng)絡(luò)傳輸,wav 音頻文件會發(fā)送到計算機(jī),計算機(jī)通過人工智能程序?qū)av 音頻文件轉(zhuǎn)化為文本文件,再將文本文件發(fā)送給本系統(tǒng),本系統(tǒng)會對文本文件中的管制指令進(jìn)行識別和分析,進(jìn)而提取出關(guān)鍵信息,并將關(guān)鍵信息顯示到終端上。
圖1 系統(tǒng)總架構(gòu)圖
列表是Python 中最常用的數(shù)據(jù)類型,它由一系列按特定順序排列的元素組成,我們可以將任何類型的數(shù)據(jù)加入列表中,列表中的元素之間可以沒有任何關(guān)系[2]。本系統(tǒng)在識別和分析管制指令的過程中需要用到兩個列表,列表一用于存儲目前正在指揮中的航班的航班號,列表二用于存儲從管制指令中解析得到的各種關(guān)鍵信息。
管制指令雖然種類繁多,但其用語格式較為固定,如航班號+指令動作+狀態(tài)[3],而且一條準(zhǔn)確、有效的指令必定會包含一個航班號,所以本系統(tǒng)依據(jù)指令中是否存在一個有效的航班號來判斷該指令是否有效。但有時管制員會僅用航班號的后四位數(shù)字來呼叫飛機(jī),例如“南方5873”航班,管制員發(fā)指令時可能會直接呼叫“5873”,省略“南方”二字,這種情況下也應(yīng)視為存在有效的航班號。本系統(tǒng)將“南方5873”這樣的航班號定義為完整航班號,將“5873”這樣省略“南方”二字的航班號定義為簡略航班號。完整的航班號識別流程如圖2所示。
利用正則表達(dá)式對指令中的航班號進(jìn)行匹配,具體的代碼如下:
match=re.search(r'('+st r(cn_hbh)+')d{3,4}',command)
代碼中的“re.search”表示使用正則表達(dá)式的“search”方法,“cn_hbh”用于匹配航班號前面的兩個中文字符;“d{3,4}”用于匹配航班號后面的數(shù)字,對于一般的航班號而言,其后面的數(shù)字一般為三位或四位,運(yùn)用正則表達(dá)式可以很方便地寫出對應(yīng)的匹配規(guī)則;“command”為管制指令。
圖2 管制指令解析流程
利用正則表達(dá)式對指令中的QNH 和QNE 信息進(jìn)行匹配,具體的代碼如下:
match1 = re.search(r'標(biāo) 壓|標(biāo) 準(zhǔn) 氣 壓|標(biāo) 準(zhǔn) 大 氣 壓',command)
match2= re.search(r '(修正海壓是?)(dd)(10d{2})|(修正海壓是?)(dd)(9d{2})',
command)
match3=re .search(r'(修正海壓是?)(10d{2})|(修正海壓是?)(9d{2})',command)
在識別和解析管制指令中的QNH 信息時,遇到的問題主要是管制指令用語的不統(tǒng)一和不規(guī)范。例如,對于管制指令中的“標(biāo)準(zhǔn)大氣壓”來說,管制員發(fā)指令時一般會說“標(biāo)壓”或者“標(biāo)準(zhǔn)氣壓”,少數(shù)情況會說“標(biāo)準(zhǔn)大氣壓”。而對于管制指令用語不規(guī)范的情況,此處可以舉出如下一個例子:
“南方5873下到修正海壓271009。”
在此指令中,管制員把高度下降的指令“下到27”和QNH信息“修正海壓1009”混合在一起,這對指令的識別帶來了一定的困難。由于修正海壓的數(shù)值范圍一般為900至1099,本系統(tǒng)對此類指令的識別方法是把“修正海壓”四個字與符合修正海壓范圍的后四個數(shù)字“1009”提取出來作為QNH 信息,中間的“27”兩個數(shù)字留待下一步提取高度信息時使用。
利用正則表達(dá)式對指令中的高度信息進(jìn)行匹配,具體的代碼如下:
match1=re.search(r'上高?度?d 千?d?',command)
match2=re.search(r'上到高?度?d 千?d?',command)
match3=re.search(r'上升至高?度?d 千?d?',command)
match4=re.search(r'下高?度?d 千?d?',command)
match5=re.search(r'下到高?度?d 千?d?',command)
match6=re.search(r'下降至高?度?d 千?d?',command)
在識別和解析管制指令中的高度信息時,若匹配到關(guān)鍵字“上”,說明該指令是高度上升指令,若匹配到關(guān)鍵字“下”,說明該指令是高度下降指令。由于管制指令用語的不統(tǒng)一,管制員可能會使用“上”、“上到”、“上升至”等不同的關(guān)鍵字,在匹配程序中需要對各種關(guān)鍵字按照一定的順序進(jìn)行匹配,才能準(zhǔn)確提取出指令中的高度信息。
另外,管制指令中的某些問候語,如“上午好”、“下午好”等,會跟關(guān)鍵字“上”和“下”發(fā)生沖突,在提取管制指令中的高度信息之前,要先對管制指令進(jìn)行預(yù)處理,將問候語等無用信息刪除,避免在提取信息時發(fā)生錯誤。
利用正則表達(dá)式對指令中的速度信息進(jìn)行匹配,具體的代碼如下:
match1=re.search(r'調(diào)速到?ddd',command)
match2=re.search(r'增速到?ddd',command)
match3=re.search(r'減速度?到?ddd',command)
match4=re.search(r'(保持)?速度ddd',command)
管制指令中,速度信息的表達(dá)有多種方式,除了以上“調(diào)速”、“增速”、“減速”、“保持速度”之外,還會出現(xiàn)“大速度”、“大表速”等,提取速度信息時需要分析和統(tǒng)計指令中出現(xiàn)的各種關(guān)鍵字,制定出相應(yīng)的匹配規(guī)則,才能得到準(zhǔn)確的速度信息。
利用正則表達(dá)式對指令中的航向信息進(jìn)行匹配,具體的代碼如下:
match1=re.search(r'飛?航向飛?([0-3]d[05])',command)
match2=re.search(r'飛?([0-3]d[05])',command)
match3=re.search(r'(保持)?航向先?飛?到?是?([0-3]d[05])',command)
航向的范圍是0度到360度,而且管制指令中的航向信息一般只會精確到5度,在提取航向信息時,先匹配關(guān)鍵字“航向”,然后匹配百位數(shù)字為0至3,個位數(shù)字為0或5的三位數(shù)字,就能提取出管制指令中的航向信息。
本系統(tǒng)利用了Python 編程語言和正則表達(dá)式,制定了多條匹配規(guī)則,對管制指令中的各種關(guān)鍵信息進(jìn)行提取。針對管制指令用語不統(tǒng)一、不規(guī)范的難題,利用正則表達(dá)式靈活多變的優(yōu)點,對各條匹配規(guī)則進(jìn)行優(yōu)化和細(xì)化,提高了識別各種關(guān)鍵信息的成功率。本系統(tǒng)可以將管制員發(fā)出的管制指令進(jìn)行記錄與實時反饋,通過本系統(tǒng),管制員可以更好地掌握已發(fā)出的指令,降低“錯忘漏”的發(fā)生概率,能有效避免因管制指揮不當(dāng)引發(fā)的航空不安全事件的發(fā)生。