Отказ от ответственности: Хотя я определенно считаю токенизацию средством перевода подозреваемым, разделение на предложения, как показано в печати, может привести к результатам, отвечающим вашим требованиям.
Я предположил, что его код можно улучшить, сократив число строк строки более 30 + до регулярного выражения в 1 строку, которое он попросил в другом вопросе , но это предложение не было хорошо принято.
Вот реализация, использующая google api для .net в VB и 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
Ввод (украден непосредственно из опечатки)
Просто чтобы доказать, что я бросил это
вместе :) грубо во всем
края, но он справится с целым
текста, и это так же хорошо, как
Google для точности перевода
потому что он использует Google API. я
обработанный Apple, весь 2005 SEC 10-K
подачи с этим кодом и щелчком
одна кнопка (заняло около 45 минут).
Результат был в основном идентичен
что бы вы получили, если бы вы скопировали и
вставил одно предложение за раз в
Гугл переводчик. Это не идеально
(окончание пунктуации не является точным
и я не писал в текстовый файл
построчно), но доказательство
концепции Могло бы быть лучше
пунктуация, если вы работали с Regex
еще немного.
Результаты (на немецком языке для опечатывания):
Nur um zu beweisen einen Punkt warf
ich dies zusammen :) Es ist Ecken und
Kanten, aber es wird eine ganze Menge
Текст Umgehen Und Tut So Gut Wie
Google für die Genauigkeit der
Übersetzungen, weil es die Google-API
verwendet. Ич верарбейтет Apple's
gesamte 2005 SEC 10-K Filing bei
Diesem Code и DEM Klicken Einer
Вкус (dauerte около 45 минут). десять кубометров
Ergebnis war im wesentlichen Identifisch
zu dem, был Sie erhalten würden, Венн
Sie kopiert und eingefügt einem Satz
в эйнер цейт, в гугл переводчик.
Es ist nicht perfekt (Endung
Interpunktion ist nicht korrekt und
ich wollte nicht in die Textdatei
Zeile für Zeile) Schreiben, aber es
Zeigt доказательство концепции. Es hätte
besser Satzzeichen, Вен С Мит Регекс
arbeitete einige mehr.