Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
słownik w linii poleceń
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

Goto page 1, 2  Next  
Reply to topic    Gentoo Forums Forum Index Polskie forum (Polish)
View previous topic :: View next topic  
Author Message
misterLu
Guru
Guru


Joined: 14 Sep 2003
Posts: 430
Location: Poland

PostPosted: Sun Nov 14, 2004 9:44 pm    Post subject: słownik w linii poleceń Reply with quote

Witam, napisałem prosty skrypt służący do tłumaczenia słów pomiędzy językami:
polski <- -> niemiecki
polski <- -> angielski
polski <- -> francuski.

Podstawową zaletą jest to, że nie trzeba odpalać przeglądarki, aby sprawdzić szukane słowo.
Można to uczynić prosto z terminata prosto wpisując: ./tlumacz.pl slowo, a po paru sekundach dostaniemy to samo, co dostalibyśmy na slowniki.onet.pl.
Zasady użycia:
./tlumacz slowo (tłumaczy z polskiego na angielski, lub odwrotnie (sam rozpoznaje język))
./tlumacz -n slowo (tłumaczy z polskiego na niemiecki, lub odwrotnie (sam rozpoznaje język))
./tlumacz -f slowo (tłumaczy z polskiego na francuski, lub odwrotnie (sam rozpoznaje język))

Zasada działania skryptu jest bardzo prosta: udaje przeglądarke i łączy się z witryną http://portalwiedzy.onet.pl/tlumacz.html, i pobiera tłumaczenie słowa tak, jakbyśmy wchodzili na strone. Zaletą jest to, że nie musimy oglądać tych nędznych i wszechobecnych reklam. Oczywiście skrypt nie jest doskonały, a to dlatego, że każde udoskonalenie, to dodatkowe regexpy,a te jak wiemy są jednymi z najdłużej działających funkcji perla.

Skrypt jest bardzo wygodny, zamieszczam go pod spodem wraz ze wskazówkami 'przeduruchumieniowymi':
1)zakładam, ze macie Perl'a,
2)musicie dociągnąć 2 moduły (zakładam, że reszte macie)
Code:

emerge -vD dev-perl/HTML-Tree
emerge -vD libwww-perl

a teraz sam skrypt: UWAGA! tu jest wersja akualna http://mion.elka.pw.edu.pl/~ldylag/?id=-1
Code:

#!/usr/bin/perl -w
use Getopt::Std;
%options=();
getopts("naf",\%options);
#zmienne niezbedne do odpytania serwera
%GET=();
if($options{n}){
        $GET{'tr'}="nie-auto";
}elsif($options{f}){
        $GET{'tr'}="fra-auto";
}elsif($options{a}){
        $GET{'tr'}="ang-auto";
}else{
        $GET{'tr'}="ang-auto";
}
#adres slownika
$baseUrl="http://portalwiedzy.onet.pl/tlumacz.html?";
$GET{'qs'}=$ARGV[0] or die("uzycie: $0 slowo_do_tlumaczenia");
$GET{'ch'}=1;
$GET{'x'}=0;
$GET{'y'}=0;
foreach $key (keys %GET){
        $baseUrl.=$key."=".$GET{$key}."&";
}
$baseUrl=~s/\&$//;
use LWP::UserAgent;
use HTTP::Request;

my $userAgent = LWP::UserAgent->new();
$userAgent->agent("Opera/7.54 (X11; Linux i686; U)");
my $request = HTTP::Request->new(GET => $baseUrl);
$request->referer("http://portalwiedzy.onet.pl/");
$response=$userAgent->request($request);
if($response->is_error()){
        printf("%s\n",$response->status_line);
        exit;
}
my $content=$response->content();
$content=~s/<BR>/[BR]/ig;
#wywalmy tagi HTMLowe
use HTML::TreeBuilder;
my $tree=HTML::TreeBuilder->new;
$tree->parse($content);
$tree->eof;

