使用 grep 从停用词文件中过滤掉单词
我想将 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我再想了一下,找到了一个解决方案......
使用
grep
的-w
开关来匹配整个单词:I thought about it some more, and found a solution...
use the
-w
switch ofgrep
to match whole words:假设您有停用词文件 /tmp/words:
您可以通过以下方式从它创建 sed 程序:
这样您将获得 /tmp/words.sed:
然后使用它来审查任何文本文件:
-e
来理解识别所需的扩展正则表达式。当然,如果您愿意,您可以将
[censored]
更改为任何其他字符串或空字符串。该解决方案将处理一行中的多个单词以及每行一个单词的文件。
Assuming you have stopwords file /tmp/words:
you can create from it sed program by:
this way you will get /tmp/words.sed:
and then use it to censor any text file:
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.