2013-10-23 41 views
-1

正在處理一個項目以從文本文檔中獲取所有單詞,並統計它們出現的次數,將它們字母化並打印出來。我已經完成了所有這些步驟,但我的輸出仍然存在一些問題。
-I需要刪除所以除了打印從列表中重複的話:對數組中的單詞進行排序

Hello-3 
Hello-2 
Hello-1 
Hi-2 
Hi-1 

像現在這樣將只打印:

Hello-3 
Hi-2 

我必須做-The第二件事是從文本中刪除所有數字和標點符號: 如果輸入的是:

This3 
test 
is 
a 
2nd! 
Test. 
Te 
st 

然後,我們將計數一次出現'this',一次出現'is',一次出現'a',一次出現'nd',出現兩次出現'test',一出現'te',一次出現'st'。

+0

您應該搜索「從列表(語言)中刪除重複的單詞」和「從文本(語言)中刪除標點符號」。 –

+1

語言?你到現在爲止有什麼? –

+0

好的,謝謝生病嘗試使用java搜索即時消息 – Mike

回答

1

使用哈希表來存儲單詞作爲鍵和計數作爲值

哈希表(稱爲關聯數組或其他語言的字典)僅允許唯一的密鑰

該perl的一個襯裏演示概念

perl -n -e '$a{$_}++ for(split(/\s+/)); END { use Data::Dumper; print Dumper(\%a);}' corpus.txt 

這裏是在Python這樣的事情

counter = dict() 
for line in open("corpus.txt").readlines(): 
    for word in line.split(" "): 
     v = counter.get(word, 0) 
     counter[word] = v + 1 

for word in sorted(counter.keys()): 
    print "%d \t %s" % (counter[word], word) 

你剛剛編輯了你的問題來說它是用java編寫的。在Java中,有HashMap的類型 可以使用,這裏是一個例子聲明

HashMap<String, Integer> lookup = new HashMap<Character, Integer>(); 

至於你的問題的第二部分,正則表達式可能的工作 - 雖然像你描述刪除一些字符其實是相當複雜的嚴格執行。

這樣

s/[^\w\s]//g 

甲正則表達式取代意指

  • S代表替代,S/1/2的裝置代替一個1對於2
  • [開始字符類
  • ^字符類內匹配相反類
  • \ w字母字母
  • \ S空白
  • ]字符類的末尾
  • 末尾的g是一個「全球性」的旗幟,多次應用於輸入

使匹配任何不是空格或字母和什麼也沒有更換,即刪除

要在Perl中使用一個以上襯墊

perl -n -e 's/[^\w\s]//g; $a{$_}++ for(split(/\s+/)); END { use Data::Dumper; print Dumper(\%a);}' corpus.txt 

蟒蛇,Java和其他LANGUAG es也有正則表達式系統