gpt4 book ai didi

Python:屏蔽电子邮件文本中的命名实体

转载 作者:行者123 更新时间:2023-12-02 03:20:02 25 4
gpt4 key购买 nike

我创建了一个 python 脚本来提取命名实体,如下所示:

# set java path
java_path = r'C:/Program Files/Java/jre1.8.0_161/bin/java.exe'

os.environ['JAVAHOME'] = java_path

# initialize NER tagger
sn = StanfordNERTagger('C:/Users/Parag/Documents/stanford-ner-2018-10-16/stanford-ner-2018-10-16/classifiers/english.all.3class.distsim.crf.ser.gz',
path_to_jar='C:/Users/Parag/Documents/stanford-ner-2018-10-16/stanford-ner-2018-10-16/stanford-ner.jar')

# tag named entities
ner_tagged_sentences = [sn.tag(sent.split()) for sent in dataset_unseen['Text']]
dataset_unseen['Text'] = dataset_unseen.apply(Detectner,axis=1)
# extract all named entities
named_entities = []

for sentence in ner_tagged_sentences:
temp_entity_name = ''
temp_named_entity = None

for term, tag in sentence:
if tag != 'O':
temp_entity_name = ' '.join([temp_entity_name, term]).strip()
temp_named_entity = (temp_entity_name, tag)

else:
if temp_named_entity:
named_entities.append(temp_named_entity)
temp_entity_name = ''
temp_named_entity = None
entity_frame = pd.DataFrame(named_entities, columns=['Entity Name', 'Entity Type'])
entity_frame.head()

** 输出 **

 Entity Name      Entity Type       Frequency

ABC Farms ORGANIZATION 5

Freddy Hill Lane ORGANIZATION 3

North Lane Thames ORGANIZATION 2

现在,我想使用“######”之类的模式来屏蔽这些命名实体,以通过隐藏客户敏感信息来遵循 GDPR 法规。

我尝试过以下选项:

  1. 在原始数据帧上应用 for 循环 - 检查命名实体数据框中存在的命名实体的文本 - 使用“#####”屏蔽命名实体。

  2. 定义一个函数来屏蔽文本中的命名实体:

def Detectner(row):
ner_tagged_sentences = [sn.tag(sent.split()) for sent in row['Text']]
results = ner_tagged_sentences.sub('**********',row['Text'])
return results

dataset_unseen['Text'] = dataset_unseen.apply(Detectner,axis=1)

但我收到以下错误:

AttributeError: ("'list' 对象没有属性 'sub'", '发生在索引 0')

如何提取和屏蔽文本中的命名实体。对此代码的任何改进都受到高度赞赏!

最佳答案

当您制作标记句子时,您正在该行中创建一个列表

ner_tagged_sentences = [sn.tag(sent.split()) for sent in row['Text']]

ner_tagged_sentencestypelist,没有 sub 方法。

您可以尝试多种方法来实现使文档匿名的目标:

  1. 将非 O 标记的标记替换为某些内容(标记级别)
  2. 直接替换文档中的命名实体文本(字符串级别)

您似乎正在尝试执行第 (2) 项

关于Python:屏蔽电子邮件文本中的命名实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58499362/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com