spaCy库的实体链接踩坑,以及spaCy-entity-linker的knowledge_base下载问题

这篇具有很好参考价值的文章主要介绍了spaCy库的实体链接踩坑,以及spaCy-entity-linker的knowledge_base下载问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题1. spacy Can’t find factory for ‘entityLinker’

1)问题

写了一个实体链接类,代码如下:

nlp = spacy.load("en_core_web_md")

class entieyLink:
    def __init__(self, doc, nlp):
        self.nlp = nlp
        self.doc = self.nlp(doc)
        
        # Check if "entityLinker" is already in the pipeline
        entity_linker_exists = False
        for name, component in nlp.pipeline:
            if name == "entityLinker":
                entity_linker_exists = True
                break

        # Add "entityLinker" only if it doesn't exist in the pipeline
        if not entity_linker_exists:
            self.pipe = nlp.add_pipe("entityLinker", last=True)

结果总是提示 ‘entityLinker’ 不能找到,明明是有这个模块的:

ValueError: [E002] Can't find factory for 'entityLinker' for language English (en). This usually happens when spaCy calls `nlp.create_pipe` with a custom component name that's not registered on the current language class. If you're using a Transformer, make sure to install 'spacy-transformers'. If you're using a custom component, make sure you've added the decorator `@Language.component` (for function components) or `@Language.factory` (for class components).

Available factories: attribute_ruler, tok2vec, merge_noun_chunks, merge_entities, merge_subtokens, token_splitter, parser, beam_parser, entity_linker, ner, beam_ner, entity_ruler, lemmatizer, tagger, morphologizer, senter, sentencizer, textcat, textcat_multilabel, en.lemmatizer

2)解决方法

后来发现,在从自己的电脑移动到服务器的时候,下载requirements.txt的时候,包spacy-entity-linker并没有被写入到requirements.txt依赖中。
因此,安装spacy-entity-linker包报错解决,注意要和spacy版本对应。

pip install spacy-entity-linker==1.0.3  (我的spacy=3.0.6

问题2. spacy Can’t download knowledge base

1)问题

因为自己一开始敲代码的时候,是使用的自己的电脑,网络问题非常顺畅,在spacy第一次实体链接的时候就自动下载了knowledge base。 结果后来挪到服务器的时候,网络下载很慢,或者无法访问外网,就会出现一些问题 Downloading knowledge base: 0.00B
例如:我连接的这个服务器在内网,不能够连接外网下载这个knowledge base😟。
spaCy库的实体链接踩坑,以及spaCy-entity-linker的knowledge_base下载问题,Python 之代码报错解决,python,人工智能

2)产生问题的原因

这里提供一点spacy-entity-linker库的背景知识:
spaCy库的实体链接踩坑,以及spaCy-entity-linker的knowledge_base下载问题,Python 之代码报错解决,python,人工智能
代码也确实是这么搞的:
spaCy库的实体链接踩坑,以及spaCy-entity-linker的knowledge_base下载问题,Python 之代码报错解决,python,人工智能
这也是为什么服务器一直运行代码,总是不能够下载的knowledge base原因,咱网不行嘛。

3)解决办法

1. 离线下载knowledge base

 file_url = “https://huggingface.co/MartinoMensio/spaCy-entity-linker/resolve/main/knowledge_base.tar.gz”

2. 打印保存的路径
找到服务器存spacy-entity-linker文件的位置,找到该文件夹下的DatabaseConnection.py,打印一下这个库的路径,看看这个离线压缩包应该存在服务器的什么位置。
spaCy库的实体链接踩坑,以及spaCy-entity-linker的knowledge_base下载问题,Python 之代码报错解决,python,人工智能
3. 解压文件
很明显,第一步我们下载的文件是一个压缩包,但是实际上是一个.bd的文件。因此,我们需要手动解压一下子。(参考了一部分代码)

import gzip  
import os  
import tarfile 


def un_gz(file_name):
    """ungz zip file"""
    f_name = file_name.replace(".gz", "")
    
    with gzip.open(file_name, 'rb') as g_file:
        with open(f_name, "wb+") as output_file:
            output_file.write(g_file.read())
 
def un_tar(file_name):  
    tar = tarfile.open(file_name)  
    names = tar.getnames()  
    if os.path.isdir(file_name + "_files"):  
        pass  
    else:  
        os.mkdir(file_name + "_files")   
    for name in names:  
        tar.extract(name, file_name + "_files/")  
    tar.close()

path = '/your_path/lib/python3.7/site-packages/data_spacy_entity_linker/knowledge_base.tar.gz'
un_gz(path2)
path2 = '/your_path/lib/python3.7/site-packages/data_spacy_entity_linker/knowledge_base.tar'
un_tar(path2)

4. 再次运行
把文件从解压的文件夹下拖出来,最终获得了wikidb_filtered.db文件。再次运行这个地方就不会报错啦。
spaCy库的实体链接踩坑,以及spaCy-entity-linker的knowledge_base下载问题,Python 之代码报错解决,python,人工智能

问题3. sqlite3.ProgrammingError

1)问题

出现了数据连接sqlite3.ProgrammingError错误, 还是实体链接库引起的。

sqlite3.ProgrammingError: SQLite objects created in a thread can only be used in that same thread. The object was created in thread id 140585335772928 and this is thread id 140588189775616.

2)解决方案

找到服务器存spacy-entity-linker文件的位置,找到该文件夹下的DatabaseConnection.py
找到这个文件下的函数init_database_connection(self, path=DB_DEFAULT_PATH),追加 , check_same_thread=False

self.conn = sqlite3.connect(path, check_same_thread=False)

spaCy库的实体链接踩坑,以及spaCy-entity-linker的knowledge_base下载问题,Python 之代码报错解决,python,人工智能文章来源地址https://www.toymoban.com/news/detail-707055.html

到了这里,关于spaCy库的实体链接踩坑,以及spaCy-entity-linker的knowledge_base下载问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity Game FrameWork—模块使用—Entity实体

    官方解释:我们将游戏场景中,动态创建的一切物体定义为实体。此模块提供管理实体和实体组的功能,如显示隐藏实体、挂接实体(如挂接武器、坐骑,或者抓起另一个实体)等。实体使用结束后可以不立刻销毁,从而等待下一次重新使用。 先看下实体组件的参数: Enab

    2024年02月05日
    浏览(29)
  • Java中的实体类(entity class)和model

    编写代码时,经常会遇到一些具有“现实”意义的“ 个体 ”,eg:一个用户、一首歌曲、一条评论等。它们在逻辑上是完整的整体,具有相似的结构,但是却因为“ 属性 ”的不同而不同。 下面看一个典型的Entity class: 总结: 一个Entity类,代表了某一种“个体”,类中的属

    2024年02月16日
    浏览(30)
  • Spring Data访问Elasticsearch----实体回调Entity Callbacks

    Spring Data基础结构提供了钩子,用于在调用某些方法之前和之后修改实体。这些所谓的EntityCallback实例提供了一种方便的方式来检查并可能以回调风格修改实体。 EntityCallback看起来很像一个专门的ApplicationListener。一些Spring Data模块发布特定于存储的事件(如BeforeSaveEvent),允许

    2024年03月21日
    浏览(33)
  • XML External Entity-XXE-XML实体注入

    概念 本课程介绍如何执行 XML 外部实体攻击以及如何滥用和防范该攻击。 目标 用户应该具备 XML 的基本知识 用户将了解 XML 解析器的工作原理 用户将学习如何执行 XXE 攻击以及如何防范它。 XML 实体允许定义标签,在解析 XML 文档时这些标签将被内容替换。一般来说,实体分

    2024年02月06日
    浏览(30)
  • Dynamics 365: 详解虚实体(Virtual Entity) 从0到1

    从Dynamics 365 for Customer Engagement 9.0开始,虚实体通过在Dynamics 365 Customer Engagement中无缝地将数据表示为实体,实现了外部系统中的数据集成。它无需数据复制,通常也无需自定义编码。 虚实体有如下的限制,但除了下面的这些限制外,它和其它的那些自定义实体没有区别: 数

    2024年02月07日
    浏览(35)
  • Cesium 视角切换到实体(entity)/ dataSources / 定位到模型(3DTiles)

    Cesium 的 camera.flyTo 是不可以直接飞到实体的。但是 viewer.flyTo 可以直接飞到实体。 viewer.flyTo (target, options) :将相机飞到提供的实体、实体或数据源。如果数据源仍在加载过程中或可视化仍在加载中,则此方法在执行飞行之前等待数据准备好 viewer.flyTo 的 target` 可以是:要查看

    2024年02月11日
    浏览(30)
  • 解决 nginx 413 Request Entity Too Large(请求实体太大)

    最近把前端部署到nginx上,上传大文件时,报413错误,具体如下 我们可以看到请求的body的大小,在Content-Length后显示,Nginx默认的request body为1M,小于我们上传的大小         找到自己主机的nginx.conf配置文件,打开 在http{}中加入 client_max_body_size 500m; 然后重启nginx /etc/init.d/n

    2024年02月07日
    浏览(32)
  • 自然语言处理(NLP)-spacy简介以及安装指南(语言库zh_core_web_sm)

    spacy 简介 spacy 是 Python 自然语言处理软件包,可以对自然语言文本做词性分析、命名实体识别、依赖关系刻画,以及词嵌入向量的计算和可视化等。 使用 “pip install spacy\\\" 报错, 或者安装完 spacy,无法正常调用,可以通过以下链接将 whl 文件下载到本地,然后 cd 到文件路径下

    2024年01月16日
    浏览(35)
  • 动态链接库(三)--动态链接库的使用

    本文示例基于上章的Dll1项目生成的动态链接库学习简单使用. 所需文件:因为上节的示例没有添加Dll1.h头文件,因此这里只需Dll1.dll,Dll1.lib 在本文中会添加Dll1.h头文件以优化动态链接库的创建. 既然要在项目中使用别人创建生成的dll, 那么首先得将dll加载到自己得项目中去才

    2024年02月03日
    浏览(28)
  • 医疗保健中的 NLP:实体链接

            HEalthcare和生命科学行业产生大量数据,这些数据是由合规性和监管要求,记录保存,研究论文等驱动的。但随着数据量的增加,搜索用于研究目的的必要文件和文章以及数据结构成为一个更加复杂和耗时的过程。例如,如今,生物医学搜索引擎包含超过40万篇文章

    2024年02月13日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包