2011-09-07 111 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]更改为任何其他字符串或空字符串。

该解决方案将处理许多单词以及每行文件中的一个单词。