new-words

changeset 5:9345cc05fdd1

Поиск предложений в тексте по заданному слову.

При нажатии K теперь показывается не только перевод слова,
но и предложения, содержащее это слово и найденные в тексте.
Для этого используется скрипт grep-sentences.pl ,
который ищет заданные слова в заданном файле.

На время обработки (то есть, с момента запуска new-words
и до выхода из редактора) дочерним процессам new-words
доступна переменная ORIGINAL_TEXT указывающая на файл,
содержащий обрабатываемый текст.

В словарях (en, de и так далее) к выводу словаря добавляется
вывод grep-sentences "$*" $ORIGINAL_TEXT, при условии,
что этот файл существует.
author Igor Chubin <igor@chub.in>
date Tue Mar 09 11:57:55 2010 +0200 (2010-03-09)
parents 0d44e794175b
children d1851ee29a1a
files README en.sh grep-sentences.pl new-words.sh
line diff
     1.1 --- a/README	Fri Mar 05 17:36:00 2010 +0200
     1.2 +++ b/README	Tue Mar 09 11:57:55 2010 +0200
     1.3 @@ -9,7 +9,9 @@
     1.4  README              Файл, который мы сейчас читаем
     1.5  new-words.sh        Собственно программа (написана на sh)
     1.6  new-words.pl        Программа new-words, которую мы когда-нибудь напишем на Perl
     1.7 -
     1.8 +grep-sentences.pl   Программа, которая ищет в файле предложения (текст, разделённый точками) по словам
     1.9 +learn-words.sh      Программа для повторения слов, на которые были поставлены пометки
    1.10 +en.sh               Пример скрипта-словаря, который вызывается по K из vim (нужно скопировать в en)
    1.11  
    1.12  == Что сделать ==
    1.13  
    1.14 @@ -17,5 +19,4 @@
    1.15  * Статистика по текущему тексту; уровни покрытия словами текста
    1.16  * Время добавления слова и прогресс добавления
    1.17  * Источник слова
    1.18 -* Поиск предложений, содержащих слова, в тексте
    1.19  * Автоматическое определение языка по тексту
     2.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2 +++ b/en.sh	Tue Mar 09 11:57:55 2010 +0200
     2.3 @@ -0,0 +1,10 @@
     2.4 +#!/bin/sh
     2.5 +
     2.6 +(
     2.7 +    dict -h dictd.xdsl.by -d mueller24 "$@"
     2.8 +    if [ -e "$ORIGINAL_TEXT" ]
     2.9 +    then
    2.10 +        echo . . . . . . . . . . . . . . . . . . . . . . . . . ; echo
    2.11 +        grep-sentences "$*" "$ORIGINAL_TEXT"
    2.12 +    fi
    2.13 +) | less -p "$*"
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/grep-sentences.pl	Tue Mar 09 11:57:55 2010 +0200
     3.3 @@ -0,0 +1,20 @@
     3.4 +#!/usr/bin/perl
     3.5 +
     3.6 +
     3.7 +$page=$ARGV[0];
     3.8 +$regexp=$ARGV[1];
     3.9 +#if (open(PAGE, "lynx -dump '$page'|")) {
    3.10 +if (open(PAGE, "$page")) {
    3.11 +    local $/;
    3.12 +    $text=<PAGE>;
    3.13 +    $text =~ s@http://[a-zA-Z&_.:/0-9%?=,\#+()\[\]~-]*@@g;
    3.14 +    $text =~ s@\n@@g;
    3.15 +    @sentences=split /\./, $text;
    3.16 +    for (@sentences) {
    3.17 +        s/^\s*//;
    3.18 +        s/\s*$//;
    3.19 +        s/\[[0-9]+\]//g;
    3.20 +        s/\s+/ /g;
    3.21 +        print "$_.\n\n" if /\b$regexp\b/;
    3.22 +    }
    3.23 +}
     4.1 --- a/new-words.sh	Fri Mar 05 17:36:00 2010 +0200
     4.2 +++ b/new-words.sh	Tue Mar 09 11:57:55 2010 +0200
     4.3 @@ -18,6 +18,7 @@
     4.4  WORK_DIR=~/.new-words/
     4.5  TEMP1=`mktemp /tmp/news-words-XXXXXXXXXX`
     4.6  TEMP2=`mktemp /tmp/news-words-XXXXXXXXXX`
     4.7 +export ORIGINAL_TEXT=`mktemp /tmp/news-words-XXXXXXXXXX-orig`
     4.8  editor=${EDITOR:-vim}
     4.9  
    4.10  LANGUAGE=en
    4.11 @@ -195,12 +196,15 @@
    4.12  cd $WORK_DIR
    4.13  if echo "$1" | grep -q http: 
    4.14  then 
    4.15 -    text_from_url "$1" | get_words ${TEMP1}-full | add_stat ${TEMP1}-full| tee "$TEMP1" > "$TEMP2"
    4.16 +    text_from_url "$1" | tee $ORIGINAL_TEXT \
    4.17 +    | get_words ${TEMP1}-full | add_stat ${TEMP1}-full| tee "$TEMP1" > "$TEMP2"
    4.18  elif [ "$#" != 0 ]
    4.19  then
    4.20 -    cat "$1" | get_words ${TEMP1}-full | add_stat ${TEMP1}-full | tee "$TEMP1" > "$TEMP2"
    4.21 +    cat "$1" | tee $ORIGINAL_TEXT \
    4.22 +    | get_words ${TEMP1}-full | add_stat ${TEMP1}-full | tee "$TEMP1" > "$TEMP2"
    4.23  else 
    4.24 -    get_words ${TEMP1}-full| add_stat ${TEMP1}-full | tee "$TEMP1" > "$TEMP2"
    4.25 +    tee $ORIGINAL_TEXT \
    4.26 +    | get_words ${TEMP1}-full | add_stat ${TEMP1}-full | tee "$TEMP1" > "$TEMP2"
    4.27  fi
    4.28  
    4.29  add_marks "$TEMP2"
    4.30 @@ -214,4 +218,4 @@
    4.31  remove_marks "$TEMP2"
    4.32  
    4.33  diff "$TEMP1" "$TEMP2" | awk '{print $3}' | sort -u >> "$VOCABULARY"
    4.34 -rm -f "$TEMP1" "$TEMP2" "${TEMP1}-full"
    4.35 +rm -f "$TEMP1" "$TEMP2" "${TEMP1}-full" "$ORIGINAL_TEXT"