第6章 實戰之聊天語料處理

2021-09-10 01:22:59 字數 3327 閱讀 2128

**學習:

extract_conv.py檔案:

函式1:

def make_split(line):

if re.match(r'.*([,…?!\.,!?])$', ''.join(line)):

return

return [', ']

首先,定義函式 make_split():其主要實現功能是匹配開頭為.*([,…?!\.,!?])$的字串,若有這些字串,將其用空格 表示。用空格 代替來連線line中的字串。

re.match(r『 』)中,r的含義是精確匹配,防止轉義(eg:\t表示空格,等)。

#注:.join()函式:

str = "-"

seq = ("a", "b", "c") # 字串序列

print(str.join( seq )) #輸出 a-b-c

. 匹配除換行符以外的任意字元

\w 匹配字母或數字或下劃線或漢字 等價於 '[^a-za-z0-9_]'。

\s 匹配任意的空白符

\d 匹配數字

\b 匹配單詞的開始或結束

^ 匹配字串的開始

$ 匹配字串的結束

\w能不能匹配漢字要視你的作業系統和你的應用環境而定

元字元(*),匹配0個或多個

元字元(?),匹配乙個或者0個

元字元(+), 匹配乙個或者多個

元字元(|), 表示"或",如a|b,其中a,b為正規表示式,表示匹配a或者b

元字元({})

正規表示式詳解

eg:input:你好?我是韓梅梅...

output:你好我是韓梅梅

—————————————————————————華麗分割線——————————————————————————

函式2:

def good_line(line):

if len(re.findall(r'[a-za-z0-9]', ''.join(line)))>2:

return false

return true

在輸入中找到是否含有a-z、a-z或0-9這樣的大小寫英文本母和0-9數字。長度大於兩個字元則返回flase,否則返回true。

eg:

import re

def good_line(line):

if len(re.findall(r'[a-za-z0-9]', ''.join(line)))>2:

return false

return true

#line = "今天天氣不錯,出去打球嗎?一起來吧."

line = "今天天氣不99錯,出5去打球嗎?一起3來吧."

new_line = good_line(line)

print(new_line)

print(len(re.findall(r'[a-za-z0-9]', ''.join(line))))

#輸出:false

4

—————————————————————————華麗分割線——————————————————————————

函式3:

def regular(sen):

sen = re.sub(r'\.', '…', sen) #將輸入中重複三次以上的.轉換為…。注轉義符\:因為.表示匹配除了換行符外的任何字元,加上\之後僅僅表示 .這個具體符號

sen = re.sub(r'…', '…', sen) #將輸入中重複兩次次以上的…轉換為…

sen = re.sub(r'[,]', ',', sen) #將輸入中重複一次以上的"英文,"轉換為「漢語的,」

sen = re.sub(r'[\.]', '。', sen) #將輸入**現一次以上的.轉換成。,個人理解如果.重複三次以上,則與sen = re.sub(r'\.', '…', sen)同義,否則出現一次或兩次轉換成。

sen = re.sub(r'[\?]', '?', sen) #將輸入**現一次以上的"英文?"轉換成「中文?」個人理解/沒有意義,因為?不需要轉移,/沒有意義。

sen = re.sub(r'[!]', '!', sen) #將輸入**現一次以上的"英文!"轉換成「中文!」

return sen

eg:

import re

def regular(sen):

sen = re.sub(r'\.', '…', sen) #將輸入中重複三次以上的.轉換為…。注轉義符\:因為.表示匹配除了換行符外的任何字元,加上\之後僅僅表示 .這個具體符號

sen = re.sub(r'…', '…', sen) #將輸入中重複兩次次以上的…轉換為…

sen = re.sub(r'[,]', ',', sen) #將輸入中重複一次以上的"英文,"轉換為「漢語的,」

sen = re.sub(r'[\.]', '。', sen) #將輸入**現一次以上的.轉換成。,個人理解如果.重複三次以上,則與sen = re.sub(r'\.', '…', sen)同義,否則出現一次或兩次轉換成。\可刪除因為在內,特殊符號無其特殊意義。詳情見

sen = re.sub(r'[\?]', '?', sen) #將輸入**現一次以上的"英文?"轉換成「中文?」個人理解/沒有意義,因為?不需要轉移,/沒有意義。自己認為可刪除,而且因為在內,特殊符號無其特殊意義。

sen = re.sub(r'[!]', '!', sen) #將輸入**現一次以上的"英文!"轉換成「中文!」

return sen

#line = "今天天氣不錯,出去打球嗎?一起來吧."

line = "今天天氣不錯.出去打球嗎?一起來吧..."

new_line = regular(line)

print(line)

print(new_line)

#輸出:今天天氣不錯.出去打球嗎?一起來吧...

#今天天氣不錯。出去打球嗎?一起來吧…

#兩句話的意義相同,因為在中,特殊符號失去其特有意義

sen = re.sub(r'[.]', '…', sen)

sen = re.sub(r'\.', '…', sen)

—————————————————————————華麗分割線——————————————————————————

以上句子的清洗過程就大體結束了。

第6章 andriod ARM 實戰番外篇 3

arm 實戰彙編記憶體操作 1 使用工具arm ads 記憶體操作就是跟暫存器之間的轉換,有暫存器和記憶體的轉換,也有記憶體和暫存器之間的轉換。記憶體和暫存器之間分為 單暫存器的操作 多暫存器的操作 單暫存器的操作分為 ldr rn,addn 按照字長讀取 例子 mov r1,0x12 ldrr0,...

第6章 豐富中斷處理程式

前面的中斷處理程式 過於簡單了,只有一句iretd,而且這個時鐘中斷處理程式也只能發生一次,因為沒有通知8259a本次中斷處理程式已結束。就算處理程式能反覆執行,我們也不能看到結果,所以還要在中斷處理程式中新增一點顯示資訊來使我們知道中斷程式在執行,下面就來修改 hw int 00 push 0 c...

第6章 利用陣列處理批量資料

例6.1對10個陣列元素依次賦值0,1,2,3,4,5,6,7,8,9,要求逆序輸出。include intmain 例6.2用陣列求數列問題。include intmain for i 2 i 20 i f i f i 2 f i 1 for i 0 i 20 i printf n return0...