|
|
|
| Здравствуйте,
У меня задача такова:
Пользователь вводить в строку поиска текст на русском, поскольку в базе большая часть на украинском, следовательно нужно перевести с русского на украинский и начинать поиск.
перевод слов(а) должно проходить не заметно для посетителя.
Сразу в голову "пришела" мысль:
зайти на онлайн переводчик, автоматом заполнить формы и с полученным ответом начанить искать.
Нашел сайт, на котором доступно переводить рус => укр. Вот
http://trident.com.ua/translation/online.html
но ни как не могу написать код, не представляю как. Нужна Ваша помощь, надеюсь. | |
|
|
|
|
|
|
|
для: 27
(01.04.2007 в 21:36)
| | тут видимо нужно отправлять данные через POST на эту страницу непосредственно из твоего скрипта через сокеты. И извлекать из ответа переведённый текст через регулярные выражения... | |
|
|
|
|
|
|
|
для: NIK
(01.04.2007 в 22:11)
| | Если можно привести код этого действа, я php знаю "по стольку по скольку".
Сегодня весь день на это потратил, а результата не достиг. | |
|
|
|
|
|
|
|
для: 27
(01.04.2007 в 22:20)
| | Делается это примерно вот так:
1) чтобы не возиться с ява скриптами (тем более лично я их почти не знаю :) ) пишем скрипт просмотра передающихся данных:
<?php
if (empty($_POST))
{
//теперь просто копируем код страницы с http://trident.com.ua/translation/online.html
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=windows-1251">
<title>Online</title>
<script>
<!-- hide this
var browser;
function init(){
browser = navigator.appName;
var src = document.form1.SrcTxt;
src.focus();
defaultStatus="Type or Paste any text to the window";
var cook = document.cookie;
var i = cook.indexOf("DIR") + 4;
var lang = cook.substring(i, i + 2);
i = cook.indexOf("SUB") + 4;
var subj = cook.substring(i, i + 2);
var tfr = document.form1.TranFrom;
for(i = 0; i < tfr.length; i++)
if(tfr[i].value.charAt(0) == lang.charAt(0))
{
tfr[i].selected = true;
break;
}
var tto = document.form1.TranTo;
for(i = 0; i < tto.length; i++)
if(tto[i].value.charAt(0) == lang.charAt(1))
{
tto[i].selected = true;
break;
}
var sub = document.form1.Subject;
for(i = 0; i < sub.length; i++)
if(sub[i].value == subj)
{
sub[i].selected = true;
break;
}
return true;
}
function paste_txt(arg) {
arg.value = "";
var rng;
try{
rng = arg.createTextRange();
}
catch(e){
alert("You have to use Ctrl-V to Paste the text in "+browser);
arg.focus();
return false;
}
rng.execCommand("paste");
arg.focus();
return false;
}
function copy_txt(arg) {
var rng;
try{
rng = arg.createTextRange();
}
catch(e){
alert("You have to use Ctrl-C to Copy the text in "+browser);
arg.focus();
return false;
}
rng.select();
rng.execCommand("copy");
arg.focus();
return false;
}
function delete_txt(arg) {
arg.value = "";
arg.focus();
return false;
}
function validate(arg) {
var src = arg.SrcTxt;
if(src.value.length == 0) {
alert("Original text window is Empty");
return false;
}
return true;
}
//-->
</script>
<meta http-equiv="Content-Style-Type" content="text/css">
<link rel="stylesheet" href="../css/tsl.css">
</head>
<body bgcolor="#ffffff" lang=EN-US onLoad="init()">
<blockquote>
<table border=0 cellpadding=5>
<tr valign=top><td width=570>
<div id="intro1">
<h2>Pragma on-line translation</h2>
<p><b>NOTE:</b> Original text can be in English, German, Latvian, Russian or Ukrainian.
<br>
Choose language of the original text, its subject and destination language.
</p>
</div>
<div id="trans">
<form name="form1" action="index1.php" method=POST onSubmit="return validate(this)">
<input type="hidden" name="Dialog" value="Eng">
<input type="hidden" name="Format" value="TXT">
<table border=1 cellspacing=0 cellpadding=5 name="tabl1" width=580>
<tr>
<td width=400 colspan=2 valign=top style='border:none;'>
Original Text:
<input type="IMAGE" src="/images/paste.gif" onClick="javascript:return paste_txt(document.form1.SrcTxt)">
<input type="IMAGE" src="/images/copy.gif" onClick="javascript:return copy_txt(document.form1.SrcTxt)">
<input type="IMAGE" src="/images/delete.gif" onClick="javascript:return delete_txt(document.form1.SrcTxt)"><br>
<textarea rows="7" cols="43" name="SrcTxt" wrap="virtual"></textarea>
</td>
<td width=220 valign=top align=center style=border:none>
<br><br>
<div id="sets">
Language:
<select name="TranFrom" style='margin-top:2'>
<option value="Eng">English
<option value="Ger">German
<option value="Lat">Latvian
<option value="Rus">Russian
<option value="Ukr">Ukrainian
</select><br>
Subject:
<select name="Subject" style='margin-top:4'>
<option value="**">Common
<option value="AN">Anatomy
<option value="AU">Auto
<option value="BZ">Business
<option value="CH">Chemistry
<option value="IN">Computers
<option value="EG">Engineering
<option value="LW">Law
<option value="MD">Medicine
<option value="ML">Military
<option value="SO">Sport
</select>
</div>
<br>
</td>
</tr>
</table>
<table border=1 cellspacing=0 cellpadding=5 name="table2" width=580>
<tr>
<td width=220 valign=top align=center style='border:none; vertical-align:baseline'>
<br>
<div id="funcs">
Translate To:
<SELECT NAME="TranTo">
<option value="Eng">English
<option value="Ger">German
<option value="Lat">Latvian
<option value="Rus">Russian
<option value="Ukr">Ukrainian
</SELECT> </div>
<br><br>
<input type="SUBMIT" value=" Translate " name="Translate">
</td>
<td width=378 colspan=2 valign=top style='border:none'>
Translated Text:
<input type="IMAGE" src="/images/paste.gif" onClick="javascript:return paste_txt(document.form1.DstTxt)">
<input type="IMAGE" src="/images/copy.gif" onClick="javascript:return copy_txt(document.form1.DstTxt)">
<input type="IMAGE" src="/images/delete.gif" onClick="javascript:return delete_txt(document.form1.DstTxt)"><br>
<textarea rows="7" cols="43" name="DstTxt" wrap="virtual"></textarea>
</td>
</tr>
</table>
</form>
</div>
</td><td valign=middle align=right width=250>
<div id="onlinks">
<p>Also you can download and try our trial translator
<b><a href="../download.html">Pragma 4.x</a></b>.<p>
</div>
</td></tr>
</table>
<hr>
<sup><font color=silver><i>Copyright © 1999-2007 Trident Software, Ltd. All rights reserved.</i></font>
<a href='MaILTo:trident@kagi.com'><font color=gray>trident©kagi·com</font></a></sub>
</blockquote>
</body>
</html>
<?php
exit;
}
print_r($_REQUEST);
?>
|
там я поменял только строку
<form name="form1" action="index.cgi" method=POST onSubmit="return validate(this)">
на
<form name="form1" action="index1.php" method=POST onSubmit="return validate(this)">
чтобы данные шли куда надо.
сохраняем это как index1.php, запускаем на локалке или хосте, вводим данные и жмем кнопочку TRANSLATE... | |
|
|
|
|
|
|
|
для: 27
(01.04.2007 в 22:20)
| | получаем примерно такую картинку
Array
(
[Dialog] => Eng
[Format] => TXT
[SrcTxt] => русский текст
[TranFrom] => Rus
[Subject] => **
[TranTo] => Ukr
[Translate] => Translate
[DstTxt] =>
)
теперь мы знаем что надо отправлять скрипту по методу ПОСТ.
итоговый скрипт модет выглядеть как-то так:
<?php
//эта функция шлет данные методом пост через сокет и возвращает ответ
function post_data($path,$data,$host)
{
$fp=fsockopen($host,80,$errno,$errstr,30);
if (!$fp)
{
echo "$errstr ($errno)";
}
else
{
$l='';
$out="POST $path HTTP/1.1\r\n";
$out .="Content-Type: application/x-www-form-urlencoded\r\n";
$out.= "Host: $host\r\n";
$out.="User-Agent: Opera/9.02 (Windows NT 5.1; U; ru)\r\n";
$out.='Content-Length: '.strlen($data)."\r\n";
$out.='Connection: close'."\r\n";
$out.="\r\n";
$out.=$data;
fwrite($fp,$out);
while (!feof($fp))
$l.=fgets($fp);
return $l;
}
}
//что переводим
$text='тест украинский';
//это строка данных
$data='TranFrom=Rus&TranTo=Ukr&Subject=**&Dialog=Eng&Format=TXT&Translate=Translate&DstTxt=&SrcTxt='.$text;
$host='trident.com.ua';
$path='/translation/index.cgi';
$page=post_data($path,$data,$host);
//выделяем перевод, который содержится в <textarea>
preg_match_all('|<textarea[^>]+>(.+)</textarea>|sU',$page,$arr);
//выводим второе поле
echo $arr[1][1];
?>
|
| |
|
|
|
|
|
|
|
для: 27
(01.04.2007 в 22:20)
| | только формат переведенного текста выглядит очень интересно :)
тест український
думаю, что юзать его для поиска по базе довольно проблематично.
Можно, конечно, перегнать, русские буквы я из такой билеберды преобразовывал, а вот с украинскими не пробовал... | |
|
|
|
|
|
|
|
для: Disable
(02.04.2007 в 00:07)
| | У меня текст отобразился корректно, но все - же перегнать нужно.
Весьма благодарен, за помощь, очень помогли. | |
|
|
|
|
|
|
|
для: 27
(02.04.2007 в 09:45)
| | ну при перегоне есть 2 арианта:
первый "в лоб";
<?php
$s='тест ук';
$s=str_replace('т','т',$s);
$s=str_replace('е','е',$s);
//и так весь алфавит с большими и алыми буквами, заменяемые буквы в кодировке утф-8
//...........................................
echo $s;
?>
|
второй способ это найти таблицу перекодировки или готовый скрипт.
можно еще поискать другой сайт переводчик :) | |
|
|
|