精品技术论坛

精品技术论坛 (https://bbs.et8.net/bbs/index.php)
-   『软件使用』 (https://bbs.et8.net/bbs/forumdisplay.php?f=17)
-   -   【求助】请会Java的同学帮忙看一段代码 (https://bbs.et8.net/bbs/showthread.php?t=1396388)

samson1688 2021-09-22 20:55:57

【求助】请会Java的同学帮忙看一段代码
 
想实现一个对网页进行翻译的功能,

即对网页源码中的<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 2021-09-22 22:30:47

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

CCDebuger 2021-09-22 23:39:56

用个本地化工具如 Passolo 就可以直接翻译这类文本。

muziling 2021-09-23 09:46:28

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

浪人 2021-09-23 10:59:58

建议直接用 jsoup 解析出文本,强撸正则太麻烦,还容易漏。

samson1688 2021-10-09 22:47:55

引用:

作者: muziling (文章 17817204)
有个处理html的开源java库来着,jsoup好像,用这个可以得到不带html标签的文本

不太明白,
请问得到不带html标签的文本之后怎么处理?
我想要将<code>里的内容不翻译。

samson1688 2021-10-09 23:09:35

1 个附件
引用:

作者: kidli (文章 17817014)
不会乱,matcher.group(1)、matcher.group(4) 是标签,如 <title>、</title>

@kidli

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

谢谢。

我想要实现的是下面这样的效果:

kidli 2021-10-10 16:02:45

引用:

作者: samson1688 (文章 17826337)
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 2021-10-10 16:06:43

引用:

作者: samson1688 (文章 17826337)
我想要实现的是下面这样的效果:

BTW:你要的这个效果没看懂啊,不知道要怎么处理

samson1688 2021-10-10 18:48:41

1 个附件
引用:

作者: kidli (文章 17826661)
BTW:你要的这个效果没看懂啊,不知道要怎么处理

@kidli

可能我没说明白。

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

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

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

左边网页的地址: 这里

kidli 2021-10-10 21:03:53

[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 2021-10-11 12:36:01

引用:

作者: kidli (文章 17826819)
如果还是用顶楼的方案,那就把 transferCn 那行改一下:
代码:

sb.append(matcher.group(4).equalsIgnoreCase("</code>") ? transWord : transferCn(transWord));

谢谢。,,,46


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

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

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