2015-10-10 64 views
0

我有大約200MB的文本文件(rawtext.txt),並在文本文件(stopwords.txt)中包含停用詞列表。使用linux命令行刪除文本語料庫中的停用詞

I 
a 
about 
an 
are 
as 
at 
be 
by 
com 
for 

...

我想刪除文本語料庫的禁用詞。但是如何?什麼是最快最簡單的方法?喜歡像sed或tr這樣的命令行。不想使用Python或NLTK。

有人可以幫忙嗎?我使用的是Mac OSX(而非Linux)

回答

2

嘗試對GNU sed的:

sed -f <(sed 's/.*/s|\\b&\\b||g/' stopwords.txt) textwithstopwords.txt 

如果要編輯 「就地」 增加-i選項來外sed的。

更新:

與你的sed和bash試試這個:

sed -f <(sed 's/.*/s|\\\<&\\\>||g/' stopwords.txt) textwithstopwords.txt 
+0

我認爲'g'標誌可能出現在這裏錯誤的地方,因爲您正在替換整條線,並且在語料庫中停止詞可能有多處出現。 – potong

+0

@potong:謝謝。我已經更新了我的答案。 – Cyrus

+0

我檢查了這一行,它似乎不工作。停用詞根本不被替換。 – pbu

0

將您輸入的字每行格式,你可以用grep其過濾:

tr -s '[:blank:]' '\n' < rawtext.txt | fgrep -vwf stopwords.txt 

這樣你就不必建立一個任意大的正則表達式,如果你的停用詞表很大,這可能是一個問題。

+0

將大型文本輸入(GB數據)轉換爲每行一個字不可行。 – pbu

+0

爲什麼它不可行?你不需要以這種形式存儲它,它是由流水線上半部分的'tr'調用完成的。你試過了嗎? (如果不清楚:'rawtext.txt'是你的原始文件;'tr'將它改爲每行一行,並用'fgrep'進行過濾。) – alexis

+0

嘿。我運行這個命令,但停止單詞刪除不起作用。 :(我需要做的是用空格代替這樣的停用詞, – pbu