Declinazione di responsabilità: Mentre trovo decisamente tokenizing come mezzo di sospetto di traduzione, la suddivisione in frasi come illustrata in seguito dal battitura può produrre risultati che soddisfano le vostre esigenze.
Ho suggerito che il suo codice potrebbe essere migliorato riducendo le oltre 30 linee di stringa munging alla linea 1 regex che ha richiesto per in another question ma il suggerimento non è stato ben ricevuto.
Ecco un'implementazione utilizzando google api for .net in VB e 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
ingresso (rubata direttamente dal typoking)
Giusto per dimostrare un punto ho gettato questo insieme :) È approssimativo attorno ai bordi , ma gestirà un lotto intero di testo e funziona come Google per la precisione di traduzione perché utilizza l'API di Google. I ha elaborato l'intero file 2005 SEC 10-K di Apple con questo codice e il clic di un pulsante (è durato circa 45 minuti). Il risultato era sostanzialmente identico a che cosa otterresti se copi e incollato una frase alla volta in Google Translator. Non è perfetto (la punteggiatura finale non è precisa e non ho scritto sul file di testo riga per riga), ma mostra la prova di concetto. Potrebbe essere meglio la punteggiatura se hai lavorato con Regex ancora.
Risultati (a Tedesco per typoking):
solo per provare un punto gettato faccio questo insieme :) E 'spigoli , ma c'è un sacco di lavoro in tutto il testo e fa male così buono come Google per l'accuratezza delle traduzioni perché utilizza l'API di Google . Ho elaborato intero 2005 SEC 10-K deposito di Apple con questo codice e il clic di un pulsante (ci vogliono circa 45 minuti). Il risultato è stato sostanzialmente identico a quello che si otterrebbe se si copiato e incollato un set in un momento in cui Google Translator. non è perfetto (finendo la punteggiatura non è corretto e non volevo nel file di testo linea per linea) scrivere, ma mostra proof of concept. Sarebbe meglio punteggiatura se hai lavorato con regex ancora un po '.
Non programmazione relativa. Votazione per passare a Super User. –
@David_Thornley Chiede un'API per tradurre in modo programmatico testi di grandi dimensioni .. come è possibile che la programmazione non sia correlata? – Marcelo
questo è sicuramente programmazione correlata –