| View previous topic :: View next topic |
| Author |
Message |
misterLu Guru


Joined: 14 Sep 2003 Posts: 430 Location: Poland
|
Posted: Sun Nov 14, 2004 9:44 pm Post subject: słownik w linii poleceń |
|
|
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 |
|
 |
_troll_ Bodhisattva


Joined: 04 Feb 2004 Posts: 1971 Location: Warszawa, Poland
|
Posted: Sun Nov 14, 2004 9:54 pm Post subject: |
|
|
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 |
|
 |
Strus l33t

Joined: 19 Apr 2004 Posts: 780 Location: Poland - Bochnia
|
Posted: Sun Nov 14, 2004 10:00 pm Post subject: |
|
|
Ś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 |
|
 |
misterLu Guru


Joined: 14 Sep 2003 Posts: 430 Location: Poland
|
Posted: Sun Nov 14, 2004 10:02 pm Post subject: |
|
|
| Code: | | emerge -vD libwww-perl | powinno załatwić sprawe |
|
| Back to top |
|
 |
Strus l33t

Joined: 19 Apr 2004 Posts: 780 Location: Poland - Bochnia
|
Posted: Sun Nov 14, 2004 10:12 pm Post subject: |
|
|
| misterLu wrote: | | Code: | | emerge -vD libwww-perl | powinno załatwić sprawe |
Załatwiło Program działa, jest extra
Pozdrawiam i życzę więcej takich pomysłów |
|
| Back to top |
|
 |
misterLu Guru


Joined: 14 Sep 2003 Posts: 430 Location: Poland
|
Posted: Sun Nov 14, 2004 10:18 pm Post subject: |
|
|
kolejna wersja przewiduje tłumaczenie pliku ze słowami i output do pliku w postaci:
we:
a wy:
| Code: |
mama: mother, mamma,momma
taka:papa, dad,daddy
siostra:sister
|
brak mi tylko czasu  |
|
| Back to top |
|
 |
Strus l33t

Joined: 19 Apr 2004 Posts: 780 Location: Poland - Bochnia
|
Posted: Mon Nov 15, 2004 12:40 am Post subject: |
|
|
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  |
|
| Back to top |
|
 |
Rav70 l33t


Joined: 11 Feb 2004 Posts: 607 Location: Poland
|
Posted: Mon Nov 15, 2004 7:53 am Post subject: |
|
|
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 |
|
 |
misterLu Guru


Joined: 14 Sep 2003 Posts: 430 Location: Poland
|
Posted: Mon Nov 15, 2004 8:30 am Post subject: |
|
|
| 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 |
|
 |
Woocash Guru


Joined: 01 May 2004 Posts: 525 Location: Poland, Praszka
|
Posted: Mon Nov 15, 2004 8:33 pm Post subject: |
|
|
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 |
|
 |
Strus l33t

Joined: 19 Apr 2004 Posts: 780 Location: Poland - Bochnia
|
Posted: Mon Nov 15, 2004 8:43 pm Post subject: |
|
|
| 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 |
|
 |
Gogiel Guru


Joined: 11 Nov 2004 Posts: 347
|
Posted: Mon Nov 15, 2004 9:20 pm Post subject: |
|
|
| A przewidujesz w programie obsluge proxy? |
|
| Back to top |
|
 |
Strus l33t

Joined: 19 Apr 2004 Posts: 780 Location: Poland - Bochnia
|
Posted: Mon Nov 15, 2004 9:24 pm Post subject: |
|
|
| 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ż  |
|
| Back to top |
|
 |
Rav70 l33t


Joined: 11 Feb 2004 Posts: 607 Location: Poland
|
Posted: Mon Nov 15, 2004 10:11 pm Post subject: |
|
|
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ć  _________________ Q: Why is Microsoft's Product Support a failure?
A: Because Microsoft needs a Support Group instead. |
|
| Back to top |
|
 |
Strus l33t

Joined: 19 Apr 2004 Posts: 780 Location: Poland - Bochnia
|
Posted: Mon Nov 15, 2004 11:11 pm Post subject: |
|
|
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 |
|
 |
Rav70 l33t


Joined: 11 Feb 2004 Posts: 607 Location: Poland
|
Posted: Tue Nov 16, 2004 11:41 am Post subject: |
|
|
| 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 |
|
 |
Gogiel Guru


Joined: 11 Nov 2004 Posts: 347
|
Posted: Tue Nov 16, 2004 8:02 pm Post subject: |
|
|
| 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ż  |
Jakie modul iptables sa potrzebne?? |
|
| Back to top |
|
 |
Strus l33t

Joined: 19 Apr 2004 Posts: 780 Location: Poland - Bochnia
|
Posted: Wed Nov 17, 2004 1:43 am Post subject: |
|
|
| 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 |
|
 |
fallow Bodhisattva


Joined: 08 Jan 2004 Posts: 2206 Location: Poland
|
Posted: Wed Nov 17, 2004 10:07 am Post subject: |
|
|
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 |
|
 |
misterLu Guru


Joined: 14 Sep 2003 Posts: 430 Location: Poland
|
Posted: Wed Nov 17, 2004 11:54 am Post subject: |
|
|
| 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 |
|
 |
ai Apprentice

Joined: 21 Mar 2004 Posts: 227 Location: Poland, Krk
|
Posted: Wed Nov 17, 2004 4:05 pm Post subject: |
|
|
[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 |
|
 |
Rav70 l33t


Joined: 11 Feb 2004 Posts: 607 Location: Poland
|
Posted: Wed Nov 17, 2004 4:34 pm Post subject: |
|
|
| 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 |
|
 |
misterLu Guru


Joined: 14 Sep 2003 Posts: 430 Location: Poland
|
Posted: Wed Nov 17, 2004 5:53 pm Post subject: |
|
|
jeli 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 mylnikiem. Jeli tak będzie, znaczy że opcja b może być (ale nie musi) prawdziwa, a jeli 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 domylne w Perlu waszym, ale po pierwsze wszyscy mamy tš samš konfigurację (domylnš) a po drugie nie korzystam z tych zmiennych w skrypcie. |
|
| Back to top |
|
 |
Strus l33t

Joined: 19 Apr 2004 Posts: 780 Location: Poland - Bochnia
|
Posted: Wed Nov 17, 2004 6:36 pm Post subject: |
|
|
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 |
|
 |
axquan Tux's lil' helper

Joined: 05 Nov 2003 Posts: 85
|
Posted: Wed Nov 17, 2004 9:55 pm Post subject: |
|
|
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 |
|
 |
|