# HG changeset patch # User Igor Chubin # Date 1268128675 -7200 # Node ID 9345cc05fdd13da7e9f6a6242c95481b7395ff63 # Parent 0d44e794175b9258b467df5b17da8bb2f42ad4b9 Поиск предложений в тексте по заданному слову. При нажатии K теперь показывается не только перевод слова, но и предложения, содержащее это слово и найденные в тексте. Для этого используется скрипт grep-sentences.pl , который ищет заданные слова в заданном файле. На время обработки (то есть, с момента запуска new-words и до выхода из редактора) дочерним процессам new-words доступна переменная ORIGINAL_TEXT указывающая на файл, содержащий обрабатываемый текст. В словарях (en, de и так далее) к выводу словаря добавляется вывод grep-sentences "$*" $ORIGINAL_TEXT, при условии, что этот файл существует. diff -r 0d44e794175b -r 9345cc05fdd1 README --- a/README Fri Mar 05 17:36:00 2010 +0200 +++ b/README Tue Mar 09 11:57:55 2010 +0200 @@ -9,7 +9,9 @@ README Файл, который мы сейчас читаем new-words.sh Собственно программа (написана на sh) new-words.pl Программа new-words, которую мы когда-нибудь напишем на Perl - +grep-sentences.pl Программа, которая ищет в файле предложения (текст, разделённый точками) по словам +learn-words.sh Программа для повторения слов, на которые были поставлены пометки +en.sh Пример скрипта-словаря, который вызывается по K из vim (нужно скопировать в en) == Что сделать == @@ -17,5 +19,4 @@ * Статистика по текущему тексту; уровни покрытия словами текста * Время добавления слова и прогресс добавления * Источник слова -* Поиск предложений, содержащих слова, в тексте * Автоматическое определение языка по тексту diff -r 0d44e794175b -r 9345cc05fdd1 en.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/en.sh Tue Mar 09 11:57:55 2010 +0200 @@ -0,0 +1,10 @@ +#!/bin/sh + +( + dict -h dictd.xdsl.by -d mueller24 "$@" + if [ -e "$ORIGINAL_TEXT" ] + then + echo . . . . . . . . . . . . . . . . . . . . . . . . . ; echo + grep-sentences "$*" "$ORIGINAL_TEXT" + fi +) | less -p "$*" diff -r 0d44e794175b -r 9345cc05fdd1 grep-sentences.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/grep-sentences.pl Tue Mar 09 11:57:55 2010 +0200 @@ -0,0 +1,20 @@ +#!/usr/bin/perl + + +$page=$ARGV[0]; +$regexp=$ARGV[1]; +#if (open(PAGE, "lynx -dump '$page'|")) { +if (open(PAGE, "$page")) { + local $/; + $text=; + $text =~ s@http://[a-zA-Z&_.:/0-9%?=,\#+()\[\]~-]*@@g; + $text =~ s@\n@@g; + @sentences=split /\./, $text; + for (@sentences) { + s/^\s*//; + s/\s*$//; + s/\[[0-9]+\]//g; + s/\s+/ /g; + print "$_.\n\n" if /\b$regexp\b/; + } +} diff -r 0d44e794175b -r 9345cc05fdd1 new-words.sh --- a/new-words.sh Fri Mar 05 17:36:00 2010 +0200 +++ b/new-words.sh Tue Mar 09 11:57:55 2010 +0200 @@ -18,6 +18,7 @@ WORK_DIR=~/.new-words/ TEMP1=`mktemp /tmp/news-words-XXXXXXXXXX` TEMP2=`mktemp /tmp/news-words-XXXXXXXXXX` +export ORIGINAL_TEXT=`mktemp /tmp/news-words-XXXXXXXXXX-orig` editor=${EDITOR:-vim} LANGUAGE=en @@ -195,12 +196,15 @@ cd $WORK_DIR if echo "$1" | grep -q http: then - text_from_url "$1" | get_words ${TEMP1}-full | add_stat ${TEMP1}-full| tee "$TEMP1" > "$TEMP2" + text_from_url "$1" | tee $ORIGINAL_TEXT \ + | get_words ${TEMP1}-full | add_stat ${TEMP1}-full| tee "$TEMP1" > "$TEMP2" elif [ "$#" != 0 ] then - cat "$1" | get_words ${TEMP1}-full | add_stat ${TEMP1}-full | tee "$TEMP1" > "$TEMP2" + cat "$1" | tee $ORIGINAL_TEXT \ + | get_words ${TEMP1}-full | add_stat ${TEMP1}-full | tee "$TEMP1" > "$TEMP2" else - get_words ${TEMP1}-full| add_stat ${TEMP1}-full | tee "$TEMP1" > "$TEMP2" + tee $ORIGINAL_TEXT \ + | get_words ${TEMP1}-full | add_stat ${TEMP1}-full | tee "$TEMP1" > "$TEMP2" fi add_marks "$TEMP2" @@ -214,4 +218,4 @@ remove_marks "$TEMP2" diff "$TEMP1" "$TEMP2" | awk '{print $3}' | sort -u >> "$VOCABULARY" -rm -f "$TEMP1" "$TEMP2" "${TEMP1}-full" +rm -f "$TEMP1" "$TEMP2" "${TEMP1}-full" "$ORIGINAL_TEXT"