Использование grep для фильтрации слов из файла стоп-слов - PullRequest
7 голосов
/ 07 сентября 2011

Я хочу использовать grep вместе с файлом стоп-слов для фильтрации общих английских слов из другого файла. Файл "somefile" содержит одно слово в строке.

cat somefile | grep -v -f stopwords

Проблема этого подхода заключается в следующем: он проверяет, встречается ли слово в стоп-словах в некотором файле, но я хочу обратного, то есть проверять, встречается ли слово в некотором файле в стоп-словах.

Как это сделать?

Пример

somefile содержит следующее:

hello
o
orange

Стоп-слова содержат следующее:

o

Я хочу отфильтровать только слово "o" из некоторого файла, а не привет и оранжевый.

Ответы [ 2 ]

14 голосов
/ 07 сентября 2011

Я подумал еще об этом и нашел решение ...

используйте переключатель -w grep, чтобы сопоставить целые слова:

grep -v -w -f stopwords somefile
5 голосов
/ 07 сентября 2011

Если у вас есть файл стоп-слов / 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 необходим для sed, чтобы понять расширенное регулярное выражение, необходимое для распознавания.Конечно, вы можете изменить [censored] на любую другую строку или пустую строку, если хотите.

Это решение будет обрабатывать много слов в строке, а также одно слово в строке файлов.

...