예제 #1
0
        protected virtual async Task <string> DownloadAndExtractWordEmbedding(string language, CancellationToken cancellationToken)
        {
            var wordEmbeddingOptions = _options.WordEmbeddingOptions.First(_ => _.Language == language);
            var filePath             = DirectoryHelper.GetWordEmbeddingFilePath(language);

            if (File.Exists(filePath))
            {
                return(filePath);
            }

            var zipPath = DirectoryHelper.GetWordEmbeddingZipFilePath(language);

            if (!File.Exists(zipPath))
            {
                using (var httpClient = _httpClientFactory.BuildHttpClient())
                {
                    var progress = new Progress <float>();
                    progress.ProgressChanged += HandleProgressChanged;
                    using (var file = File.OpenWrite(DirectoryHelper.GetWordEmbeddingZipFilePath(language)))
                    {
                        await httpClient.DownloadDataAsync(wordEmbeddingOptions.DownloadUrl, file, progress);
                    }
                }
            }

            using (var archive = ZipFile.OpenRead(zipPath))
            {
                var entry = archive.Entries.First(e => e.FullName.EndsWith(".vec"));
                entry.ExtractToFile(filePath);
            }

            return(filePath);
        }