NER - 实体识别 - 国家过滤器
NER - Entity Recognition - Country Filter
我想从一个带有 spacy 的 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
最后,我想将地理相关实体(如果存在)写回新列中的用户行 "Location" csv
.
非常感谢您的帮助,谨致问候
请参阅 entity.label_
(带下划线)以查看实体标签的字符串版本,这可能会帮助您进行一些过滤。不过,默认的英语 NER 模型(在 web/newspaper 文本上训练)可能无法很好地处理这种文本,因为它对表情符号或其他一些 unicode 字符一无所知。
如前所述,您可以过滤 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_)
此处 link spacy NER 文档:https://spacy.io/usage/linguistic-features#named-entities
编辑
这是文档中英文 spacy 实体类型的完整列表:
- PERSON 人物,包括虚构人物。 NORP 国籍或宗教或政治团体。
- FAC 建筑物、机场、高速公路、桥梁等
- ORG 公司、机关、机构等
- GPE 国家、城市、州。
- LOC 非 GPE 位置、山脉、水域。
- PRODUCT 对象、车辆、食品等(不是服务。)
- EVENT 已命名的飓风、战斗、战争、体育赛事等
- WORK_OF_ART 书名、歌曲等
- LAW 命名文件制作
成法律。
- LANGUAGE 任何指定的语言。
- DATE 绝对或相对日期或期间。
- TIME 小于一天的时间。
- PERCENT 百分比,包括“%”。
- MONEY 货币价值,包括单位。
- QUANTITY 测量值,如重量或距离。
- 序数“第一”、“第二”等
- 不属于其他类型的基数。
我想从一个带有 spacy 的 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
最后,我想将地理相关实体(如果存在)写回新列中的用户行 "Location" csv
.
非常感谢您的帮助,谨致问候
请参阅 entity.label_
(带下划线)以查看实体标签的字符串版本,这可能会帮助您进行一些过滤。不过,默认的英语 NER 模型(在 web/newspaper 文本上训练)可能无法很好地处理这种文本,因为它对表情符号或其他一些 unicode 字符一无所知。
如前所述,您可以过滤 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_)
此处 link spacy NER 文档:https://spacy.io/usage/linguistic-features#named-entities
编辑
这是文档中英文 spacy 实体类型的完整列表:
- PERSON 人物,包括虚构人物。 NORP 国籍或宗教或政治团体。
- FAC 建筑物、机场、高速公路、桥梁等
- ORG 公司、机关、机构等
- GPE 国家、城市、州。
- LOC 非 GPE 位置、山脉、水域。
- PRODUCT 对象、车辆、食品等(不是服务。)
- EVENT 已命名的飓风、战斗、战争、体育赛事等
- WORK_OF_ART 书名、歌曲等
- LAW 命名文件制作 成法律。
- LANGUAGE 任何指定的语言。
- DATE 绝对或相对日期或期间。
- TIME 小于一天的时间。
- PERCENT 百分比,包括“%”。
- MONEY 货币价值,包括单位。
- QUANTITY 测量值,如重量或距离。
- 序数“第一”、“第二”等
- 不属于其他类型的基数。