Я создал скрипт 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, скрывая конфиденциальную информацию клиентов.
Я попытался использовать такие варианты, как:
Применение для цикла в исходном фрейме данных - проверка Текст для именованных объектов, присутствующих в фрейме данных именованного объекта - маска именованного объекта с помощью #####.
Определение функции длямаскирование именованных объектов в тексте:
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' object has no attribute 'sub'", 'occurred at index 0')
Как мне извлечь и замаскировать именованные объекты в тексте. Любое улучшение этого кода высоко ценится!