python提取中文段落

python提取中文段落

python提取段落中的中文汉字

import re

def extract_chinese_text(content):
    return ''.join(re.findall(r'[\u4e00-\u9fff]+', content))

# 示例
text = '''This is 测试文本, 含有一些中文 characters.'''
chinese_str = extract_chinese_text(text)
print(chinese_str)  # 输出: 测试文本含有一些中文

提取出中文,然后翻译后,放回原来的位置

  1. 从原文本中提取中文
  2. 翻译中文部分
  3. 将翻译结果替换回原来的位置

这种需求可以用占位符的方式来处理,防止替换时错位

import re

def extract_and_replace_chinese(content, translate_func):
    # 1. 找出所有中文片段
    chinese_parts = re.findall(r'[\u4e00-\u9fff]+', content)
    
    # 2. 翻译中文部分(这里用 translate_func 模拟翻译)
    translations = [translate_func(part) for part in chinese_parts]
    
    # 3. 用占位符替换原文中的中文
    placeholder_text = content
    for i, part in enumerate(chinese_parts):
        placeholder_text = placeholder_text.replace(part, f"{{{{CHN_{i}}}}}", 1)
    
    # 4. 把翻译好的英文放回占位符位置
    for i, translated in enumerate(translations):
        placeholder_text = placeholder_text.replace(f"{{{{CHN_{i}}}}}", translated, 1)
    
    return placeholder_text


# 示例翻译函数(真实情况可替换成你的 translate_with_local_model)
def mock_translate(chinese_text):
    return f"[EN:{chinese_text}]"

# 测试
text = '''This is 测试文本, 含有一些中文 characters.'''
result = extract_and_replace_chinese(text, mock_translate)
print(result)

如果出现提取出中文过短的情况,智能体不一定能正常翻译,应该接入翻译词典更好

完整代码

qwen2.5-14b-instruct

import re
from time import sleep

import requests
# 配置参数
CONFIG = {
    'max_workers': 14,  # 6大核+8小核=14物理核心
    'paragraph_workers': 3,  # 每篇文章的分段翻译线程数
    'commit_every': 1,  # 每翻译2篇提交一次
    'source_db': 'app.db',
    'target_db': 'app_en.db',
    'timeout': 300
}

def extract_and_replace_chinese(content, translate_func):
    # 1. 找出所有中文片段
    chinese_parts = re.findall(r'[\u4e00-\u9fff]+', content)

    # 2. 翻译中文部分(这里用 translate_func 模拟翻译)
    translations = [translate_func(part) for part in chinese_parts]

    # 3. 用占位符替换原文中的中文
    placeholder_text = content
    for i, part in enumerate(chinese_parts):
        placeholder_text = placeholder_text.replace(part, f"{{{{CHN_{i}}}}}", 1)

    # 4. 把翻译好的英文放回占位符位置
    for i, translated in enumerate(translations):
        placeholder_text = placeholder_text.replace(f"{{{{CHN_{i}}}}}", translated, 1)

    return placeholder_text


# 示例翻译函数(真实情况可替换成你的 translate_with_local_model)
def translate_with_local_model(content_zh, max_retries=3):
    """优化的本地模型翻译函数"""
    url = "http://localhost:1234/v1/chat/completions"
    headers = {'Content-Type': 'application/json'}

    payload = {
        "model": "qwen2.5-14b-instruct",
        "messages": [{
            "role": "user",
            "content": f"请准确翻译以下内容到英文(不要解释只输出译文):\n{content_zh}"
        }],
        "temperature": 0.2,
        "max_tokens": 4096
    }

    for attempt in range(max_retries):
        try:
            response = requests.post(
                url,
                headers=headers,
                json=payload,
                timeout=CONFIG['timeout']
            )

            if response.status_code == 200:
                result = response.json()
                if 'choices' in result and result['choices']:
                    translated = result['choices'][0]['message']['content'].strip()
                    # 清理常见前缀
                    for prefix in ['English:', 'Translation:', '译文:']:
                        if translated.startswith(prefix):
                            translated = translated[len(prefix):].strip()
                    return translated
            elif attempt < max_retries - 1:
                sleep(5 * (attempt + 1))
                continue
        except Exception:
            if attempt < max_retries - 1:
                sleep(5 * (attempt + 1))
                continue

    return content_zh  # 保底返回原文


# 测试
text = '''This is 测试文本, 含有一些中文 characters.'''
en_content = extract_and_replace_chinese(text, translate_with_local_model)
print(en_content)