如何用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这类专属实体,无需额外规则。
- 通用NER模型:如
- NLTK预训练模型:精度略低,但轻量,能识别基础的
ORG和DATE实体,适合快速原型开发。
落地实现思路
预训练NER通常不会自带学位、GPA/百分比这类细分实体标签,所以需要结合正则匹配/规则引擎补充提取:
- 用预训练NER提取教育机构(
ORG)、毕业年份(DATE); - 用正则表达式匹配学位关键词(如英文的
Bachelor's、M.Tech,中文的学士学位、硕士研究生); - 用正则匹配成绩格式(如
\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
相关产品推荐
相关产品推荐

