给一篇字数不确定的英文做机翻

2022-07-28,,

项目场景:

给一篇英文文章做机翻,字数不确定,调用谷歌翻译,但限制字符不超过5000


问题描述:

因为是英文,不能按照字符刚好是5000时卡住,只翻译前5000个字符,这样有可能将一个单词或短语给拆分,翻译结果有误


解决方案:

将英文文章按段落‘\n’切分,再一段一段进行拼接,如果拼接到某一段落时超出字符限制,将那一段落算到下一次翻译原文中

代码如下:

def split_long(web_text, limit=4800):
    '''
    用于长字符串按指定限制长度进行分割
    如果未指定长度,则按4800分割,用于调用谷歌翻译接口

    调用方法:使用循环调用

        strings = split_long(web_text, limit=4800)

        1、 for 循环
        for s in strings:
            print(s)

        2、while 循环
        while True:
            try:
                s = next(strings)
                # s = strings.__next__()
                print(s)
            except StopIteration:
                break

    :param web_text: 网页文本的长度
    :param limit: 限定的长度,默认为4800
    :return:
    '''

    # 通过 \n 构建网页字符串的分段列表 source
    source = web_text.split('\n')

    f = ""  # 初始化空字符串 f
    while len(source) > 0:  # 循环条件,当分段列表 source 变为空的时候停止循环

        # 取出列表中的第一个元素赋值给 a
        a = source.pop(0)

        # 拼接字符串 f 并将其赋值给 f1
        f1 = f + a + "\n"
        if len(f1) > limit:  # 当 f1 的长度大于限定长度时

            # 长度大于限定长度则将 a 还给分段列表 source, 用于下次的重新取出
            source.insert(0, a)

            # 将最大限度拼接好的字符串 f 返回出去
            yield f

            f = ""  # 重新初始化字符串 f 为空字符串,用于下次的拼接

        else:  # 否则 字符串 f 的值为 拼接好的 f1 的值,继续进行拼接
            f = f1

    # 当循环停止后,返回最后拼接的字符串 f
    yield f

调用后的结果是个迭代器,所以循环打印或机翻即可

代码如下:

for i in split_long(detail):
    print(len(i))
    # 调用机翻
    # Googletrans(i)

 

 

 

本文地址:https://blog.csdn.net/yl_1995/article/details/109613196

《给一篇字数不确定的英文做机翻.doc》

下载本文的Word格式文档,以方便收藏与打印。