我想从空间大的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
进行筛选,并仅获取具有所需标签的行。