2012-04-06 95 views
-5

我的任務是打開並閱讀文件,從中刪除所有逗號,句點,空格和感嘆號。此外,我必須顯示每個單詞的單詞出現次數,方法是將該單詞作爲散列,並將出現次數作爲值,單詞是鍵。例如,在一個說「Perl程序,Perl程序」的文檔中。 Perl和程序的關鍵是,在這裏作爲值是所述nperl中的令牌是什麼?

詞-----計數

的Perl ------ 2

方案--- 2

教師已經發布了指導,但他在其中提到,「將線路劃分爲令牌並存儲陣列」。如果我知道什麼是令牌,我想我可以這樣做,那麼有人可以解釋一下什麼是令牌嗎?

+6

這不是一個更好的指導你的老師的問題嗎?我通過「標記」來設想他只是指你分割線的任何部分。 – TLP 2012-04-06 18:53:06

+1

http://en.wikipedia.org/wiki/Tokenization – cmbuckley 2012-04-06 18:53:18

+1

更好的維基百科鏈接:http://en.wikipedia.org/wiki/Lexical_analysis#Token – 2012-04-06 21:19:35

回答

4

根據Wikipedia

令牌是字符的字符串,根據規則 作爲符號分類(例如,標識符,NUMBER,COMMA)。

在Perl中沒有令牌的特殊含義。

0

在這種情況下,令牌很可能是由特殊字符分解的單詞/符號,這將是您應該忽略的所有字符。

這意味着在你的榜樣,你就必須將(按順序)的標記

Perl 
Program 
Perl 
Program 

但是,這不是像

"Perl!ProgramHello,Name.GoodBye>ASFDKLDJ" 

間隔了另一個例子中的標記是

Perl 
ProgramHello (even though this is two english words) 
Name 
GoodBye 
ASFDKLDJ 

你應該和你的教授一起澄清你需要拆分的標記。

+1

令牌不只是單詞。在你給出的例子中,使用典型的詞法分析來編寫一種編程語言的令牌是:'Perl''''ProgramHello'','''''''''GoodBye''''''' ASFDKLDJ''。 (除非引號是示例的一部分,在這種情況下,它可能是一個單引用的引用字符串。)不能將符號「分開」,因爲沒有必要使用分隔符(即你不能使用Perl的分割函數)。相反,您通常需要編寫一個有限狀態機來識別從一個令牌到下一個令牌的轉換。 – 2012-04-06 21:17:23

+0

'你不能使用Perl的分割函數'? '拆分/ \ B /'? – 2012-04-06 22:27:38

+0

我很困惑...我不確定這個程序是否嚴重。我只是試圖把這些單詞(除了逗號,句點,感嘆號,引號之外)放入一個數組中,並將其與自身進行比較以確定每個單詞在文檔中出現的次數。我嘗試拆分,拆分不工作。它只需要一個分隔符,我需要它像5,並刪除它們只留下單詞...所以,我卡住了。 – 2012-04-06 23:38:39