public List <string> Translate(LanguageShortName from, LanguageShortName to, string text) { if (_isBanned) { return(null); } string url = string.Format( "http://translate.google.ru/translate_a/t?client=x&text={0}&hl={1}&sl={1}&tl={2}&ie=UTF-8&oe=UTF-8", HttpUtility.UrlEncode(text), from.ToString().ToLowerInvariant(), to.ToString().ToLowerInvariant()); try { HttpWebRequest request = WebRequest.CreateHttp(url); using (var resp = (HttpWebResponse)request.GetResponse()) { if (resp.StatusCode == HttpStatusCode.OK) { var streamReader = new StreamReader(resp.GetResponseStream(), Encoding.UTF8); string content = streamReader.ReadToEnd(); return(GetTranslationFromContent(content)); } _isBanned = true; } } catch (Exception) { //TODO: логирование int y = 0; } return(null); }
private void LoadLanguages() { if (EnumerableValidator.IsNotNullAndNotEmpty(_languages)) { //ранее уже загрузили языки return; } Adapter.ActionByContext(c => { _languages = c.Language.ToList(); _languagesByIds = new Dictionary <long, Language>(_languages.Count); _languagesByShortNames = new Dictionary <LanguageShortName, Language>(_languages.Count); foreach (Language language in _languages) { LanguageShortName parsedShortName = ParseShortName(language.ShortName); if (parsedShortName == LanguageShortName.Unknown) { continue; } _languagesByIds.Add(language.Id, language); _languagesByShortNames.Add(parsedShortName, language); } }); }
/// <summary> /// Возвращает название языка на русском языке /// </summary> /// <param name="shortName">название языка</param> /// <returns>название языка на русском языке с маленькой буквы</returns> public static string GetPrettyLowerName(LanguageShortName shortName) { switch (shortName) { case LanguageShortName.Ru: return("русский"); case LanguageShortName.En: return("английский"); case LanguageShortName.De: return("немецкий"); case LanguageShortName.Fr: return("французский"); case LanguageShortName.It: return("итальянский"); case LanguageShortName.Es: return("испанский"); default: return(null); } }
private YandexVideoSearcher(LanguageShortName shortName) { _shortName = shortName; _pageContentsDirectory = GetContentsDirectory(BASE_PATH, shortName); _linksDirectory = GetLinksDirectory(BASE_PATH, shortName); }
/// <summary> /// Возвращает перевод для слова /// </summary> /// <param name="sourceLanguage">язык, на котором введено слово</param> /// <param name="destinationLanguage">язык, на который нужно перевести слово</param> /// <param name="word">слово, которое нужно перевести</param> /// <returns>переведенное слово</returns> public ActionResult Translation(string sourceLanguage, string destinationLanguage, string word) { const string ACTION_NAME = "Index"; if (WebSettingsConfig.Instance.IsSectionForbidden(SectionId)) { return(RedirectToAction("Index", RouteConfig.MAIN_CONTROLLER_NAME)); } var languages = new LanguagesQuery(WebSettingsConfig.Instance.DefaultLanguageFrom, WebSettingsConfig.Instance.DefaultLanguageTo); LanguageShortName source = LanguagesQuery.ParseShortName(sourceLanguage); LanguageShortName destination = LanguagesQuery.ParseShortName(destinationLanguage); UserLanguages userLanguages = languages.GetLanguagesByShortNames(source, destination); if (UserLanguages.IsInvalid(userLanguages) || string.IsNullOrEmpty(word)) { return(RedirectToAction(ACTION_NAME, ControllerName)); } List <PronunciationForUser> translationWords = GetTranslationsByQuery(userLanguages, word); return(View(ACTION_NAME, new TranslatorModel(userLanguages, word, translationWords))); }
private static string GetUrl(LanguageShortName from, LanguageShortName to, string text) { return(string.Format( "https://translate.yandex.net/api/v1.5/tr.json/translate?key={0}&text={1}&lang={2}-{3}", API_KEY, HttpUtility.UrlEncode(text), from.ToString().ToLowerInvariant(), to.ToString().ToLowerInvariant())); }
public bool IsInvalid(IVideoData data, LanguageShortName shortName) { YoutubeVideoData parsedData = GetParsedData(data); if (!"ok".Equals(parsedData.Status, StringComparison.InvariantCultureIgnoreCase)) { return(true); } string title = data.Title.ToLowerInvariant(); if (_titleStopWords.Any(title.Contains)) { return(true); } if (title.Contains("18+")) { //а вдруг неприличное содержимое return(true); } string trimmedTitle = _titleExcludeWords.Aggregate(title, (current, exlude) => current.Replace(exlude, "")); int latinCharsCount = 0; int russianCharsCount = 0; foreach (char ch in trimmedTitle) { if (ch >= 'a' && ch <= 'z') { latinCharsCount++; } else if (ch >= 'а' && ch <= 'я') { russianCharsCount++; } } if (russianCharsCount == 0 && latinCharsCount == 0) { //в названии нет ни русских ни латинских букв return(true); } if (russianCharsCount > latinCharsCount) { /*string nameWithoutEnding = LanguagesHelper.GetLowerNameWithoutEnding(shortName); * if (!title.Contains(nameWithoutEnding)) {*/ //в названии русских букв больше - считаем что фильм не на том языке return(true); //} } return(false); }
/// <summary> /// Возвращает часть названия языка(без окончания) на русском языке /// </summary> /// <param name="shortName">название языка</param> /// <returns>название языка на русском языке с маленькой буквы</returns> public static string GetLowerNameWithoutEnding(LanguageShortName shortName) { string result = GetPrettyLowerName(shortName); if (result != null) { result = TrimEnding(result, "ий"); } return(result); }
private VideoProcessor(LanguageShortName shortName) { _shortName = shortName; string cachePath = Path.Combine(YandexVideoSearcher.BASE_PATH, "VideoDataCache", _shortName.ToString()); _diskCache = new DiskCache(cachePath, false); _linksHelper = new VideoLinksHelper(YandexVideoSearcher.GetAllLinksFullFileName(YandexVideoSearcher.BASE_PATH, shortName)); }
public Language GetByShortName(LanguageShortName shortName) { if (EnumValidator.IsInvalid(shortName) || shortName == LanguageShortName.Unknown) { return(null); } LoadLanguages(); Language result; return(_languagesByShortNames.TryGetValue(shortName, out result) ? result : null); }
public TVSeriesCreator(LanguageShortName language, string outputPath, string origSeriesName, string transSeriesName) { _outputPath = outputPath; _origSeriesName = origSeriesName; _transSeriesName = transSeriesName; var languagesQuery = new LanguagesQuery(language, LanguageShortName.Ru); _languageId = languagesQuery.GetByShortName(language).Id; _seriesQuery = new TVSeriesQuery(_languageId); }
public UserLanguages GetLanguagesByShortNames(LanguageShortName source, LanguageShortName translation) { if (!DefaultContainsLanguage(source) || !DefaultContainsLanguage(translation) || source == translation) { return(new UserLanguages()); } LoadLanguages(); var result = new UserLanguages { From = GetByShortName(source), To = GetByShortName(translation) }; return(result); }
private void Translate(IEnumerable <ITranslator> translators, LanguageShortName from, LanguageShortName to, string text) { foreach (ITranslator translator in translators) { List <string> translations = translator.Translate(from, to, text); if (translations == null) { //TODO: логировать continue; } //считаем что перевод не может совпадать с исходным текстом(т.к. переводчики возвращают исходный текст, когда не знают как его перевести) translations = translations.Where(e => !string.Equals(e, text, StringComparison.InvariantCultureIgnoreCase)).Select(e => e).ToList(); if (EnumerableValidator.IsEmpty(translations)) { //TODO: логировать continue; } foreach (string translation in translations) { string normalizedTranslation = translation.Trim().ToLowerInvariant(); if (_bestTranslations.ContainsKey(normalizedTranslation)) { _bestTranslations[normalizedTranslation]++; continue; } if (_otherTranslations.ContainsKey(normalizedTranslation)) { _bestTranslations.Add(normalizedTranslation, 2); _otherTranslations.Remove(normalizedTranslation); } else { _initialsByNormalized.Add(normalizedTranslation, translation); _otherTranslations.Add(normalizedTranslation, 1); } } } }
/// <summary> /// Переводит на язык to, тексты которые указаны в textsByFromLanguages /// </summary> /// <param name="to">язык на который нужно перевести</param> /// <param name="textsWithLanguages">список текстов на разных, которые означают одно и то же и значение перевод у которых будет одно и тоже</param> /// <returns>наилучшии общие переводы для текстов на разных языках; пустой список если не удалось определить наилучшие переводы</returns> public List <string> Translate(LanguageShortName to, IEnumerable <Tuple <LanguageShortName, string> > textsWithLanguages) { _bestTranslations.Clear(); _otherTranslations.Clear(); _initialsByNormalized.Clear(); Translate(_translators, to, textsWithLanguages); if (EnumerableValidator.IsEmpty(_bestTranslations) && EnumerableValidator.IsNotEmpty(_extraTranslators)) { //наилучшие переводы не найдены - перевести с помощью дополнительных переводчиков Console.WriteLine("Воспользуемся дополнительными переводчиками!!!"); CountExtraCalls++; Translate(_extraTranslators, to, textsWithLanguages); } return(GetBestTranslations()); }
public List <string> Translate(LanguageShortName from, LanguageShortName to, string text) { string url = GetUrl(from, to, text); try { HttpWebRequest request = WebRequest.CreateHttp(url); using (var resp = (HttpWebResponse)request.GetResponse()) { if (resp.StatusCode == HttpStatusCode.OK) { var streamReader = new StreamReader(resp.GetResponseStream()); string content = streamReader.ReadToEnd(); return(GetTranslationFromContent(content)); } } } catch (Exception) { //TODO: логирование } return(null); }
private void Translate(ITranslator[] translators, LanguageShortName to, IEnumerable <Tuple <LanguageShortName, string> > textsWithLanguages) { foreach (var textWithLanguage in textsWithLanguages) { LanguageShortName from = textWithLanguage.Item1; string text = textWithLanguage.Item2; //перевести текст с языка на другой язык Translate(translators, from, to, text); if (EnumerableValidator.IsNotEmpty(_bestTranslations)) { //найдены лучшие переводы - вернуть return; } //лучшие переводы не найдены - попробовать перевести это же слово, но уже с другого языка } }
public List <string> Translate(LanguageShortName from, LanguageShortName to, string text) { int i = 0; do { var admAuth = new AdmAuthentication(CLIENT_ID, CLIENT_SECRET); try { AdmAccessToken admToken = admAuth.GetAccessToken(); return(Translate(text, from.ToString().ToLowerInvariant(), to.ToString().ToLowerInvariant(), admToken)); } catch (WebException e) { Console.WriteLine("MicrosoftTranslator.Translate исключение! попытка перевода {0}", i + 1); ProcessWebException(e); } catch (Exception ex) { Console.WriteLine("MicrosoftTranslator.Translate исключение! попытка перевода {0}", i + 1); //TODO: логировать } i++; } while (i <= 5); return(null); }
private static string GetZipKey(List <RepresentationForUser> allRepresentations, LanguageShortName from, LanguageShortName to) { var keyFromIds = string.Join("_", allRepresentations.OrderBy(e => e.Id).Select(e => e.Id)) + "_" + allRepresentations.Max(e => e.SortInfo.LastModified).Ticks; var md5Helper = new Md5Helper(); return("VisualDictionaries_" + md5Helper.GetHash(keyFromIds) + "_" + from + "_" + to + ".zip"); }
private bool IsShortNameValid(Language language) { LanguageShortName shortName = ParseShortName(language.ShortName); return(shortName != LanguageShortName.Unknown && DefaultContainsLanguage(shortName)); }
public static string GetAllLinksFullFileName(string basePath, LanguageShortName shortName) { string linksDirectory = GetLinksDirectory(basePath, shortName); return(GetAllLinksFullFileName(linksDirectory)); }
private static string GetPath(string basePath, LanguageShortName shortName) { return(Path.Combine(basePath, "Yandex", shortName.ToString())); }
private static string GetLinksDirectory(string basePath, LanguageShortName shortName) { string path = GetPath(basePath, shortName); return(Path.Combine(path, "Links")); }
public static string GetContentsDirectory(string basePath, LanguageShortName shortName) { string path = GetPath(basePath, shortName); return(Path.Combine(path, "Contents")); }
private bool DefaultContainsLanguage(LanguageShortName shortName) { return(_defaultFrom == shortName || _defaultTo == shortName); }
public void GetLowerNameWithoutEnding(LanguageShortName shortName, string expectedResult) { string lowerNameWithoutEnding = LanguagesHelper.GetLowerNameWithoutEnding(shortName); Assert.That(lowerNameWithoutEnding, Is.EqualTo(expectedResult)); }
public void GetPrettyLowerName(LanguageShortName shortName, string expectedResult) { string prettyLowerName = LanguagesHelper.GetPrettyLowerName(shortName); Assert.That(prettyLowerName, Is.EqualTo(expectedResult)); }
/// <summary> /// Конструктор /// </summary> /// <param name="defaultFrom">по-умолчанию язык, с которого нужно переводить</param> /// <param name="defaultTo">по-умолчанию язык, на который нужно переводить</param> public LanguagesQuery(LanguageShortName defaultFrom, LanguageShortName defaultTo) { _defaultFrom = defaultFrom; _defaultTo = defaultTo; }
public PopularWordsCreator(LanguageShortName from, PopularWordType type) { _from = from; _type = type; }
public byte[] Generate(LanguageShortName from, LanguageShortName to, HashSet <long> visualDictionariesIds) { var languagesQuery = new LanguagesQuery(from, to); UserLanguages userLanguages = languagesQuery.GetLanguagesByShortNames(from, to); var representationsQuery = new RepresentationsQuery(userLanguages.From.Id); List <RepresentationForUser> allRepresentations = representationsQuery.GetBought(userLanguages, visualDictionariesIds); PdfGenerator commonPdfGenerator = allRepresentations.Count > 1 ? new PdfGenerator(_fontPath, _domain, "Все визуальные словари") : null; var zipKey = GetZipKey(allRepresentations, @from, to); var result = _cache.Get(zipKey); if (result != null) { return(result); } var painter = new Painter(); var partImageCreator = new PartImageCreator(painter); foreach (RepresentationForUser representation in allRepresentations) { var tableData = new TableData(3, true); tableData.AddHeader(string.Empty, "Слово", "Перевод"); string title = representation.Title; /*if (pictureName != "Лицо" /*&& pictureName != "Человек"#1#) { * continue; * }*/ var byteStream = new MemoryStream(representation.Image); Image image = Image.FromStream(byteStream); var wordsWriter = new WordsWriter(painter, image.Width, image.Height); foreach (RepresentationAreaForUser area in representation.Areas) { Point leftCorner = area.LeftUpperCorner; Point rightCorner = area.RightBottomCorner; string partKey = representation.Id + "_part_" + area.Id + "_" + representation.SortInfo.LastModified.Ticks + "_" + from + "_" + to + ".jpeg"; byte[] partImageBytes = _cache.Get(partKey); if (partImageBytes == null) { PartImageData partImageData = partImageCreator.CutImage(leftCorner, rightCorner, image); partImageBytes = ImageToBytes(partImageData.Bitmap); WriteToCache(partKey, partImageBytes); } tableData.AddRow(new[] { TableDataCell.CreateImage(partImageBytes), TableDataCell.CreateText(area.Source.Text), TableDataCell.CreateText(area.Translation.Text) }); wordsWriter.AddRectangle(leftCorner, rightCorner, area); } string fullKey = representation.Id + "_" + representation.SortInfo.LastModified.Ticks + "_" + from + "_" + to + ".jpeg"; byte[] imageResult = _cache.Get(fullKey); if (imageResult == null) { Image imageWithSign = wordsWriter.GetImageWithSigns(image); imageResult = ImageToBytes(imageWithSign); WriteToCache(fullKey, imageResult); } var pdfFileName = title + ".pdf"; string pdfKey = representation.Id + "_" + representation.SortInfo.LastModified.Ticks + "_" + from + "_" + to + "_" + pdfFileName; byte[] pdfContent = _cache.Get(pdfKey); if (pdfContent == null) { var pdfGenerator = new PdfGenerator(_fontPath, _domain, string.Format( "Визуальный словарь на тему {0}", title)); WriteDataToPdf(pdfGenerator, title, imageResult, tableData); pdfContent = pdfGenerator.GetAsBytes(); WriteToCache(pdfKey, pdfContent); } _zipCompressor.AddFileToArchive(pdfFileName, pdfContent); if (commonPdfGenerator != null) { WriteDataToPdf(commonPdfGenerator, title, imageResult, tableData); commonPdfGenerator.NewPage(); } } if (commonPdfGenerator != null) { WritePdfToArchive(commonPdfGenerator, "Всё в одном файле.pdf"); } result = _zipCompressor.GetArchive(); WriteToCache(zipKey, result); return(result); }
public void Fill(LanguageShortName languageShortName, string fileName) { long languageId = new LanguagesQuery(LanguageShortName.Unknown, LanguageShortName.Unknown).GetByShortName(languageShortName).Id; var crossReferencesQuery = new CrossReferencesQuery(languageId); bool hasErrors = false; var ids = new HashSet <long>(); var csvReader = new CsvReader(fileName); int i = 0; do { i++; string[] line = csvReader.ReadLine(); if (line == null) { break; } if (line.Length != 4) { ShowError( "Некорректное кол-во полей в строке {0}: Ожидаем 4, а полей {1}. Для продолжения нажмите Enter...", i, line.Length); continue; } string source = GetTrimmed(line[0]); CrossReferenceType sourceType = GetCrossType(line[1]); string destination = GetTrimmed(line[2]); CrossReferenceType destinationType = GetCrossType(line[3]); if (string.IsNullOrEmpty(source) || string.IsNullOrEmpty(destination) || sourceType == CrossReferenceType.Unknown || destinationType == CrossReferenceType.Unknown) { ShowError("Некорректные данные в строке {0}: {1}. Для продолжения нажмите Enter...", i, string.Join(";", line)); continue; } long id = crossReferencesQuery.Add(source, sourceType, destination, destinationType); if (IdValidator.IsValid(id)) { ids.Add(id); Console.WriteLine("Обработана строка под номером {0}", i); } else { hasErrors = true; ShowError( "Не удалось сохранить данные из строки {0}. Источник {1}, тип источника {2}, приемник {3}, тип источника {4}. Для продолжения нажмите Enter...", i, source, sourceType, destination, destinationType); } } while (true); if (!hasErrors) { crossReferencesQuery.RemoveAllExceptIds(ids); } Console.WriteLine("С ссылками все"); Console.ReadLine(); }