7

grep を stopwords-file と一緒に使用して、別のファイルから一般的な英語の単語を除外したいと考えています。ファイル「somefile」には、1 行に 1 単語が含まれています。

cat somefile | grep -v -f stopwords

このアプローチの問題点は次のとおりです。ストップワードの単語が somefile に含まれているかどうかをチェックしますが、反対のファイルが必要です。つまり、somefile の単語がストップワードに含まれているかどうかを確認します。

これを行う方法?

somefile には以下が含まれます。

hello
o
orange

ストップワードには次のものが含まれます。

o

こんにちはとオレンジではなく、somefile から「o」という単語だけを除外したいと考えています。

4

2 に答える 2

14

もう少し考えて、解決策を見つけました...

-wのスイッチを使用して、grep単語全体に一致させます。

grep -v -w -f stopwords somefile
于 2011-09-07T11:16:05.533 に答える
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

-esedが認識に必要な拡張正規表現を理解するために必要です。もちろん、必要[censored]に応じて、他の文字列または空の文字列に変更できます。

このソリューションは、1行のファイルごとに1つの単語だけでなく、1行の多くの単語も処理します。

于 2011-09-07T11:23:48.757 に答える