2011-09-07 108 views
7

我想將grep和停用詞文件一起使用,以從另一個文件中過濾掉常見的英語單詞。文件「somefile」每行包含一個字。使用grep從停用詞文件中過濾掉單詞

cat somefile | grep -v -f stopwords 

這種方法的問題是:它檢查在停用詞一個詞是否在somefile發生,但我想如果somefile一個詞停用詞出現相反的情況,即檢查。

如何做到這一點?

somefile包含以下內容:

hello 
o 
orange 

禁用詞包含以下內容:

o 

我想從somefile過濾出個 「o」,而不是你好,橙子。

回答

14

我想過這個問題多一些,並找到了解決辦法...

使用-w開關grep匹配全字:

grep -v -w -f stopwords somefile 
+1

或'grep -v -w -f stopwords somefile'避免了'cat'命令 – Matthias

+1

我根據你的清理建議改變了答案@Matthias –

5

假設你有停用詞文件/ tmp /詞:

in 
the 

您可以通過它創建SED方案:

sed 's|^|s/\\<|; s|$|\\>/[CENSORED]/g;|' /tmp/words > /tmp/words.sed 

這樣你會得到/tmp/words.sed:

s/\<in\>/[CENSORED]/g; 
s/\<the\>/[CENSORED]/g; 

,然後用它來檢查任何文本文件:

sed -e -f /tmp/words.sed /input/file/to/filter.txt > /censored/output.txt 

-e是需要使用sed明白延長正則表達式需要用於識別。 當然,如果您願意,您可以將[censored]更改爲任何其他字符串或空字符串。

該解決方案將處理許多單詞以及每行文件中的一個單詞。