new-words
changeset 0:b21fb3f1fcb7
new-words.sh добавлен в репозиторий
Пока здесь есть только маленький README-файл
и скрипт new-words.sh, который делает минимум работы.
Подробности: http://xgu.ru/wiki/new-words
Пока здесь есть только маленький README-файл
и скрипт new-words.sh, который делает минимум работы.
Подробности: http://xgu.ru/wiki/new-words
author | igor@book.xt.vpn |
---|---|
date | Sun Feb 21 19:34:18 2010 +0200 (2010-02-21) |
parents | |
children | 4c9076f87241 |
files | README new-words.pl new-words.sh |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/README Sun Feb 21 19:34:18 2010 +0200 1.3 @@ -0,0 +1,25 @@ 1.4 + 1.5 +Программа, которая помогает нам находить неизвестные 1.6 +слова в новом тексте 1.7 + 1.8 +Подробности: http://xgu.ru/wiki/new-words 1.9 + 1.10 +== Файлы == 1.11 + 1.12 +README Файл, который мы сейчас читаем 1.13 +new-words.sh Собственно программа (написана на sh) 1.14 +new-words.pl Программа new-words, которую мы когда-нибудь напишем на Perl 1.15 + 1.16 + 1.17 +== Что сделать == 1.18 + 1.19 +* Переписать на Perl (пока на Perl) 1.20 +* Поддержка разных алфавитов (пока поддерживается только латинский) 1.21 +* Пометки к словам 1.22 +* Статистика по текущему тексту; уровни покрытия словами текста 1.23 +* Время добавления слова и прогресс добавления 1.24 +* Источник слова 1.25 +* Поиск предложений, содержащих слова, в тексте 1.26 +* Автоматическое определение языка по тексту 1.27 + 1.28 +
2.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 2.2 +++ b/new-words.pl Sun Feb 21 19:34:18 2010 +0200 2.3 @@ -0,0 +1,6 @@ 2.4 +#!/usr/bin/perl 2.5 +# 2.6 + 2.7 +print "Experimental. Run new-words.sh instead\n"; 2.8 +exit(0); 2.9 +
3.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 3.2 +++ b/new-words.sh Sun Feb 21 19:34:18 2010 +0200 3.3 @@ -0,0 +1,97 @@ 3.4 +#!/bin/sh 3.5 + 3.6 +cat <<HELP > /dev/null 3.7 + 3.8 +Поддержка нескольких языков: 3.9 + 3.10 + new-words -l lang URL 3.11 + 3.12 +Например, для немецких текстов: 3.13 + 3.14 + new-words -l de URL 3.15 + 3.16 +Или, предварительно создав соответствующую ссылку: 3.17 + 3.18 + de-words URL 3.19 + 3.20 +HELP 3.21 + 3.22 +WORK_DIR=~/.new-words/ 3.23 +LANGUAGE=en 3.24 +VOCABULARY=${LANGUAGE}.txt 3.25 +TEMP1=`mktemp /tmp/news-words-XXXXXXXXXX` 3.26 +TEMP2=`mktemp /tmp/news-words-XXXXXXXXXX` 3.27 +editor=${EDITOR:-vim} 3.28 + 3.29 +my_name="`echo $0 | sed s/-words// | sed s@.*/@@`" 3.30 +[ "${my_name}" = "new" ] || VOCABULARY="$my_name".txt 3.31 +if [ "$1" = "-l" ] 3.32 +then 3.33 + LANGUAGE="$2" 3.34 + VOCABULARY="$LANGUAGE".txt 3.35 + shift 2 3.36 +fi 3.37 + 3.38 +get_words() 3.39 +{ 3.40 +tr ' ' '\n' | sed 's/--/ /g' | tr A-Z a-z \ 3.41 +| tr -d '*\r,.-:#@()+=—<>$;"?!|·[]^%&'"'" \ 3.42 +| tr ' ' '\n' | grep_v_english_perl \ 3.43 +| grep -x '[a-zA-Z0-9_-]*' \ 3.44 +| sort | uniq -c | awk '{if ($2!="") print;}' | sort -rn 3.45 +} 3.46 + 3.47 +grep_v_english() 3.48 +{ 3.49 +[ -e "$VOCABULARY" ] || touch "$VOCABULARY" 3.50 +eval $(cat $VOCABULARY | tr -d "'" | xargs -n10 echo | tr ' ' '|' | sed 's/^/egrep -xv "RRRRRRR|/' | sed 's/$/"/' | tr '\n' '|')cat 3.51 +} 3.52 + 3.53 +grep_v_english_perl() 3.54 +{ 3.55 + PERL_SCRIPT_TEMP_NAME=`mktemp /tmp/perl-grep-v-english-XXXXXXXX` 3.56 + cat <<'PERL_SCRIPT' > $PERL_SCRIPT_TEMP_NAME 3.57 +open(VOC, $ENV{VOCABULARY}) 3.58 + or die "Can't open VOCABULARY"; 3.59 +while (<VOC>){ 3.60 + chomp; 3.61 + s/'//g; 3.62 + $voc{$_}="1"; 3.63 +} 3.64 +while(<>) { 3.65 + chomp; 3.66 + if (not defined($voc{$_})) { print "$_\n"; } 3.67 +} 3.68 +PERL_SCRIPT 3.69 + [ -e "$VOCABULARY" ] || touch "$VOCABULARY" 3.70 + export VOCABULARY 3.71 + perl $PERL_SCRIPT_TEMP_NAME 3.72 + rm $PERL_SCRIPT_TEMP_NAME 3.73 +} 3.74 + 3.75 +text_from_url() 3.76 +{ 3.77 +lynx -dump "$1" | perl -p -e 's@http://[a-zA-Z&_.:/0-9%?=,#+()\[\]~-]*@@' 3.78 +} 3.79 + 3.80 +mkdir -p $WORK_DIR 3.81 +cd $WORK_DIR 3.82 +if echo "$1" | grep -q http: 3.83 +then 3.84 + text_from_url "$1" | get_words | tee "$TEMP1" > "$TEMP2" 3.85 +elif [ "$#" != 0 ] 3.86 +then 3.87 + cat "$1" | get_words | tee "$TEMP1" > "$TEMP2" 3.88 +else 3.89 + get_words | tee "$TEMP1" > "$TEMP2" 3.90 +fi 3.91 + 3.92 +if [ "$editor" = vim ] 3.93 +then 3.94 + vim -c 'set keywordprg='"$LANGUAGE" -c 'set iskeyword=@,48-57,/,.,-,_,+,,,#,$,%,~,=' "$TEMP2" < /dev/tty > /dev/tty 3.95 +else 3.96 + echo 2 3.97 + $editor "$TEMP2" 3.98 +fi 3.99 +diff "$TEMP1" "$TEMP2" | awk '{print $3}' | sort -u >> "$VOCABULARY" 3.100 +rm -f "$TEMP1" "$TEMP2"