$word=$GET{'qs'};
$content=$tree->as_text();
if($content =~ /Nie znaleziono/){
        $retList="--";
}else{
        $content=~s/.*Wyniki tłumaczenia:.*?(\d)/$1/g;
        $content=~s/Przetłumaczono.*$//g;
        $content=~s/\[BR\]/\n/g;
        @versions=split(/(\w+ )?$word( \w+)?/i, $content);

        $retList=$versions[0];
}
printf("%s\n", $retList);
exit;



kopiujecie , dodajecie prawa wykonywalne
Code:
chmod +x tlumacz.pl

i używacie (jak w przykładzie)
Oryginalna i mam nadzieje uaktualniana wersja skryptu znajduje się na mojej stronie www:http://mion.elka.pw.edu.pl/~ldylag/?id=-1

Przykład działania:
Code:

ludwik@lu asu $ ./tlumacz.pl nauczyciel
1 teacher
2 instructor
3 schoolmaster
4 school-teacher
5 master
6 professor
7 tutor
8 preceptor


Last edited by misterLu on Sun Apr 03, 2005 7:54 pm; edited 5 times in total
Back to top
View user's profile Send private message
_troll_
Bodhisattva
Bodhisattva


Joined: 04 Feb 2004
Posts: 1971
Location: Warszawa, Poland

PostPosted: Sun Nov 14, 2004 9:54 pm    Post subject: Reply with quote

niezmiernie uzyteczny bajerek! thx misterLu!

Pozdrawiam,
Przemek
_________________
Życie jest jak pudełko czekoladek....
Nigdy nie wiesz na co trafisz" by mother of Forrest Gump
Back to top
View user's profile Send private message
Strus
l33t
l33t


Joined: 19 Apr 2004
Posts: 780
Location: Poland - Bochnia

PostPosted: Sun Nov 14, 2004 10:00 pm    Post subject: Reply with quote

Świetny pomysł MisterLu, tylko wyskakuje mi taki błąd:

Code:
Can't locate LWP/UserAgent.pm in @INC (@INC contains: /etc/perl /usr/lib/perl5/site_perl/5.8.4/i686-linux /usr/lib/perl5/site_perl/5.8.4 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.4/i686-linux /usr/lib/perl5/vendor_perl/5.8.4 /usr/lib/perl5/vendor_perl /usr/lib/perl5/5.8.4/i686-linux /usr/lib/perl5/5.8.4 /usr/local/lib/site_perl .) at ./tlumacz.pl line 26.
BEGIN failed--compilation aborted at ./tlumacz.pl line 26.


linia 26 to u mnie use LWP::UserAgent;
Back to top
View user's profile Send private message
misterLu
Guru
Guru


Joined: 14 Sep 2003
Posts: 430
Location: Poland

PostPosted: Sun Nov 14, 2004 10:02 pm    Post subject: Reply with quote

Code:
emerge -vD libwww-perl
powinno załatwić sprawe
Back to top
View user's profile Send private message
Strus
l33t
l33t


Joined: 19 Apr 2004
Posts: 780
Location: Poland - Bochnia

PostPosted: Sun Nov 14, 2004 10:12 pm    Post subject: Reply with quote

misterLu wrote:
Code:
emerge -vD libwww-perl
powinno załatwić sprawe


Załatwiło :D Program działa, jest extra

Pozdrawiam i życzę więcej takich pomysłów
Back to top
View user's profile Send private message
misterLu
Guru
Guru


Joined: 14 Sep 2003
Posts: 430
Location: Poland

PostPosted: Sun Nov 14, 2004 10:18 pm    Post subject: Reply with quote

kolejna wersja przewiduje tłumaczenie pliku ze słowami i output do pliku w postaci:
we:
Code:

mama
tata
sistra

a wy:
Code:

mama: mother, mamma,momma
taka:papa, dad,daddy
siostra:sister

