Descargo de responsabilidad: Aunque definitivamente considero que tokenizar es un medio de traducción sospechoso, dividir oraciones como se ilustra más adelante con tipeo puede producir resultados que llenen sus requisitos.
Sugerí que su código podría mejorarse al reducir las más de 30 líneas de munging de cuerda a la línea recta de 1 línea que pidió in another question, pero la sugerencia no fue bien recibida.
Aquí es una implementación usando google api for .net en VB y CSharp
Program.cs
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
using Google.API.Translate;
namespace TokenizingTranslatorCS
{
internal class Program
{
private static readonly TranslateClient Client =
new TranslateClient("http://code.google.com/p/google-api-for-dotnet/");
private static void Main(string[] args)
{
Language originalLanguage = Language.English;
Language targetLanguage = Language.German;
string filename = args[0];
StringBuilder output = new StringBuilder();
string[] input = File.ReadAllLines(filename);
foreach (string line in input)
{
List<string> translatedSentences = new List<string>();
string[] sentences = Regex.Split(line, "\\b(?<sentence>.*?[\\.!?](?:\\s|$))");
foreach (string sentence in sentences)
{
string sentenceToTranslate = sentence.Trim();
if (!string.IsNullOrEmpty(sentenceToTranslate))
{
translatedSentences.Add(TranslateSentence(sentence, originalLanguage, targetLanguage));
}
}
output.AppendLine(string.Format("{0}{1}", string.Join(" ", translatedSentences.ToArray()),
Environment.NewLine));
}
Console.WriteLine("Translated:{0}{1}{0}", Environment.NewLine, string.Join(Environment.NewLine, input));
Console.WriteLine("To:{0}{1}{0}", Environment.NewLine, output);
Console.WriteLine("{0}Press any key{0}", Environment.NewLine);
Console.ReadKey();
}
private static string TranslateSentence(string sentence, Language originalLanguage, Language targetLanguage)
{
string translatedSentence = Client.Translate(sentence, originalLanguage, targetLanguage);
return translatedSentence;
}
}
}
Module1.vb
Imports System.Text.RegularExpressions
Imports System.IO
Imports System.Text
Imports Google.API.Translate
Module Module1
Private Client As TranslateClient = New TranslateClient("http://code.google.com/p/google-api-for-dotnet/")
Sub Main(ByVal args As String())
Dim originalLanguage As Language = Language.English
Dim targetLanguage As Language = Language.German
Dim filename As String = args(0)
Dim output As New StringBuilder
Dim input As String() = File.ReadAllLines(filename)
For Each line As String In input
Dim translatedSentences As New List(Of String)
Dim sentences As String() = Regex.Split(line, "\b(?<sentence>.*?[\.!?](?:\s|$))")
For Each sentence As String In sentences
Dim sentenceToTranslate As String = sentence.Trim
If Not String.IsNullOrEmpty(sentenceToTranslate) Then
translatedSentences.Add(TranslateSentence(sentence, originalLanguage, targetLanguage))
End If
Next
output.AppendLine(String.Format("{0}{1}", String.Join(" ", translatedSentences.ToArray), Environment.NewLine))
Next
Console.WriteLine("Translated:{0}{1}{0}", Environment.NewLine, String.Join(Environment.NewLine, input))
Console.WriteLine("To:{0}{1}{0}", Environment.NewLine, output)
Console.WriteLine("{0}Press any key{0}", Environment.NewLine)
Console.ReadKey()
End Sub
Private Function TranslateSentence(ByVal sentence As String, ByVal originalLanguage As Language, ByVal targetLanguage As Language) As String
Dim translatedSentence As String = Client.Translate(sentence, originalLanguage, targetLanguage)
Return translatedSentence
End Function
End Module
de entrada (robado directamente de typoking)
solo para probar un punto arrojé este juntos :) Es áspero alrededor de los bordes , pero manejará un lote ENTERO de texto y lo hace tan bueno como Google para precisión de traducción porque utiliza la API de Google. I procesó todo el 2005 SEC 10-K de Apple con este código y el clic de un botón (tomó aproximadamente 45 minutos). El resultado fue básicamente idéntico al que obtendría si copió y pegó una frase por vez en Google Translator. No es perfecto (la puntuación final no es exacta y no escribí en el archivo de texto línea por línea), pero muestra la prueba del concepto. Podría tener mejor puntuación si trabajó con Regex un poco más.
resultados (al Alemán para typoking):
sólo para demostrar un punto arrojó hago esto juntos :) Es asperezas , pero hay un montón de trabajo alrededor de texto y le duele tan bueno como Google de la exactitud de las traducciones , ya que utiliza la API de Google . Procesé toda SEC 2005 10-K de Apple con este código y el clic de un botón (nos llevó unos 45 minutos). El resultado fue sustancialmente idéntica a lo que se obtendría si copiar y pegar un conjunto en un momento en que Google Translator. No es perfecto (terminando puntuacion es incorrecta y yo no quería en el archivo de texto línea por línea) escribir, pero muestra prueba de concepto. Sería mejor puntuacion si trabajó con expresiones regulares un poco más.
No programación relacionada. Votando para pasar a Super Usuario. –
@David_Thornley Él está pidiendo una API para traducir de forma programática textos grandes ... ¿cómo no está relacionada la programación? – Marcelo
esto definitivamente está relacionado con la programación –