[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[问题求助] 如何使用PS实现多行有道翻译

刚刚试了一下有道翻译的代码, 发现只能一次翻译单行, 多行字符串也会只翻译第一行, 于是想到将行用|拼到一起, 有了代码:
$s = @"
中国
日本
美国
"@ -split '\n' -join '|'
(Invoke-RestMethod "http://fanyi.youdao.com/translate?&doctype=json&type='AUTO'&i=$s").translateResult[0].tgt

得到的结果:
China | Japan | the United States

但是没想到,每行加了一个字, 翻译就不行了
代码:
$s = @"
中国人
日本人
美国人
"@ -split '\n' -join '|'
(Invoke-RestMethod "http://fanyi.youdao.com/translate?&doctype=json&type='AUTO'&i=$s").translateResult[0].tgt

得到的结果:
Chinese | | the Japanese americans


难道只能用循环一行一行的翻译吗? 这样好像请求的次数过多, 会被封掉IP
请求路过高手支招, 提前感谢


期待能实现请求一次翻译多行的目标, 最终效果如下面这样
中国人
Chinese
日本人
the Japanese
美国人
americans
本人所发所有贴子或代码, 诸大侠若认为有改进之处,请不吝赐教,感激不尽!

用分号分隔
-join ';'

TOP

回复 2# went


   感谢大侠指引, 技术牛X,  还真行了!
大侠, 有什么简单的法子, 实现原文和译文一上一下排列吗?

中国人
Chinese
日本人
The Japanese
美国人

americans
本人所发所有贴子或代码, 诸大侠若认为有改进之处,请不吝赐教,感激不尽!

TOP

返回的json里面就有src
  1. cls
  2. $s = @'
  3. 中国人
  4. 日本人
  5. 美国人
  6. '@ -split '\n' -join ';'
  7. (Invoke-RestMethod "http://fanyi.youdao.com/translate?&doctype=json&type='AUTO'&i=$s").translateResult[0] | foreach {
  8.     $_.src -replace ';$',''
  9.     $_.tgt -replace ';$',''
  10. }
复制代码
1

评分人数

    • 5i365: 乐于分享, 技术牛X技术 + 1

TOP

本帖最后由 5i365 于 2022-4-27 17:38 编辑

回复 4# went


大侠好, 现在是从文件中获取文本, 又遇到点小问题:

1.网易翻译, 会在句号的地方分行
2.原回车换行符的地方会留下两个分号



  1. $s = (gc abc.txt -enc UTF8 -raw) -split '\r\n' -join ';'
  2. (Invoke-RestMethod "http://fanyi.youdao.com/translate?&doctype=json&type='AUTO'&i=$s").translateResult[0] | foreach {
  3.         $_.src -replace '; $', ''
  4.         $_.tgt -replace '; $', ''
  5. }
复制代码
-------------------------------------------------------------------------------------------------------------------------
原文下载链接: https://send.cm/d/AT9T
用上面代码翻译的结果如下:

中新网4月27日电 国台办发言人马晓光27日在评价刘畊宏带动两岸民众健身热潮时表示,开展交流是基于血脉相连的亲情,也符合两岸同胞共同利益,越来越多的台湾同胞通过两岸交流合作,获得实实在在的好处。
Beijing, April 27 (Reuters) in evaluating liu geng hong xiao-guang ma, spokesman for the Taiwan affairs office of 27 drive on both sides of the public fitness craze, exchanges are based on the connected by affection, also conforms to the common interests of compatriots on both sides, more and more Taiwan compatriots through the cross-strait exchanges and cooperation, get real benefits.
;
;
27日,国台办举行例行新闻发布会。
27, the Taiwan held a regular press conference.
有记者提问:在沪生活的台湾艺人刘畊宏近来通过新媒体带动两岸民众健身热潮,请问发言人如何看待这一现象?
Have a reporter's question: Taiwan artiste liu geng hong living in Shanghai recently by the new media drive on both sides of the public fitness craze, how could view this phenomenon?
绿媒借机疯狂抹黑打压台湾艺人,对此如何看待?
Green medium to crazy discredit on Taiwan artists, how?
;
;
对此,马晓光表示,在当前疫情防控形势下,互联网、新媒体为两岸同胞相互了解、开展交流,提供了方便路径和新的平台。
The xiao-guang ma said that in the current epidemic situation, the Internet, new media exchanges and mutual understanding of the compatriots on both sides, provides a convenient path and the new platform.
你提到的这个现象就是最好的说明。
You mentioned that this phenomenon is the best explanation.
开展交流是基于血脉相连的亲情,也符合两岸同胞共同利益,越来越多的台湾同胞通过两岸交流合作,获得实实在在的好处。
Exchanges are based on the connected by affection, also conforms to the common interests of compatriots on both sides, more and more Taiwan compatriots through the cross-strait exchanges and cooperation, get real benefits.
大家可能也都注意到,凡是两岸同胞齐声喝采的,必然是**当局“骂”的、“**”势力“黑”的、绿媒“酸”的,这一点也不奇怪。
You may have noticed, all the compatriots on both sides of chorus cheers, is necessarily the democratic progressive party (DPP) authorities "scold", "Taiwan independence" forces "black", green medium "acid", this is not surprising.
相反,这只能说明两岸同胞走亲走近是民心所向、大势所趋,是任何人都阻挡不了的。
On the contrary, this only shows that the compatriots on both sides went close approach is a popular feeling, the trend of The Times, is anyone could not prevent.


原文本段落如下图所示,是三段, 但是翻译后每个句号又分行了, 怎样把按句号分的行接上? 即:一段中文接着一段翻译,而不是按句号分行断开

期待最后结果如下:
本人所发所有贴子或代码, 诸大侠若认为有改进之处,请不吝赐教,感激不尽!

TOP

这个API会以中文字符问号和句号分行出来翻译,只能先行替换掉
  1. cls
  2. $s = (gc abc.txt -enc UTF8 -raw) -split '\r\n' -join ';' -replace '。|?','.'
  3. (Invoke-RestMethod "http://fanyi.youdao.com/translate?&doctype=json&type='AUTO'&i=$s").translateResult[0] | Where-Object { $_.src -ne ';' } | foreach {
  4.     $_.src -replace ';$',''
  5.     $_.tgt -replace ';$',''
  6. }
复制代码
1

评分人数

    • 5i365: 技术牛X, 乐于分享!技术 + 1

TOP

本帖最后由 5i365 于 2022-4-28 08:09 编辑

回复 6# went


非常不错的示例, 上面一步一步的解决了问题, 大家可以渐进学习, 然后可以直接拿来使用了, 再次感谢
本人所发所有贴子或代码, 诸大侠若认为有改进之处,请不吝赐教,感激不尽!

TOP

回复 6# went

真是改进永无止境, 我把三段英文反译回中文, 又变成多行了, 我目前用的一个免费小工具qtranslate 用哪个翻译引擎都没有分行, 都是成段的
如果有更的方法解决互译换行问题就好了

测试链接文件
https://send.cm/a/45W

  
  1. cls #中译英
  2. $s = (gc cn.txt -enc UTF8 -raw) -split '\r\n' -join ';' -replace '。|?', '.'
  3. (Invoke-RestMethod "http://fanyi.youdao.com/translate?&doctype=json&type='AUTO'&i=$s").translateResult[0] | Where-Object { $_.src -ne ';' } | foreach {
  4.         $_.src -replace ';$', ''
  5.         $_.tgt -replace ';$', ''
  6. }
  7. cls #英译中
  8. $s = (gc en.txt -enc UTF8 -raw) -split '\r\n' -join ';' -replace '。|?', '.'
  9. (Invoke-RestMethod "http://fanyi.youdao.com/translate?&doctype=json&type='AUTO'&i=$s").translateResult[0] | Where-Object { $_.src -ne ';' } | foreach {
  10.         $_.src -replace ';$', ''
  11.         $_.tgt -replace ';$', ''
  12. }
复制代码
本人所发所有贴子或代码, 诸大侠若认为有改进之处,请不吝赐教,感激不尽!

TOP

返回列表