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) # 输出: 测试文本含有一些中文
提取出中文,然后翻译后,放回原来的位置
- 从原文本中提取中文
- 翻译中文部分
- 将翻译结果替换回原来的位置
这种需求可以用占位符的方式来处理,防止替换时错位
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)