在寻找在
R
内翻译文本的解决方案时,我得到了很多相当旧的答案,建议使用包 translateR
。我找到的最好答案是这个。
答案已经有 6 年历史了,同时
translateR
不再是 CRAN 存储库的一部分(有人知道为什么吗?)。我想知道现在是否有更好的选择,使用 CRAN 存储库中的包。
我的示例数据如下;
translate <- data.frame(sentences = c("This needs to be translated to Dutch",
"This also needs to be translated to Dutch",
"Just as this one has to"))
目前在 R 中翻译文本的最佳选项是什么?
您可以使用
deeplr
包,该包使用 deepl 的 API。 Deepl 据说比谷歌翻译准确得多。
library(deeplr)
translate2(text = translate$sentences,
source_lang = "EN",
target_lang = "NL",
auth_key = "your_key")
#[1] "Dit moet vertaald worden naar het Nederlands"
#[2] "Dit moet ook vertaald worden naar het Nederlands"
#[3] "Net als deze moet"
这是一种可以使用的方法,基本上从 R 调用 python 库:
library(reticulate)
conda_Env <- conda_list()
if(any(conda_Env[, 1] == "traduction") == FALSE)
{
reticulate::conda_create(envname = "traduction", packages = c("transformers"))
}
reticulate::use_condaenv("traduction")
py_run_string("from transformers import pipeline")
py_run_string("translator = pipeline('translation_en_to_fr')")
py_run_string("print(translator('It is easy to translate languages with transformers', max_length=40))")
[{'translation_text': "Il est facile de traduire des langues à l'aide de transformateurs"}]
此方法不需要 API 并且在本地运行。您还可以考虑以下也在本地运行的方法:
library(reticulate)
conda_Env <- conda_list()
if(any(conda_Env[, 1] == "traduction") == FALSE)
{
reticulate::conda_create(envname = "traduction", packages = c("transformers"))
}
reticulate::use_condaenv("traduction")
transformers <- import("transformers")
translator <- transformers$pipeline('translation_en_to_fr')
translator('It is easy to translate languages with transformers', max_length=40)
[[1]]
[[1]]$translation_text
[1] "Il est facile de traduire des langues à l'aide de transformateurs"
这是另一种基于谷歌翻译的方法:
library(stringr)
library(pagedown)
library(pdftools)
text_To_Translate <- "La tutela de Vieux-la-Romaine est une "
text_To_Translate <- str_replace_all(string = text_To_Translate, pattern = "[:space:]", replacement = "%20")
url <- paste0('https://translate.google.com/?hl=fr&sl=fr&tl=en&text=', text_To_Translate, '&op=translate')
temp_PDF <- tempfile(fileext = ".pdf")
tryCatch(pagedown::chrome_print(input = url, output = temp_PDF, wait = 2), error = function(e) NA)
translated_Text <- pdf_text(temp_PDF)
translated_Text <- strsplit(translated_Text, split = "\r\n|\n")[[1]]
translated_Text <- translated_Text[c(12, 13)]
translated_Text[1] <- str_remove(string = translated_Text[1], pattern = " clear")
str_split(translated_Text, "[:space:]{20,100}")
[[1]]
[1] "La tutela de Vieux-la-" "The guardian of Vieux-la-"
[[2]]
[1] "Romaine est une" "Romaine is a"