Я использую следующий код для извлечения именованных сущностей с помощью лямбды.

df['Place'] = df['Text'].apply(lambda x: [entity.text for entity in nlp(x).ents if entity.label_ == 'GPE'])

и

df['Text'].apply(lambda x: ([entity.text for entity in nlp(x).ents if entity.label_ == 'GPE'] or [''])[0])

Для нескольких сотен записей он может извлечь результаты. Но когда дело доходит до тысяч записей. Это занимает практически вечность. Может ли кто-нибудь помочь мне оптимизировать эту строку кода?

Ответы (1)

Вы можете улучшить ситуацию следующим образом:

  1. Вызов nlp.pipe для всего списка документов
  2. Отключение ненужных труб.

Попробуйте:

import spacy
nlp = spacy.load("en_core_web_md", disable = ["tagger","parser"])

df = pd.DataFrame({"Text":["this is a text about Germany","this is another about Trump"]})

texts = df["Text"].to_list()
ents = []
for doc in nlp.pipe(texts):
    for ent in doc.ents:
        if ent.label_ == "GPE":
            ents.append(ent)
            
print(ents)

[Germany]

2022 WebDevInsider