使用grep过滤掉一个停用词文件中的单词

时间:2011-09-07 10:59:49

标签: linux grep stop-words

我想使用grep和一个stopwords文件来过滤掉另一个文件中常见的英文单词。文件“somefile”每行包含一个单词。

cat somefile | grep -v -f stopwords

这种方法的问题是:它检查某些文件中是否出现了停用词中的单词,但我想要相反,即检查某些文件中的单词是否出现在停用词中。

怎么做?

示例

somefile包含以下内容:

hello
o
orange

停用词包含以下内容:

o

我想从somefile中过滤掉单词“o”,而不是hello和orange。

2 个答案:

答案 0 :(得分:14)

我想了一些,找到了解决方案......

使用-w的{​​{1}}开关来匹配整个单词:

grep

答案 1 :(得分:5)

假设您有停用词文件/ tmp / words:

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

sed需要-e来理解识别所需的扩展正则表达式。 当然,如果愿意,您可以将[censored]更改为任何其他字符串或空字符串。

此解决方案将处理许多单词和每行文件一个单词。