# HG changeset patch # User Igor Chubin # Date 1270226804 -10800 # Node ID 34d0332f238cb0059e00853b26d53df34faf8e6e # Parent 25bc92026f326d576fd169a6b959372cae521c05 Группировка похожих слов (пока что только для английского языка). Выполняется группировка похожих слов, и слова сортируются не отдельно, а группами, исходя из количества слов в группе. В пределах группы сортировка выполняется по количеству вхождений для каждого слова. diff -r 25bc92026f32 -r 34d0332f238c new-words.sh --- a/new-words.sh Wed Mar 31 22:38:03 2010 +0300 +++ b/new-words.sh Fri Apr 02 19:46:44 2010 +0300 @@ -92,6 +92,67 @@ rm $PERL_SCRIPT_TEMP_NAME } +group_words() +{ + if [ "$LANGUAGE" != "en" ] + then + cat + return + fi + PERL_SCRIPT_TEMP_NAME=`mktemp /tmp/perl-group-words-XXXXXXXX` + cat <<'PERL_SCRIPT' > $PERL_SCRIPT_TEMP_NAME +#!/usr/bin/perl + +sub normalize($) +{ + $_=lc(shift); + s///; + s/s$//; + s/ed$//; + s/ing$//; + return $_; +} + +sub compare($$) +{ + my $a=shift; + my $b=shift; + $a =~ s/^\s*//; + $b =~ s/^\s*//; + my ($a1, $a2)= split /\s+/,$a,2; + my ($b1, $b2)= split /\s+/,$b,2; + + my $cmp = $group_weight{normalize($a2)} <=> $group_weight{normalize($b2)}; + if ($cmp) { + return $cmp; + } + else { + if (normalize($a2) ne normalize($b2)) { + return normalize($a2) cmp normalize($b2); + } + else { + return $a1 <=> $b1; + } + } +} + +@lines=<>; +for $L (@lines) { + chomp($L); + $l=$L; + $l =~ s/^\s*//; + my ($a, $b)=split(/\s+/,$l,2); + $group_weight{normalize($b)}+=$a; +} +@lines2 = sort { compare($b,$a) } @lines; +for $l (@lines2) { + print "$l\n"; +} +PERL_SCRIPT + perl $PERL_SCRIPT_TEMP_NAME + rm $PERL_SCRIPT_TEMP_NAME +} + text_from_url() { lynx -dump "$1" | perl -p -e 's@http://[a-zA-Z&_.:/0-9%?=,#+()\[\]~-]*@@' @@ -197,16 +258,18 @@ cd $WORK_DIR if echo "$1" | grep -q http: then - text_from_url "$1" | tee $ORIGINAL_TEXT \ - | get_words ${TEMP1}-full | add_stat ${TEMP1}-full| tee "$TEMP1" > "$TEMP2" + text_from_url "$1" elif [ "$#" != 0 ] then - cat "$oldpwd/$1" | tee $ORIGINAL_TEXT \ - | get_words ${TEMP1}-full | add_stat ${TEMP1}-full | tee "$TEMP1" > "$TEMP2" + cat "$oldpwd/$1" else - tee $ORIGINAL_TEXT \ - | get_words ${TEMP1}-full | add_stat ${TEMP1}-full | tee "$TEMP1" > "$TEMP2" -fi + cat +fi \ + | tee $ORIGINAL_TEXT \ + | get_words ${TEMP1}-full \ + | group_words \ + | add_stat ${TEMP1}-full \ + | tee "$TEMP1" > "$TEMP2" add_marks "$TEMP2" if [ "$editor" = vim ]