使用 grep 从停用词文件中过滤掉单词

发布于 2024-12-03 17:49:32 字数 418 浏览 6 评论 0原文

我想将 grep 与停用词文件一起使用来从另一个文件中过滤掉常见的英语单词。文件“somefile”每行包含一个单词。

cat somefile | grep -v -f stopwords

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

如何做到这一点?

示例

somefile 包含以下内容:

hello
o
orange

stopwords 包含以下内容:

o

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

I want to use grep together with a stopwords-file to filter out common english words from another file. The file "somefile" contains one word per line.

cat somefile | grep -v -f stopwords

The problem with this approach is: It checks whether a word in stopwords occurs in somefile, but I want the opposite, i.e. check if a word in somefile occurs in stopwords.

How to do this?

Example

somefile contains the following:

hello
o
orange

stopwords contains the following:

o

I want to filter out only the word "o" from somefile, not hello and orange.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

赠意 2024-12-10 17:49:32

我再想了一下,找到了一个解决方案......

使用 grep-w 开关来匹配整个单词:

grep -v -w -f stopwords somefile

I thought about it some more, and found a solution...

use the -w switch of grep to match whole words:

grep -v -w -f stopwords somefile
将军与妓 2024-12-10 17:49:32

假设您有停用词文件 /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

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

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

Assuming you have stopwords file /tmp/words:

in
the

you can create from it sed program by:

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

this way you will get /tmp/words.sed:

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

and then use it to censor any text file:

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

The -e is needed for sed to understand extended regexp needed for recognition.
Of course you can change [censored] to any other string or empty string if you wish.

This solution will handle many words in line as well as one word per line files.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文