【问题标题】:NER - Entity Recognition - Country FilterNER - 实体识别 - 国家过滤器
【发布时间】:2019-12-13 09:04:12
【问题描述】:

我想从一个带有空格的 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 的新列“位置”中将地理相关实体(如果存在)写回用户行。

非常感谢您的帮助,诚挚的问候

【问题讨论】:

    标签: python entity spacy named-entity-recognition


    【解决方案1】:

    如前所述,您可以过滤 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 地点、山脉、水体。
    • PRODUCT 对象、车辆、食品等(不是服务。)
    • 事件命名为飓风、战斗、战争、体育赛事等。
    • WORK_OF_ART 书籍、歌曲等的标题。
    • 制作的法律指定文件 成法律。
    • LANGUAGE 任何命名的语言。
    • DATE 绝对或相对日期或期间。
    • TIME 小于一天的时间。
    • PERCENT 百分比,包括“%”。
    • MONEY 货币价值,包括单位。
    • QUANTITY 测量值,如重量或距离。
    • 序数“第一”、“第二”等。
    • CARDINAL 不属于其他类型的数字。

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

    【讨论】:

    • 谢谢,我使用 GPE 而不是 LOC,这解决了...给出了句子上下文 - 至少有点:-)
    • 对了,“GPE”更合适;来自文档:GPE = 国家、城市、州、LOC = 非 GPE 位置、山脉、水体。我更新了我的答案。
    • 请采纳答案,如果解决了您的问题,谢谢
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2017-06-19
      • 2012-04-20
      • 1970-01-01
      • 1970-01-01
      • 2016-02-12
      • 2021-06-27
      • 2019-01-06
      • 2019-01-02
      • 1970-01-01
      相关资源
      最近更新 更多