Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
                }
            });
        }
Ejemplo n.º 3
0
        /// <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);
            }
        }
Ejemplo n.º 4
0
        private YandexVideoSearcher(LanguageShortName shortName)
        {
            _shortName = shortName;

            _pageContentsDirectory = GetContentsDirectory(BASE_PATH, shortName);
            _linksDirectory        = GetLinksDirectory(BASE_PATH, shortName);
        }
Ejemplo n.º 5
0
        /// <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)));
        }
Ejemplo n.º 6
0
 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()));
 }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 8
0
        /// <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);
        }
Ejemplo n.º 9
0
        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));
        }
Ejemplo n.º 10
0
        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);
        }
Ejemplo n.º 11
0
        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);
        }
Ejemplo n.º 12
0
        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);
        }
Ejemplo n.º 13
0
        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);
                    }
                }
            }
        }
Ejemplo n.º 14
0
        /// <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());
        }
Ejemplo n.º 15
0
        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);
        }
Ejemplo n.º 16
0
        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;
                }

                //лучшие переводы не найдены - попробовать перевести это же слово, но уже с другого языка
            }
        }
Ejemplo n.º 17
0
        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");
        }
Ejemplo n.º 19
0
        private bool IsShortNameValid(Language language)
        {
            LanguageShortName shortName = ParseShortName(language.ShortName);

            return(shortName != LanguageShortName.Unknown && DefaultContainsLanguage(shortName));
        }
Ejemplo n.º 20
0
        public static string GetAllLinksFullFileName(string basePath, LanguageShortName shortName)
        {
            string linksDirectory = GetLinksDirectory(basePath, shortName);

            return(GetAllLinksFullFileName(linksDirectory));
        }
Ejemplo n.º 21
0
 private static string GetPath(string basePath, LanguageShortName shortName)
 {
     return(Path.Combine(basePath, "Yandex", shortName.ToString()));
 }
Ejemplo n.º 22
0
        private static string GetLinksDirectory(string basePath, LanguageShortName shortName)
        {
            string path = GetPath(basePath, shortName);

            return(Path.Combine(path, "Links"));
        }
Ejemplo n.º 23
0
        public static string GetContentsDirectory(string basePath, LanguageShortName shortName)
        {
            string path = GetPath(basePath, shortName);

            return(Path.Combine(path, "Contents"));
        }
Ejemplo n.º 24
0
 private bool DefaultContainsLanguage(LanguageShortName shortName)
 {
     return(_defaultFrom == shortName || _defaultTo == shortName);
 }
Ejemplo n.º 25
0
        public void GetLowerNameWithoutEnding(LanguageShortName shortName, string expectedResult)
        {
            string lowerNameWithoutEnding = LanguagesHelper.GetLowerNameWithoutEnding(shortName);

            Assert.That(lowerNameWithoutEnding, Is.EqualTo(expectedResult));
        }
Ejemplo n.º 26
0
        public void GetPrettyLowerName(LanguageShortName shortName, string expectedResult)
        {
            string prettyLowerName = LanguagesHelper.GetPrettyLowerName(shortName);

            Assert.That(prettyLowerName, Is.EqualTo(expectedResult));
        }
Ejemplo n.º 27
0
 /// <summary>
 /// Конструктор
 /// </summary>
 /// <param name="defaultFrom">по-умолчанию язык, с которого нужно переводить</param>
 /// <param name="defaultTo">по-умолчанию язык, на который нужно переводить</param>
 public LanguagesQuery(LanguageShortName defaultFrom, LanguageShortName defaultTo)
 {
     _defaultFrom = defaultFrom;
     _defaultTo   = defaultTo;
 }
Ejemplo n.º 28
0
 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);
        }
Ejemplo n.º 30
0
        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();
        }