什麼是SED

 SED這個程式是一個典型的command line的程式。在command line上打「sed 你要電腦做什麼的指令 檔名」即可。但是要記得,當我們在Windows系統下安裝模擬Mac系統的程式時,我們要把處理的檔案,放在「Cigwin/home/user」下,才能使用。如果還是不行,請到「控制台/系統/進階/編輯」下,建立一個新的路徑「C:/pdp++/bin/CYGWIN」,注意,路徑和路徑中間要用「;」做區隔唷!

 

沈老師為我們介紹了最基本的Regular Expression

/………/  對要做的東西,以夾註表示。

^        行開頭。

$        行結尾。

並請我們舉一反三地想想看「/^$/」代表什麼呢?各位看倌,您猜出來了嗎?您想想行開頭和行結尾中沒有任何東西、內容,所以,這個Regular Expression代表「空行」。

 

做做SED的練習題:

在做練習之前,請先首先,安裝好Cygwin這個程式。並下載syn_trees這個檔案,並把它存在你的Cigwin/home/user的檔案夾下。

 

Step 1:

1.      開啟Cygwin,並在上面的command下輸入「sed ‘/^$/p’ syn_trees(這裡的pprint的意思。)

2.      你會看到畫面上無數的檔案瘋狂的跑,這些檔案也就是…………….??(這些在跑的檔案,是syn_trees 這個檔案下,所有的空行嗎?)

3.      此時如果希望畫面停止,請按「Ctrl+c」即可。

 

Step 2:

1.      sed ‘/^$/d’ syn_trees|sort|uniq –c|sort –n –r>result

2.      接著到開啟檔案總管,到Cygwin/bin/result,用windowswordpad開啟這個檔案,即可見結果。  (這些結果是什麼東西呢?)

 

接著,我們再進ㄧ步多了解一些Regular Expression

.     任意字元

\     換行。Enter是控制字元(control sequence),但是若在我們的text中,就包含這些控制字元,我們就要把text中的這些字元放在\下,告訴電腦我放在這裡面的不是控制字元,而是我資料text的一部份。

*    重複。例如,aaab, aaaaaaab我們都可以標示為a*b,以表示a重複了好幾次。

^    字首的定址符號anchor

$    行尾的定址符號anchor

[]    代表可以放什麼東西。但是每一個程式的環境不同,而R.E.就會因環境不同而有些許不同。例如說在「..意義是什麼?  ?…系統下,是以以下的R.E.表示/^[:ulnwn:]*$/,但在另ㄧ個系統下,卻是以下的R.E.表示/^[0-9 a-b A…]/,我們可以清楚的看出不同的環境下表示法就不一樣。

 

Step 3: syn_trees這個程式裡所有的數字找出來,要打什麼指令呢?(結合awksed的工具。)

1.      首先我們先用wordpad打開syn_trees這個檔案。

2.      我們可以看出每個字,都是以____-_____-___的方式表現的。最後一格的地方是數字。也就是我們要的地方,所以現在我們要做的事,是把我們要找的東西用R.E.表示出來告訴電腦,我們要做的是什麼?

3.      輸入以下指令「awk ‘{for (i=1;i<=NF;i++){print $i}}’ syn_trees| sed ‘s/^.*[^-]-\([-0-9]*\)$/\1/’|less」。

\(….\) 把括號裡的變數存起來。

s/……./\1/,把裡面的東西replace存起來。

4.      畫面上就會出現在syn_trees中,我們要找的數字。

 

 

我們都知道Sà W1,W2,W3,…,Wn,一個句子是由一個字一個字組成的。 而認知語言學研究的就是人腦如何去處理語言,而類神經網路,就是以電腦建構一個類似類神經網路的架構,去教會電腦像人類一樣有學習的能力。而回歸到我們的主題,Autotagger 就是教電腦如何看到一個字W1,就知道它的tag是什麼?而看到W2,就知道它的tag是什麼?我們可以用Trigram來預測class tag

所以我們要見一個trigramàCT,來做autotagger的。而gram是以看的字為主要點。我們逐一介紹:

Zero gramàcorpus的觀念來的,所有的字都一樣。

Unigramà及一個字出現的頻率,100個字中,「我」出現10次,那麼其unigram就是10/100

Bigramà

TrigramàW1,W2,W3,W4,如果我們要看W2這個字時,我們會連它的前後鄰居一起看。

其實,中文比較不會受前後的字影響,所以一般中文的語音辨識,目前用bigram正確率就很高、很有效率了,但是英文容易受前後的字影響,所以一定要用trigram辨識度才夠。

今日習題:

@_@1. 怎麼去抓blw_100這個檔案裡的unigram呢?用awk怎麼抓?

@_@2. 怎麼抓trigram呢?

Awk ______ {for(i=1;i<=NF;i++){print$(i-1),$i,$(+1)}}|sort|uniq –c|

底線中要填什麼呢?然後用sed再做一件事。做什麼呢?