Что нового

Как бы мне сделать переводчик?

GUIMish

Знающий
Сообщения
122
Репутация
12
У меня возник вот такой вопрос:
Как бы сделать свою систему перевода (Программы для компьютера почти все платные), так вот, когда в один Edit пишешь, "Hello", а он в другой "Здравствуйте", и так далее, со словарем я сам справлюсь, только мне никак ни получается, пробовал StringRegExpReplace и StringReplace, получилось, НО когда я внес 5000 слов, и закидываю длинный текст, то он слишком медленно ищет по моему словарю! (Magic Gooddy переводит намного быстрее)

Я пробовал это:
Код:
Dim $rLeter[2][2] = [['Hello', 'Здравствуйте'], ['Hi', 'Привет']]

For $r = 0 To UBound($fLetter)-1
	  $resMessage = StringRegExpReplace($Text, $fLetter[$r][0], $fLetter[$r][1])
   Next
GUICtrlSetData($resMessage, $Rep15)


Если я как-то неправильно пользуюсь этой функцией, подскажите мне, а если нужно использовать другой скрипт, посоветуйте мне пожалуйста!
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
GUIMish

Код:
#include <Array.au3>

Dim $rLeter[2][2] = [['Hello', 'Здравствуйте'],['Hi', 'Привет']]

$Form1 = GUICreate('Form1', 200, 100, -1, -1)
$hInput1 = GUICtrlCreateInput('', 10, 10, 150, 25)
$hInput2 = GUICtrlCreateInput('', 10, 40, 150, 25)
$hButton1 = GUICtrlCreateButton('Перевести', 10, 70, 150, 25)

GUISetState(@SW_SHOW)

While 1
	Switch GUIGetMsg()
		Case -3
			Exit
		Case $hButton1
			$Data = GUICtrlRead($hInput1)
			If $Data <> '' Then
				$iIndex = _ArraySearch($rLeter, $Data, 0, 0, 0, 0, 0)
				If $iIndex <> -1 Then
					If $rLeter[$iIndex][1] = $Data Then
						GUICtrlSetData($hInput2, $rLeter[$iIndex][0])
					Else
						GUICtrlSetData($hInput2, $rLeter[$iIndex][1])
					EndIf
				Else
					GUICtrlSetData($hInput2, 'Нет соответствия')
				EndIf
			EndIf
	EndSwitch
WEnd


И
http://autoit-script.ru/index.php/topic,3423.0.html
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
GUIMish
Если слов очень много, то лучше всего их будет разделить на категории, к примеру слово Hello:

Код:
$sWord = StringLower( "Hello" )

$aCat = StringSplit( $sWord, "" )

$iCatMaxLvl = 3
$sWordsBase = @ScriptDir & "\Base\"
$sCurPath = $sWordsBase

For $Idx = 1 To $aCat[0] Step 1
	If FileExists( $sCurPath & $aCat[$Idx] & '.txt' )
		;Слово должно содержаться в этом файле ( $sCurPath & $aCat[$Idx] & '.txt' )
		ExitLoop
	ElseIf $Idx > $iCatMaxLvl Then
		;Файл не найден, максимальная вложенность категоризации достигнута
		ExitLoop
	ElseIf FileExists( $sCurPath & $aCat[$Idx] ) Then
		$sCurPath &= $aCat[$Idx] & "\"
	EndIf
Next


;Пример базы для сложности категоризации=3
@ScriptDir & "\Base\H"
	@ScriptDir & "\Base\H\E"
		@ScriptDir & "\Base\H\E\L"
			@ScriptDir & "\Base\H\E\L\L.txt"
				hello=Привет
 
Автор
G

GUIMish

Знающий
Сообщения
122
Репутация
12
Спасибо всем!
Буду Разбираться!
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
Это словарь слов а не переводчик, например тот же QDictionary. Есть готовые бесплатные словари. Скачиваешь, разбираешься в формате и делаешь типа повтор уже известных программ. А настоящий переводчик это слишком сложнее, чем примитивная подстановка слов. Это поиск идиом, а для этого надо знать в совершенстве оба языка. Это сложнее, чем незнание метода подстановки.
 
Верх