基于源域、目标域列词共现的隐喻识别代码如何实现
基于源域/目标域词汇共现的隐喻检测工具实现
实现逻辑
- 提前维护两个独立的词汇集合:源域词汇集、目标域词汇集,支持自定义新增或从表格批量导入
- 对输入的任意文本做分词和大小写统一处理,消除格式差异带来的匹配误差
- 判定规则:若文本中同时命中至少1个源域词汇 + 至少1个目标域词汇,即判定存在隐喻
代码实现(Python)
import re from typing import Tuple, List class MetaphorDetector: def __init__(self, source_domain_words: List[str], target_domain_words: List[str]): # 初始化时统一转小写,消除大小写匹配问题 self.source_set = set(word.lower() for word in source_domain_words) self.target_set = set(word.lower() for word in target_domain_words) def detect(self, text: str) -> Tuple[bool, List[str], List[str]]: # 把输入文本拆分为单词,去除标点符号 text_words = re.findall(r'\b\w+\b', text.lower()) # 匹配命中的源域、目标域词汇 hit_source = [word for word in text_words if word in self.source_set] hit_target = [word for word in text_words if word in self.target_set] # 按规则判定结果 has_metaphor = len(hit_source) >= 1 and len(hit_target) >= 1 return has_metaphor, hit_source, hit_target # 测试示例 if __name__ == "__main__": # 示例源域、目标域词汇,可根据实际需求替换为你自己的词汇表 source_words = ["broke", "cut", "burn", "melt", "freeze"] target_words = ["heart", "dream", "love", "hope", "ambition"] detector = MetaphorDetector(source_words, target_words) test_sentence = "she broke his heart" result, hit_s, hit_t = detector.detect(test_sentence) print(f"输入文本:{test_sentence}") print(f"是否存在隐喻:{result}") print(f"命中源域词汇:{hit_s}") print(f"命中目标域词汇:{hit_t}")
运行效果说明
运行上述测试代码后输出结果如下:
输入文本:she broke his heart 是否存在隐喻:True 命中源域词汇:['broke'] 命中目标域词汇:['heart']
完全符合需求中的判定规则。如果需要适配中文检测场景,只需把代码中的分词逻辑替换为jieba等中文分词工具即可。
内容的提问来源于stack exchange,提问作者Azza Abugharsa
相关产品推荐
相关产品推荐

