NER-实体识别-国家/地区过滤器

时间:2019-12-13 09:04:12

标签: python entity spacy 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 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的新列“位置” 中,将与地理位置相关的实体(如果存在)写回到用户行。 >

非常感谢您的帮助,

2 个答案:

答案 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实体类型的完整列表:

  • PERSON人,包括虚构人物。 NORP国籍或宗教或政治团体。
  • FAC建筑物,机场,高速公路,桥梁等
  • ORG公司,代理机构,机构等
  • GPE国家,城市,州。
  • LOC非GPE位置,山脉,水域。
  • 产品对象,车辆,食品等(不是服务。)
  • 事件命名为飓风,战斗,战争,体育赛事等。
  • WORK_OF_ART书籍,歌曲等的标题
  • 法律文件具名文件 成为法律。
  • 语言任何命名的语言。
  • DATE绝对或相对日期或期间。
  • TIME时间小于一天。
  • PERCENT百分比,包括“%”。
  • 货币货币值,包括单位。
  • QUANTITY重量或距离的度量单位。
  • ORDINAL“第一”,“第二”等
  • CARDINAL不属于另一种类型的数字。

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