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

如何用Python NLP提取教育信息?无需自定义NER可行吗?

无需自定义NER模型提取教育信息的实现方案

完全可以不用训练自定义NER模型实现这类需求,结合预训练NER模型+规则/正则匹配就能搞定,以下是具体方案:

可用的预训练NER模型

  • spaCy预训练模型:推荐使用en_core_web_trf(Transformer架构,精度更高),它能直接识别ORG(对应教育机构)、DATE(对应毕业年份)两类实体;中文场景可用zh_core_web_trf。
  • Hugging Face Transformers预训练模型:
    • 通用NER模型:如bert-base-uncased-finetuned-conll03-english,支持识别ORG、DATE;中文可用bert-base-chinese-finetuned-ner。
    • 领域专用模型:部分在简历/教育数据集上微调的BERT模型(如HF Hub中标记为resume/education的模型),可直接识别学位、GPA这类专属实体,无需额外规则。
  • NLTK预训练模型:精度略低,但轻量,能识别基础的ORG和DATE实体,适合快速原型开发。

落地实现思路

预训练NER通常不会自带学位、GPA/百分比这类细分实体标签,所以需要结合正则匹配/规则引擎补充提取:

  1. 用预训练NER提取教育机构(ORG)、毕业年份(DATE);
  2. 用正则表达式匹配学位关键词(如英文的Bachelor's、M.Tech,中文的学士学位、硕士研究生);
  3. 用正则匹配成绩格式(如\d+\.\d+ CGPA、\d+%、3.7/4.0)。

示例代码(英文场景)

import spacy
from spacy.matcher import Matcher

# 加载Transformer预训练模型
nlp = spacy.load("en_core_web_trf")
matcher = Matcher(nlp.vocab)

# 定义学位匹配规则
degree_patterns = [
    [{"LOWER": {"in": ["bachelor", "bsc", "btech", "ba", "master", "msc", "mtech", "ma"]}}],
    [{"LOWER": "bachelor's"}, {"LOWER": "degree"}],
    [{"LOWER": "master's"}, {"LOWER": "degree"}]
]
# 定义成绩匹配规则
score_patterns = [
    [{"TEXT": {"regex": r"\d+\.\d+"}}, {"LOWER": {"in": ["cgpa", "gpa"]}}],
    [{"TEXT": {"regex": r"\d+%"}}],
    [{"TEXT": {"regex": r"\d+\.\d+/\d+\.\d+"}}]  # 匹配如3.8/4.0格式
]

matcher.add("DEGREE", degree_patterns)
matcher.add("SCORE", score_patterns)

# 测试文本
input_text = "I completed my Master's degree in Computer Science from MIT in 2021, with a 3.9 CGPA and 92% aggregate score."
doc = nlp(input_text)

# 提取预训练NER识别的实体
education_institutions = [ent.text for ent in doc.ents if ent.label_ == "ORG"]
graduation_years = [ent.text for ent in doc.ents if ent.label_ == "DATE"]

# 用Matcher提取学位和成绩
degrees = []
scores = []
for match_id, start, end in matcher(doc):
    span = doc[start:end]
    if nlp.vocab.strings[match_id] == "DEGREE":
        degrees.append(span.text.strip())
    elif nlp.vocab.strings[match_id] == "SCORE":
        scores.append(span.text.strip())

# 结构化输出
structured_result = {
    "教育机构": education_institutions,
    "学位": degrees,
    "毕业年份": graduation_years,
    "成绩": scores
}

print(structured_result)

中文场景适配

如果处理中文文本,只需替换模型为zh_core_web_trf,并调整正则/规则为中文关键词:

  • 学位规则:匹配学士学位、硕士学位、本科、研究生、计算机科学与技术专业等;
  • 成绩规则:匹配3.8 CGPA、90%、专业排名前5%等。

内容的提问来源于stack exchange,提问作者Aditya Bhattacharya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 15:55:33