我想从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 entry\n {}'.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
的新列“位置” 中,将与地理位置相关的实体(如果存在)写回到用户行。 >
非常感谢您的帮助,
答案 0 :(得分:0)
请参阅entity.label_
(带下划线)以查看实体标签的字符串版本,这可能会帮助您进行一些过滤。不过,默认的英语NER模型(受网络/报纸文本训练)在这种文本上可能效果不佳,因为它实际上对表情符号或某些其他Unicode字符一无所知。
答案 1 :(得分:0)
如前所述,您可以过滤spacy语言模型提供的“ LOC”或“ GPE”实体。但是,请注意,NER语言模型需要具有一个句子顶点才能预测位置实体。
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_)
这里有spacy NER文档的链接:https://spacy.io/usage/linguistic-features#named-entities
编辑
以下是文档中英语spacy实体类型的完整列表: