You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python实现语境化多义单词翻译及发音显示?

多义词语境翻译+发音显示的Python实现方案

googletrans本身不支持词义消歧(WSD),也无法返回单词音标,要满足你的需求,需要结合词义消歧工具、发音处理库和翻译工具来实现。以下是具体的代码方案:

步骤1:安装依赖库

首先安装所需的Python库:

pip install nltk googletrans==4.0.0-rc1

然后在Python环境中下载NLTK所需的语料库(仅需执行一次):

import nltk
nltk.download(['wordnet', 'averaged_perceptron_tagger', 'punkt', 'cmudict'])

步骤2:完整实现代码

from nltk.corpus import wordnet, cmudict
from nltk.wsd import lesk
from nltk.tokenize import word_tokenize
from nltk.tag import pos_tag
from googletrans import Translator

# 初始化翻译器和CMU音标字典
translator = Translator()
cmu_dict = cmudict.dict()

def get_ipa_pronunciation(word):
    """将CMU音标转换为国际音标(美式)"""
    word_lower = word.lower()
    if word_lower not in cmu_dict:
        return "发音未找到"
    
    # CMU音标到国际音标的映射表
    phoneme_map = {
        'AH0': 'ə', 'AH1': 'ʌ', 'AH2': 'ʌ',
        'AE0': 'æ', 'AE1': 'æ', 'AE2': 'æ',
        'EY0': 'eɪ', 'EY1': 'eɪ', 'EY2': 'eɪ',
        'IH0': 'ɪ', 'IH1': 'ɪ', 'IH2': 'ɪ',
        'IY0': 'iː', 'IY1': 'iː', 'IY2': 'iː',
        'AA0': 'ɑː', 'AA1': 'ɑː', 'AA2': 'ɑː',
        'AO0': 'ɔː', 'AO1': 'ɔː', 'AO2': 'ɔː',
        'OW0': 'oʊ', 'OW1': 'oʊ', 'OW2': 'oʊ',
        'UH0': 'ʊ', 'UH1': 'ʊ', 'UH2': 'ʊ',
        'UW0': 'uː', 'UW1': 'uː', 'UW2': 'uː',
        'B': 'b', 'CH': 'tʃ', 'D': 'd', 'DH': 'ð',
        'F': 'f', 'G': 'ɡ', 'HH': 'h', 'JH': 'dʒ',
        'K': 'k', 'L': 'l', 'M': 'm', 'N': 'n',
        'NG': 'ŋ', 'P': 'p', 'R': 'r', 'S': 's',
        'SH': 'ʃ', 'T': 't', 'TH': 'θ', 'V': 'v',
        'W': 'w', 'Y': 'j', 'Z': 'z', 'ZH': 'ʒ'
    }
    
    cmu_pron = cmu_dict[word_lower][0]
    ipa_chars = []
    for phoneme in cmu_pron:
        # 移除重音数字
        clean_phoneme = phoneme[:-1] if phoneme[-1].isdigit() else phoneme
        ipa_chars.append(phoneme_map.get(clean_phoneme, clean_phoneme))
    
    return f"/{' '.join(ipa_chars).replace(' ', '')}/"

def translate_word_with_context(sentence, target_word, target_lang='fa'):
    """结合语境翻译单词,返回发音、词义和波斯语翻译"""
    # 分词并标注词性
    tokens = word_tokenize(sentence)
    tagged_tokens = pos_tag(tokens)
    
    # 匹配WordNet的词性标记
    pos_mapping = {'N': wordnet.NOUN, 'V': wordnet.VERB, 'J': wordnet.ADJ, 'R': wordnet.ADV}
    target_pos = None
    for token, tag in tagged_tokens:
        if token.lower() == target_word.lower():
            target_pos = pos_mapping.get(tag[0], None)
            break
    
    # 使用Lesk算法进行词义消歧
    target_synset = lesk(tokens, target_word, pos=target_pos)
    if not target_synset:
        # 消歧失败时返回默认翻译
        default_trans = translator.translate(target_word, dest=target_lang).text
        return f"{target_word} {get_ipa_pronunciation(target_word)} - 默认翻译:{default_trans}"
    
    # 获取义项定义和翻译
    eng_definition = target_synset.definition()
    fa_definition = translator.translate(eng_definition, dest=target_lang).text
    # 获取对应义项的单词翻译
    lemma_word = target_synset.lemma_names()[0]
    fa_translation = translator.translate(lemma_word, dest=target_lang).text
    
    return (f"{target_word} {get_ipa_pronunciation(target_word)} - "
            f"词义:{eng_definition}(波斯语:{fa_definition});翻译:{fa_translation}")

步骤3:测试代码

# 测试"季节"语境
sentence1 = "My favorite season is winter."
print(translate_word_with_context(sentence1, "season"))

# 测试"调味"语境
sentence2 = "The recipe says to season the dish with plenty of salt."
print(translate_word_with_context(sentence2, "season"))

预期输出

season /ˈsiːzən/ - 词义:one of the natural periods into which the year is divided by the equinoxes and solstices or atmospheric conditions(波斯语:یکی از دوره‌های طبیعی که سال توسط تقاطعانی و سستیس یا شرایط اتمسفری تقسیم می‌شود);翻译:فصل
season /ˈsiːzən/ - 词义:lend flavor to(波斯语:طعم دادن به);翻译:طعم دادن

注意事项

  • Lesk算法的词义消歧准确率并非100%,如果需要更高精度,可以考虑使用基于BERT的WSD模型(如transformers库中的预训练模型),但本地运行资源消耗会更高。
  • 音标转换为简化映射,若需要更精准的国际音标,可考虑使用专门的音标处理库或付费词典API。
  • googletrans的稳定性受网络影响,若频繁出错,可替换为translatepy等更稳定的翻译库,或使用谷歌翻译官方API。

内容的提问来源于stack exchange,提问作者Abbas Taheri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 05:35:08