在文本文档中查找个人身份信息(PII)可能很有用,原因有几个,但我多次遇到的一个用例是帮助匿名化文本数据,以便:
- 与第三方共享数据
- 遵守GDPR等法规要求
- 用作机器学习和其他探索性分析的训练数据
- 你是Facebook,你终于想做正确的事情了(/S)
我将尝试自动化查找PII的过程,在本系列文章中,我们将探索一些流行的开源工具和技术,以便在我们自己的数据中识别不同类型的PII。
介绍spaCy
命名实体识别(NER)试图识别文本数据中有意义的单词,如人名、地点、日期等。有几个开源工具使用NER来帮助识别有意义的词,我们将在本文中重点介绍的一个非常受欢迎的项目叫做spaCy。
spaCy是一个用于自然语言处理的免费开源python库,具有NER功能,可以帮助我们识别人名、地点和其他潜在有用的信息。
Python示例
先决条件:
pip install -U pip setuptools wheel pip install -U spacy python -m spacy download en_core_web_sm
现在,让我们假设我们有一些非结构化文本,并想看看它是否包含任何PII:
import spacy text = "My secret agent name is John McClane from Boston, hope my identity remains anonymous." nlp = spacy.load("en_core_web_sm") doc = nlp(text) for entity in doc.ents: print(entity.label_ +": "+ entity.text)
让我们看看这个代码打印的内容:
PERSON: John McClane GPE: Boston
好极了我们已经检测到一个人和一个地点的名字(GPE=地缘政治实体,即国家、城市、州),现在我们可以选择对这些信息做些什么,也许在存储之前从文本中删除它,或者使用工业强度加密来保护我们特工的生命。
spaCy并不总是那么准确,让我们看看另一个spaCy做得不好的例子:
import spacy text = "The writings of Ludwig von Mises are more relevant now than ever before." nlp = spacy.load("en_core_web_sm") doc = nlp(text) for entity in doc.ents: print(entity.label_ +": "+ entity.text)
现在,上述结果并不是我们所希望的那样:
ORG: Ludwig von Mises
哦,不!它发现了我最喜欢的奥地利经济学家作为一个组织。公平地说,现在有一个名为路德维希·冯·米塞斯奥地利经济研究所或米塞斯研究所的组织,所以spaCy可能感到困惑,你会在现实世界的数据中看到这样的错误。
结论
因此,我们现在有了一种在文本中查找人名的方法,这并不完美,但spaCy将比大多数试图自己从头开始查找的人做得更好。实际上,它非常善于查找人名、国家、城市、州、公司等。
这是一个很好的起点,您可以(也应该)在此基础上进行构建,使您的流程对您自己的数据和域更加准确。
在接下来的文章中,我们将看到其他工具是如何执行的,以及它们可以帮助我们找到哪些其他类型的PII。
- 登录 发表评论