brak mi tylko czasu :(
Back to top
View user's profile Send private message
Strus
l33t
l33t


Joined: 19 Apr 2004
Posts: 780
Location: Poland - Bochnia

PostPosted: Mon Nov 15, 2004 12:40 am    Post subject: Reply with quote

Można by go skopiować do /usr/bin/ albo ustawić zmienną $PATH do katalogu z nim. Tak jest owiele szybciej i nieważne w jakim katalogu się znajdujemy wystarczy wpisać tlumacz :D
Back to top
View user's profile Send private message
Rav70
l33t
l33t


Joined: 11 Feb 2004
Posts: 607
Location: Poland

PostPosted: Mon Nov 15, 2004 7:53 am    Post subject: Reply with quote

Wynalazek zajefajny tylko cos mi sie krzaczy:
Code:

$ tlumacz recall
1 przywołanie2 odwołanie3 odwołanie pracownika4 rewokacja5 wycofanie6 cofanie7 pamięć8 odwołać9 przypominać sobie10 pamiętać kogoś coś11 wspominać12 anulować coś13 rewokować14 wskrzesić15 wycofać beyond

z www:
Code:

recall (Ectaco-Poland)
v,
1 przywołanie
2 odwołanie
3 odwołanie pracownika
4 rewokacja
5 wycofanie
6 cofanie
7 pamięć
8 odwołać
9 przypominać sobie
10 pamiętać kogoś coś
11 wspominać
12 anulować coś
13 rewokować
14 wskrzesić
15 wycofać
beyond recall (Ectaco-Poland)
adv,
1 odwołanie
2 nie do odwołania

wersja ^C^V z Twojego www
Pozdr. R.
_________________
Q: Why is Microsoft's Product Support a failure?
A: Because Microsoft needs a Support Group instead.
Back to top
View user's profile Send private message
misterLu
Guru
Guru


Joined: 14 Sep 2003
Posts: 430
Location: Poland

PostPosted: Mon Nov 15, 2004 8:30 am    Post subject: Reply with quote

dzięki za info! jak pisałem skrypt nie jest doskonały, ale będę go w miare możliwości poprawiał! Skrypt zwraca TYLKO PIERWSZE TŁUMACZENIE. Poprawiona wersja jest tu: http://dylag.pl/?id=showskrypt&what=tlumacz.pl, czyli zwraca 15 tłumaczeń słowa recall (bez słowa beyond na końcu). Kolejne tłumaczenia odnoszą się do związku frazeologicznego, lub jakić kolokwializmów (i prawde powiedziawszy nie bardzo wiem, co z nimi zrobić). Czekam na sugestie i dalsze bugi.
Back to top
View user's profile Send private message
Woocash
Guru
Guru


Joined: 01 May 2004
Posts: 525
Location: Poland, Praszka

PostPosted: Mon Nov 15, 2004 8:33 pm    Post subject: Reply with quote

Mam następny bład :
Code:
./tlumacz.pl -n rok
160 000 haseł)
Ectaco-Poland Ltd.



Copyright 1996 - 2004 Onet.pl SA - zobacz wszystkie serwisy ť Polityka dotycząca cookiedo góry

_________________
"When a man lies he murders some part of the world
These are pale deaths which men miscall their lives
All this I cannot bear to witness any longer
Cannot the kingdom of salvation take me home..."
Cliff Burton
Back to top
View user's profile Send private message
Strus
l33t
l33t


Joined: 19 Apr 2004
Posts: 780
Location: Poland - Bochnia

PostPosted: Mon Nov 15, 2004 8:43 pm    Post subject: Reply with quote

Woocash wrote:
Mam następny bład :
Code:
./tlumacz.pl -n rok
160 000 haseł)
Ectaco-Poland Ltd.



Copyright 1996 - 2004 Onet.pl SA - zobacz wszystkie serwisy ť Polityka dotycząca cookiedo góry


