NER - 实体识别 - 国家/地区筛选器



我想从空间大的Excel文件中提取地理相关信息。它可以提取所有实体,但我只需要地理数据,找不到过滤实体的方法。

import pandas as pd
import spacy
sp = spacy.load("en_core_web_sm")
df = pd.read_excel("test.xlsx", usecols=["Bio", "Author"])
df.head(1)
df=df.fillna('')
#df['Bio']
doc = df.values.tolist()
#print (doc)
#sp(', '.join(doc[0])).ents
for entry in doc:
#print('Current entryn {}'.format(entry))
for entity in sp(', '.join(entry)).ents:
print(entity.text, entity.label)

目前,输出如下所示:

Munich 384
Germany 384
Venezuela 384
London 384
Portrait | 9191306739292312949
📍 ℍ𝕠𝕟𝕘 𝕂𝕠𝕟𝕘 ​ 383
🇰 🌏 𝕋𝕣𝕒𝕧𝕖𝕝𝕝𝕖𝕣​ 394
Visited:🇬🇧🇬 383
🇸 384
🇹 392

最后,我想将地理相关实体(如果存在(写回csv中新列"位置">中的用户行。

我将非常感谢您的帮助,亲切的问候

如前所述,您可以筛选空间语言模型提供的"LOC"或"GPE"实体。但是,请注意,NER 语言模型需要具有句子 contex 才能预测位置实体。

sp = spacy.load("en_core_web_sm")
# loop over every row in the 'Bio' column
for text in df['Bio'].tolist():
# use spacy to extract the entities
doc = sp(text)
for ent in doc.ents:    
# check if entity is equal 'LOC' or 'GPE'
if ent.label_ in ['LOC', 'GPE']:
print(ent.text, ent.label_)   

这里是空间NER文档的链接:https://spacy.io/usage/linguistic-features#named-entities

编辑

以下是文档中英语空间实体类型的完整列表:

  • 人物 人,包括虚构的。 NORP国籍或宗教或政治团体。
  • FAC 建筑物、机场、高速公路、桥梁等
  • 奥瑞金公司、代理机构、机构等
  • GPE 国家、城市、州。
  • LOC 非 GPE 位置、山脉、水体。
  • 产品 物品、车辆、食品等(非服务。
  • 事件 命名飓风、战斗、战争、体育赛事等。
  • WORK_OF_ART 书籍、歌曲等的标题
  • 法律 制作命名文件 变成法律。
  • 语言
  • 任何命名语言。
  • 日期
  • 绝对或相对日期或期间。
  • 时间
  • 时间小于一天。
  • 百分比
  • 百分比,包括"%"。
  • 货币
  • 货币价值,包括单位。
  • 数量 测量值,如重量或距离。
  • 常规"第一"、"第二"等。
  • 不属于其他类型的基本数字。

来源: https://spacy.io/api/annotation#named-entities

请参阅entity.label_(带下划线(以查看实体标签的字符串版本,这可能有助于您进行一些筛选。但是,默认的英语NER模型(在Web/报纸文本上训练(在此类文本上可能表现不佳,因为它对表情符号或其他一些Unicode字符一无所知。

我会拉出NER标签并对其进行过滤。您可以使用以下内容获取标签:

entities=[]
for i, current_doc in enumerate(df['the_text_col']):
doc = spacy_model_name(current_doc)
for entity in doc.ents:
entities.append((entity.label_, df.index[i]))

在此之后,entities成为 df,添加一个索引,并根据需要重新加入具有 NER 信息的已处理 DF。从那里,您可以使用contains进行筛选,并仅获取具有所需标签的行。

最新更新