. : : ClassiClub ForuM : : .

会员中心 论坛帮助 日历事件 标记论坛已读
返回   精品技术论坛 » 技术论坛 » 『软件使用』

『软件使用』: 电脑软件推荐, 电脑软件使用, 经验分享



发表新主题 回复
 
主题工具
samson1688
 
samson1688 的头像
热心会员
 
资 料:
注册日期: Jan 2002
帖子: 5,433 声望值: 1
精华: 0,解答: 3
#1 旧 2021-09-22, 20:55:57 默认 【求助】请会Java的同学帮忙看一段代码
samson1688 当前离线  

想实现一个对网页进行翻译的功能,

即对网页源码中的<img><quote><P>....等这样的html标签不翻译,但是对网页中的文字进行翻译,

比如:
<title>this is a apple</title> 翻译后的效果变成:<title>这是一个苹果</title>
<p>this is a paragraphp</p> 翻译后的效果变成: <p>这是一段话</p>

我在这篇文章(https://blog.csdn.net/csy_csy1/article/details/90477466)
看到用java实现,可我不懂java,麻烦帮忙看一下,这个可以实现这个效果么?

我的疑问是它这样正则匹配出来,然后再翻译,再放回去,
原来网页的文字不全乱了么?

谢谢。


代码如下:

首先通过java正则表达式处理
代码:
private static Pattern descripitonPattern = Pattern.compile("(([<|</][^>]+>)?)([^>|<]+)?(([<|/][^>]+>)+)");
该表达式对html源码进行匹配获取group,其中group(3)获取到html标签中的内容,然后进行翻译获取对应的中文。在进行组合生成对应的翻译后的文件。

代码:
StringBuffer sb = new StringBuffer();
Matcher matcher = descripitonPattern.matcher(inputString);

    while (matcher.find()) {
        //                sb.append(matcher.group(0));
        sb.append(matcher.group(1));
        String transWord = matcher.group(3);
        if (!StringUtil.isEmpty(transWord)) {
            transWord = transWord.trim();
            try {
                sb.append(transferCn(transWord));
            } catch (Exception e) {
                System.out.println("transWord = " + transWord);
                break;
            }
        }
        sb.append(matcher.group(4));

    }


    return sb.toString();// 返回文本字符串
回复时引用此帖
kidli
 
kidli 的头像
热心会员
 
资 料:
注册日期: Jun 2001
帖子: 1,823 声望值: 4
精华: 1,解答: 11
#2 旧 2021-09-22, 22:30:47 默认
kidli 当前离线  

不会乱,matcher.group(1)、matcher.group(4) 是标签,如 <title>、</title>


当一个人专心致志地准备为别人牺牲时,却被对方断然拒绝!
贾里觉得这个结局实在太残酷了!
回复时引用此帖
CCDebuger
 
CCDebuger 的头像
中级会员
 
资 料:
注册日期: Sep 2006
帖子: 280 声望值: 3
精华: 4,解答: 14
#3 旧 2021-09-22, 23:39:56 默认
CCDebuger 当前离线  

用个本地化工具如 Passolo 就可以直接翻译这类文本。
回复时引用此帖
muziling
 
muziling 的头像
核心会员
 
资 料:
注册日期: Oct 2009
帖子: 2,191 声望值: 4
精华: 6,解答: 13
#4 旧 2021-09-23, 09:46:28 默认
muziling 当前离线  

有个处理html的开源java库来着,jsoup好像,用这个可以得到不带html标签的文本


^_^
回复时引用此帖
浪人
 
浪人 的头像
普通会员
 
资 料:
注册日期: Jun 2002
帖子: 126 声望值: 3
精华: 0,解答: 1
#5 旧 2021-09-23, 10:59:58 默认
浪人 当前离线  

建议直接用 jsoup 解析出文本,强撸正则太麻烦,还容易漏。
回复时引用此帖
samson1688
 
samson1688 的头像
热心会员
 
资 料:
注册日期: Jan 2002
帖子: 5,433 声望值: 1
精华: 0,解答: 3
#6 旧 2021-10-09, 22:47:55 默认
samson1688 当前离线  

引用:
作者: muziling 查看帖子
有个处理html的开源java库来着,jsoup好像,用这个可以得到不带html标签的文本
不太明白,
请问得到不带html标签的文本之后怎么处理?
我想要将<code>里的内容不翻译。
回复时引用此帖
samson1688
 
samson1688 的头像
热心会员
 
资 料:
注册日期: Jan 2002
帖子: 5,433 声望值: 1
精华: 0,解答: 3
#7 旧 2021-10-09, 23:09:35 默认
samson1688 当前离线  

引用:
作者: kidli 查看帖子
不会乱,matcher.group(1)、matcher.group(4) 是标签,如 <title>、</title>
@kidli

请问一下它先append了transWord(就是那些要翻译的内容。
再append matcher.group(4)是什么意思,你说matcher.group(4) 是标签?
那是先将翻译的内容添加进去,再添加标签?

谢谢。

我想要实现的是下面这样的效果:
上传的图像
文件类型: jpg Snap13333520.jpg (60.1 KB, 105 次查看)

此帖于 2021-10-10 11:17:42 被 samson1688 编辑. .
回复时引用此帖
kidli
 
kidli 的头像
热心会员
 
资 料:
注册日期: Jun 2001
帖子: 1,823 声望值: 4
精华: 1,解答: 11
#8 旧 2021-10-10, 16:02:45 默认
kidli 当前离线  

引用:
作者: samson1688 查看帖子
kidli

请问一下它先append了transWord(就是那些要翻译的内容。
再append matcher.group(4)是什么意思,你说matcher.group(4) 是标签?
那是先将翻译的内容添加进去,再添加标签?

谢谢。

我想要实现的是下面这样的效果:
主要就是分析那个正则表达式,讲起来比较复杂了。
我之前没细看,描述有些错误,所以把 matcher.group(N) 打出来,你看下规律。
其中 0 表示就是这一次匹配出来的部分。
如果用 java 处理的话,用 jsoup 比较方便,可以把整个 dom 都解析出来,并且相对这种正则有较好的容错性。
代码:
0= <title>
1=
3= 
4=<title>

0=this is a apple</title>
1=
3=this is a apple
4=</title>

0= 翻译后的效果变成:<title>
1=
3= 翻译后的效果变成:
4=<title>

0=这是一个苹果</title>
1=
3=这是一个苹果
4=</title>

0=
<p>
1=
3=

4=<p>

0=this is a paragraphp</p>
1=
3=this is a paragraphp
4=</p>

0= 翻译后的效果变成: <p>
1=
3= 翻译后的效果变成: 
4=<p>

0=这是一段话</p>
1=
3=这是一段话
4=</p>
回复时引用此帖
kidli
 
kidli 的头像
热心会员
 
资 料:
注册日期: Jun 2001
帖子: 1,823 声望值: 4
精华: 1,解答: 11
#9 旧 2021-10-10, 16:06:43 默认
kidli 当前离线  

引用:
作者: samson1688 查看帖子
我想要实现的是下面这样的效果:
BTW:你要的这个效果没看懂啊,不知道要怎么处理
回复时引用此帖
samson1688
 
samson1688 的头像
热心会员
 
资 料:
注册日期: Jan 2002
帖子: 5,433 声望值: 1
精华: 0,解答: 3
#10 旧 2021-10-10, 18:48:41 默认
samson1688 当前离线  

引用:
作者: kidli 查看帖子
BTW:你要的这个效果没看懂啊,不知道要怎么处理
@kidli

可能我没说明白。

我要的效果就是下面这样的。

将左边的网页翻译成右边的网页,右边就是我想要的效果。

就是对网页中的内容进行翻译,但是其中的<code></code>里面的代码保留原样,不翻译。

左边网页的地址: 这里
上传的图像
文件类型: png Snap13333524.png (82.9 KB, 70 次查看)

此帖于 2021-10-10 18:54:45 被 samson1688 编辑. .
回复时引用此帖
kidli
 
kidli 的头像
热心会员
 
资 料:
注册日期: Jun 2001
帖子: 1,823 声望值: 4
精华: 1,解答: 11
#11 旧 2021-10-10, 21:03:53 默认
kidli 当前离线  

[QUOTE=samson1688;17826762]
可能我没说明白。我要的效果就是下面这样的。将左边的网页翻译成右边的网页,右边就是我想要的效果。就是对网页中的内容进行翻译,但是其中的<code></code>里面的代码保留原样,不翻译。左边网页的地址: [URL="https://stackoverflow.com/questions/40652171/p...[/QUOTE]

如果还是用顶楼的方案,那就把 transferCn 那行改一下:
代码:
sb.append(matcher.group(4).equalsIgnoreCase("</code>") ? transWord : transferCn(transWord));
回复时引用此帖
samson1688
 
samson1688 的头像
热心会员
 
资 料:
注册日期: Jan 2002
帖子: 5,433 声望值: 1
精华: 0,解答: 3
#12 旧 2021-10-11, 12:36:01 默认
samson1688 当前离线  

引用:
作者: kidli 查看帖子
如果还是用顶楼的方案,那就把 transferCn 那行改一下:
代码:
sb.append(matcher.group(4).equalsIgnoreCase("</code>") ? transWord : transferCn(transWord));
谢谢。
回复时引用此帖
发表新主题 回复

主题工具

论坛规则  发帖规则
不可以发表主题
不可以回复帖子
不可以上传附件
不可以编辑自己的帖子
论坛启用 vB 代码
版面启用 表情符号
版面启用 [IMG] 代码
版面禁用 HTML 代码


所有时间均为北京时间, 现在的时间是 03:59:45.

本论坛带宽由迅通网络提供
SSL证书由TrustAsia提供

Copyright © 2000 - 2019 ClassiClub Forum All Rights Reserved.
粤ICP备09123456号