Miałem to samo, wpisz słowo które tłumaczysz tu http://portalwiedzy.onet.pl/tlumacz.html a zobaczysz dlaczego taki komunikat dostajesz. Jak jest tylko jedno tłumaczenie, bez numerków 1,2,3 itp to tak się właśnie kaszani
Back to top
View user's profile Send private message
Gogiel
Guru
Guru


Joined: 11 Nov 2004
Posts: 347

PostPosted: Mon Nov 15, 2004 9:20 pm    Post subject: Reply with quote

A przewidujesz w programie obsluge proxy?
Back to top
View user's profile Send private message
Strus
l33t
l33t


Joined: 19 Apr 2004
Posts: 780
Location: Poland - Bochnia

PostPosted: Mon Nov 15, 2004 9:24 pm    Post subject: Reply with quote

Gogiel wrote:
A przewidujesz w programie obsluge proxy?


Możesz sobie ustawić na firewallu forwardowanie wszystkiego co wychodzi na port 80 na IP i port tego proxy i już :wink:
Back to top
View user's profile Send private message
Rav70
l33t
l33t


Joined: 11 Feb 2004
Posts: 607
Location: Poland

PostPosted: Mon Nov 15, 2004 10:11 pm    Post subject: Reply with quote

hm czy tylko mi nie działa?
Code:

$ tlumacz recall











Portal wiedzy - Tłumacz



















Czat Poczta Onet.pl

onet.pl ortal wiedzy łumacz

z www:
Code:

Wyniki tłumaczenia: reload

ang-pol

reload (Ectaco-Poland)
v,
1 przeładować
2 zarepetować

Pozdr. R.
ps szkoda że moja znajomość perla obsysa, pomógłbym zamiast tylko marudzić :P
_________________
Q: Why is Microsoft's Product Support a failure?
A: Because Microsoft needs a Support Group instead.
Back to top
View user's profile Send private message
Strus
l33t
l33t


Joined: 19 Apr 2004
Posts: 780
Location: Poland - Bochnia

PostPosted: Mon Nov 15, 2004 11:11 pm    Post subject: Reply with quote

u mnie to wygląda tak:

Code:
[505] 21:38:20
[strus@strusmachine strus]$ tlumacz recall
1 przywołanie
2 odwołanie
3 odwołanie pracownika
4 rewokacja
5 wycofanie
6 cofanie
7 pamięć
8 odwołać
9 przypominać sobie
10 pamiętać kogoś coś
11 wspominać
12 anulować coś
13 rewokować
14 wskrzesić
15 wycofać beyond


i
Code:
[506] 00:06:54
[strus@strusmachine strus]$ tlumacz reload
1 przeładować
2 zarepetować


Więc z programem jest wszystko ok.
Back to top
View user's profile Send private message
Rav70
l33t
l33t


Joined: 11 Feb 2004
Posts: 607
Location: Poland

PostPosted: Tue Nov 16, 2004 11:41 am    Post subject: Reply with quote

Strus wrote:
u mnie to wygląda tak:

Code:
[505] 21:38:20
[strus@strusmachine strus]$ tlumacz recall
(...)
14 wskrzesić
15 wycofać beyond


Więc z programem jest wszystko ok.

widzę że używasz starej wersji ;) ale na desktopie mi działa czyli tamten serw coś pewnie ma skopane. ATSD widzę że pewnie tylko mi nie wstawia znaku końca linii:
Code:

$ tlumacz recall
1 przywołanie2 odwołanie3 odwołanie pracownika4 rewokacja5 wycofanie6 cofanie7 pamięć8 odwołać9 przypominać sobie10 pamiętać kogoś coś11 wspominać12 anulować coś13 rewokować14 wskrzesić15 wycofać

co może być powodem?
Pozdr. R.
_________________
Q: Why is Microsoft's Product Support a failure?
A: Because Microsoft needs a Support Group instead.
Back to top
View user's profile Send private message
Gogiel
Guru
Guru


