在 R 中翻译文本

问题描述 投票:0回答:3

在寻找在

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 中翻译文本的最佳选项是什么?

r translation google-translate
3个回答
5
投票

您可以使用

deeplr
包,该包使用 deeplAPI。 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" 

1
投票

这是一种可以使用的方法,基本上从 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"

1
投票

这是另一种基于谷歌翻译的方法:

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" 
© www.soinside.com 2019 - 2024. All rights reserved.