igor@0: #!/bin/sh igor@0: igor@0: cat < /dev/null igor@0: igor@0: Поддержка нескольких языков: igor@0: igor@0: new-words -l lang URL igor@0: igor@0: Например, для немецких текстов: igor@0: igor@0: new-words -l de URL igor@0: igor@0: Или, предварительно создав соответствующую ссылку: igor@0: igor@0: de-words URL igor@0: igor@0: HELP igor@0: igor@0: WORK_DIR=~/.new-words/ igor@0: LANGUAGE=en igor@0: VOCABULARY=${LANGUAGE}.txt igor@0: TEMP1=`mktemp /tmp/news-words-XXXXXXXXXX` igor@0: TEMP2=`mktemp /tmp/news-words-XXXXXXXXXX` igor@0: editor=${EDITOR:-vim} igor@0: igor@0: my_name="`echo $0 | sed s/-words// | sed s@.*/@@`" igor@0: [ "${my_name}" = "new" ] || VOCABULARY="$my_name".txt igor@0: if [ "$1" = "-l" ] igor@0: then igor@0: LANGUAGE="$2" igor@0: VOCABULARY="$LANGUAGE".txt igor@0: shift 2 igor@0: fi igor@0: igor@0: get_words() igor@0: { igor@0: tr ' ' '\n' | sed 's/--/ /g' | tr A-Z a-z \ igor@0: | tr -d '*\r,.-:#@()+=—<>$;"?!|·[]^%&'"'" \ igor@0: | tr ' ' '\n' | grep_v_english_perl \ igor@0: | grep -x '[a-zA-Z0-9_-]*' \ igor@0: | sort | uniq -c | awk '{if ($2!="") print;}' | sort -rn igor@0: } igor@0: igor@0: grep_v_english() igor@0: { igor@0: [ -e "$VOCABULARY" ] || touch "$VOCABULARY" igor@0: eval $(cat $VOCABULARY | tr -d "'" | xargs -n10 echo | tr ' ' '|' | sed 's/^/egrep -xv "RRRRRRR|/' | sed 's/$/"/' | tr '\n' '|')cat igor@0: } igor@0: igor@0: grep_v_english_perl() igor@0: { igor@0: PERL_SCRIPT_TEMP_NAME=`mktemp /tmp/perl-grep-v-english-XXXXXXXX` igor@0: cat <<'PERL_SCRIPT' > $PERL_SCRIPT_TEMP_NAME igor@0: open(VOC, $ENV{VOCABULARY}) igor@0: or die "Can't open VOCABULARY"; igor@0: while (){ igor@0: chomp; igor@0: s/'//g; igor@0: $voc{$_}="1"; igor@0: } igor@0: while(<>) { igor@0: chomp; igor@0: if (not defined($voc{$_})) { print "$_\n"; } igor@0: } igor@0: PERL_SCRIPT igor@0: [ -e "$VOCABULARY" ] || touch "$VOCABULARY" igor@0: export VOCABULARY igor@0: perl $PERL_SCRIPT_TEMP_NAME igor@0: rm $PERL_SCRIPT_TEMP_NAME igor@0: } igor@0: igor@0: text_from_url() igor@0: { igor@0: lynx -dump "$1" | perl -p -e 's@http://[a-zA-Z&_.:/0-9%?=,#+()\[\]~-]*@@' igor@0: } igor@0: igor@0: mkdir -p $WORK_DIR igor@0: cd $WORK_DIR igor@0: if echo "$1" | grep -q http: igor@0: then igor@0: text_from_url "$1" | get_words | tee "$TEMP1" > "$TEMP2" igor@0: elif [ "$#" != 0 ] igor@0: then igor@0: cat "$1" | get_words | tee "$TEMP1" > "$TEMP2" igor@0: else igor@0: get_words | tee "$TEMP1" > "$TEMP2" igor@0: fi igor@0: igor@0: if [ "$editor" = vim ] igor@0: then igor@0: vim -c 'set keywordprg='"$LANGUAGE" -c 'set iskeyword=@,48-57,/,.,-,_,+,,,#,$,%,~,=' "$TEMP2" < /dev/tty > /dev/tty igor@0: else igor@0: echo 2 igor@0: $editor "$TEMP2" igor@0: fi igor@0: diff "$TEMP1" "$TEMP2" | awk '{print $3}' | sort -u >> "$VOCABULARY" igor@0: rm -f "$TEMP1" "$TEMP2"