Joined: 11 Nov 2004
Posts: 347

PostPosted: Tue Nov 16, 2004 8:02 pm    Post subject: Reply with quote

Strus wrote:
Gogiel wrote:
A przewidujesz w programie obsluge proxy?


Możesz sobie ustawić na firewallu forwardowanie wszystkiego co wychodzi na port 80 na IP i port tego proxy i już :wink:

Jakie modul iptables sa potrzebne??
Back to top
View user's profile Send private message
Strus
l33t
l33t


Joined: 19 Apr 2004
Posts: 780
Location: Poland - Bochnia

PostPosted: Wed Nov 17, 2004 1:43 am    Post subject: Reply with quote

Gogiel wrote:
Jakie modul iptables sa potrzebne??


W sumie nie wiem, nigdy tego nie robiłem, ale coś z NATem np.
Code:
CONFIG_IP_NF_NAT_LOCAL=y
CONFIG_IP_NF_NAT=y


I wymyśleć regułkę dla iptablesa żeby przekierował wszystko co wychodzi z Twojego kompa z portu 80 na port 8080 tego serwera proxy.
Back to top
View user's profile Send private message
fallow
Bodhisattva
Bodhisattva


Joined: 08 Jan 2004
Posts: 2206
Location: Poland

PostPosted: Wed Nov 17, 2004 10:07 am    Post subject: Reply with quote

przydalby sie ebuild ;)
_________________
"Time is a companion that goes with us on a journey. It reminds us to cherish each moment, because it will never come again. What we leave behind is not as important as how we have lived" J-L. Picard ;)
Back to top
View user's profile Send private message
misterLu
Guru
Guru


Joined: 14 Sep 2003
Posts: 430
Location: Poland

PostPosted: Wed Nov 17, 2004 11:54 am    Post subject: Reply with quote

fallow wrote:
przydalby sie ebuild ;)

troll już nad tym pracuje! ebuild będzie zawierał słownik oraz program do drukowania o którym mowa w temacie http://forums.gentoo.org/viewtopic.php?t=158294&.
A ja w miare możliwości będę starał się udoskonalać oba programy.
Sęk w tym, że któregoś pięknego dnia skrypt do tlumaczenia przestanie działać. Wystarczy by onet zmienił strukturę strony, lub sposób podawania wyników. Dlatego nie polecam wpisywania dziwnych rzeczy w linijce
Code:
$request->referer("http://portalwiedzy.onet.pl/");
, bo analizatorzy logów na serwerze mogą się bardzo zdziwić, jak zobaczą tam jakieś dziwne śmiecie, admini się wkurzą, że ludzie omijają ich banerry i reklamy i skończy się tak, jak z bramkami do SMSów.

A tak przy okazji,
Quote:
ATSD widzę że pewnie tylko mi nie wstawia znaku końca linii:

dwa pytania:
1)mój skrypt, czy edytor na forum nie wstawia nowej linii ?
2)co to znaczy ATSD ?

Quote:
Jak jest tylko jedno tłumaczenie, bez numerków 1,2,3 itp to tak się właśnie kaszani

już to naprawiłem, zamieniłem linijkę
Code:
$content=~s/.*Wyniki tłumaczenia:.*?(\d)/$1/g;
na
Code:
$content=~s/.*Wyniki tłumaczenia:.*?\w,.*?\[BR\]/\[BR\]/g;

Czekam na następne błędy.
Back to top
View user's profile Send private message
ai
Apprentice
Apprentice


Joined: 21 Mar 2004
Posts: 227
Location: Poland, Krk

PostPosted: Wed Nov 17, 2004 4:05 pm    Post subject: Reply with quote

[quote="Rav70"]hm czy tylko mi nie działa?
Code:

$ tlumacz recall











Portal wiedzy - Tłumacz



















Czat Poczta Onet.pl

