基于SpaCy提取隐私政策含指定关键词完整句子的问题
问题原因
当前代码存在两个核心问题,导致输出不符合预期:
- 编写的匹配规则仅匹配
personal data短语,未覆盖目标需求中的personal information表述 - 匹配命中后仅截取规则覆盖的token片段,也就是只返回了命中的短语本身,没有返回短语所在的完整句子
修正实现
注意:你提前完成的分句工作已经把每条记录处理为独立完整句,不需要再通过Spacy的sents属性定位句子边界,相比在整段隐私政策中做匹配,运行效率更高。
直接调整匹配逻辑即可,完整可运行代码如下:
from spacy.matcher import Matcher def match_personal_info_sent(text): doc = nlp(text) matcher = Matcher(nlp.vocab) # 配置匹配规则,大小写不敏感,可按需增删规则 match_patterns = [ [{"LOWER": "personal"}, {"LOWER": "information"}], [{"LOWER": "personal"}, {"LOWER": "data"}] ] matcher.add("personal_info", match_patterns) matches = matcher(doc) # 命中规则则返回当前完整句子,未命中返回空值 return str(doc) if len(matches) > 0 else None # 应用函数到分句列 df2["matched_sent"] = df2["Sent"].apply(match_personal_info_sent) # 筛选得到所有包含目标表述的句子 result_df = df2.dropna(subset=["matched_sent"]).reset_index(drop=True)
优化提示
- 如果仅需要匹配
personal information表述,直接删除match_patterns里对应personal data的规则即可 - 如果需要匹配更多相关表述(比如
personal sensitive information、user personal data等),直接在match_patterns列表中新增对应的token匹配规则即可 - 如果你的分句结果存在重复,可在
result_df上调用drop_duplicates()方法做去重处理,避免重复句子输出
内容的提问来源于stack exchange,提问作者Adrian
相关产品推荐
相关产品推荐