onet.pl ortal wiedzy łumacz

z www:
Code:

Wyniki tłumaczenia: reload

ang-pol

reload (Ectaco-Poland)
v,
1 przeładować
2 zarepetować


co moze byc powodem tego bledu bo tez tak mam.... ??

poz ai.
_________________
just nothing ;)
Back to top
View user's profile Send private message
Rav70
l33t
l33t


Joined: 11 Feb 2004
Posts: 607
Location: Poland

PostPosted: Wed Nov 17, 2004 4:34 pm    Post subject: Reply with quote

misterLu wrote:

A tak przy okazji,
Quote:
ATSD widzę że pewnie tylko mi nie wstawia znaku końca linii:

dwa pytania:
1)mój skrypt, czy edytor na forum nie wstawia nowej linii ?
2)co to znaczy ATSD ?

ad. 1) Twój skrypt
ad. 2) A Tak Swoją Drogą :)
Pozdr. Rav
_________________
Q: Why is Microsoft's Product Support a failure?
A: Because Microsoft needs a Support Group instead.
Back to top
View user's profile Send private message
misterLu
Guru
Guru


Joined: 14 Sep 2003
Posts: 430
Location: Poland

PostPosted: Wed Nov 17, 2004 5:53 pm    Post subject: Reply with quote

jeœli wyniki drukowane macie w jednej linii to znaczy, ze
a)jakimœ dziwnym trafem zawartoœć strony jest pozbawiona znaczników [BR]
b)Wasza powłoka Ÿle interpretuje znak nowej linii '\n'.

Opcja b wydaje mi się bardziej, prawdopodobna, choć i tak poziom prawdopodobieństwa jest bliski zeru. Możecie to sprawdzić edytujšc skrypt i w 59 linii zmiecie:
Code:
$content=~s/\[BR\]/\n/g;
na:
Code:
$content=~s/\[BR\]/-/g;
(czyli '\n'=>'-')wtedy zamiast nowš liniš, słowa powinny zostać oddzielone myœlnikiem. Jeœli tak będzie, znaczy że opcja b może być (ale nie musi) prawdziwa, a jeœli dalej będzie to samo to znaczy, że opcja a jest prawdziwa.

Co do błędnych wyników ai i Rav70, to trudno mi cokolwiek powiedzieć, bo mogły to by być żŸle ustawione zmienne domyœlne w Perlu waszym, ale po pierwsze wszyscy mamy tš samš konfigurację (domyœlnš) a po drugie nie korzystam z tych zmiennych w skrypcie.
Back to top
View user's profile Send private message
Strus
l33t
l33t


Joined: 19 Apr 2004
Posts: 780
Location: Poland - Bochnia

PostPosted: Wed Nov 17, 2004 6:36 pm    Post subject: Reply with quote

misterLu jak piszesz z Internet Explorera to ustaw mu kodowanie ISO-8859-2 bo się rozczytać nie da jak kodujesz w tym windowsowym g..... :)
Back to top
View user's profile Send private message
axquan
Tux's lil' helper
Tux's lil' helper


Joined: 05 Nov 2003
Posts: 85

PostPosted: Wed Nov 17, 2004 9:55 pm    Post subject: Reply with quote

Mi też nie działa, a już szczególnie po zmianie z
Code:

$content=~s/.*Wyniki tłumaczenia:.*?(\d)/$1/g;


na

Code:

$content=~s/.*Wyniki tłumaczenia:.*?\w,.*?\[BR\]/\[BR\]/g;


Wtedy przynajmniej cokolwiek wyświetlało, w jednej linijce, ale zawsze. Teraz dostaje tylko:
Code:

axquan@erwin ~/bin $ ./tlumacz recall



axquan@erwin ~/bin $


mam bash-3.0-r7 i perl-5.8.5-r1 jeśli to oczywiście w czymś pomoże.
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Polskie forum (Polish) All times are GMT
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum