科学/生物医学文档的完整Spacy管道和模型。

scispac的Python项目详细描述


此存储库包含与对科学文档使用Spacy相关的自定义管道和模型。

特别是,有一个自定义的标记化器,它在spacy的基础上添加标记化规则。 基于规则的标记器,一个pos标记器和语法分析器,用于生物医学数据和 实体跨度检测模型。另外,还有用于更具体任务的NER模型。

安装

安装scispacy需要两个步骤:安装库和安装模型。要安装库,请运行:

pip install scispacy

要安装一个模型(请参阅下面的所有可用模型选择),请运行如下命令:

pip install https://s3-us-west-2.amazonaws.com/ai2-s2-scispacy/releases/v0.2.0/en_core_sci_sm-0.2.0.tar.gz

注意:我们强烈建议您使用独立的python环境(如virtualenv或conda)来安装scispacy。 如果您需要帮助,请查看下面的"设置虚拟环境"部分。 此外,scispacy使用了python的现代特性,因此仅适用于python 3.6或更高版本

设置虚拟环境

conda可以使用 scispacy所需的python版本。如果您已经有了python 3.6或3.7 要使用的环境,可以跳到"通过PIP安装"部分。

  1. 下载并安装conda

  2. 使用python 3.6创建名为"scispacy"的conda环境:

    conda create -n scispacy python=3.6
    
  3. 激活conda环境。您需要在要使用scispacy的每个终端中激活conda环境。

    source activate scispacy
    
  4. < > >

    现在您可以使用上述步骤安装scispacy和其中一个型号。

    完成上述步骤并下载了下面的一个模型之后,就可以像加载任何其他spacy模型一样加载scispacy模型。例如:

    importspacynlp=spacy.load("en_core_sci_sm")doc=nlp("Alterations in the hypocretin receptor 2 and preprohypocretin genes produce narcolepsy in some animals.")

    有关升级的说明

    如果要升级scispacy,则需要再次下载模型,以获得与您拥有的scispacy版本兼容的模型版本。下载的模型链接应包含您所拥有的scispacy的版本号。

    可用型号

    要安装模型,请单击下面的链接下载模型,然后运行

    pipinstall</path/to/download>

    或者,您可以通过右键单击链接,选择"复制链接地址"并运行来直接从url安装

    pipinstallCMD-V(topastethecopiedURL)
    <表><广告>型号说明 安装URL < /广告><正文>核心科学 用于生物医学数据的完整Spacy管道。下载 en_core_sci_md一个完整的spacy管道,用于具有更大词汇和词向量的生物医学数据。下载 en_ner_craft_md一个spacy-ner模型,该模型是在飞行器语料库上训练的。下载 en_ner_jnlppa_md在jnlpba语料库上训练的spacy-ner模型。下载en_ner_bc5cdr_md在bc5cdr语料库上训练的spacy-ner模型。en\u ner\u bionlp13cg\u md在bionlp13cg语料库上训练的spacy-ner模型。

    其他管道组件

    缩写检测器

    abbreviationdetector是一个spacy组件,它实现了"一个简单算法"中的缩写检测算法。 用于识别生物医学文本中的缩写定义。",(Schwartz&Hearst,2003)。

    您可以通过doc.\缩写属性访问缩写列表,对于给定的缩写, 您可以使用span.\long嫒form访问它的long form(这是一个spacy.tokens.span),它将指向 文档中的另一个跨度。

    示例用法

    importspacyfromscispacy.abbreviationimportAbbreviationDetectornlp=spacy.load("en_core_sci_sm")# Add the abbreviation pipe to the spacy pipeline.abbreviation_pipe=AbbreviationDetector(nlp)nlp.add_pipe(abbreviation_pipe)doc=nlp("Spinal and bulbar muscular atrophy (SBMA) is an \           inherited motor neuron disease caused by the expansion \           of a polyglutamine tract within the androgen receptor (AR). \           SBMA can be caused by this easily.")print("Abbreviation","\t","Definition")forabrvindoc._.abbreviations:print(f"{abrv}\t ({abrv.start}, {abrv.end}) {abrv._.long_form}")>>>AbbreviationSpanDefinition>>>SBMA(33,34)Spinalandbulbarmuscularatrophy>>>SBMA(6,7)Spinalandbulbarmuscularatrophy>>>AR(29,30)androgenreceptor

    umlsentitylinker(alpha功能)

    umlsentitylinker是一个spacy组件,它执行到统一医疗语言系统的链接。 请注意,这是当前的alpha特性。链接器只是在命名实体上执行字符串重叠搜索, 使用近似近邻搜索将它们与包含270万个概念的知识库进行比较。

    因为这个组件的边缘有点粗糙,所以您可能需要使用一些参数 下面是为了适应您的用例(更高的精度、更高的召回率等)。

    • 解析缩写:bool=true,可选(默认为false) 在执行链接之前,是否解析文档中标识的缩写。 如果空间中没有abbreviationdetector,则此参数无效 管道。
    • k:int,可选,(默认值=30) 每次提及要从候选生成器查找的最近邻居的数目。
    • 阈值:浮动,可选,(默认值=0.7) 候选人必须达到的门槛才能添加到文档中 作为推荐候选人。
    • 无定义阈值:浮动,可选,(默认值=0.95) 实体候选必须达到的阈值才能添加到文档中 如果实体候选者没有定义,则作为提及候选者。
    • 过滤器定义:bool,默认值=true 是否筛选可返回的实体以仅包含具有定义的实体 在知识库中。
    • 每个提到的最大实体数:int,可选,默认值=5 对于给定的提及将返回的实体的最大数目,不管 找到了多少个最近的邻居。

    此类设置Spacy跨度上的.umls元素属性,该属性由 列出对应于umls概念id的元组[str,float]]和相关的分数 对于每个提到的最大实体数的列表实体数。

    您可以使用此类的umls属性查找给定id的更多信息:

    print(linker.umls.cui_to_entity[concept_id])
    

    示例用法

    pip install scispacy
    
    0

    引用

    如果您在研究中使用scispacy,请引用生物医学neumann king/de28ec1d7bd38c8fc4e8ac59b6133800818b4e29" rel="nofollow">scispacy:生物医学自然语言处理的快速和健壮模型。此外,请说明您使用的科学的版本和模型,以便您的研究能够被复制。

    pip install scispacy
    
    1

    scispacy是一个开源项目,由艾伦人工学院(allen institute for artificial)开发。智能(AI2)。 AI2是一个非营利性机构,其使命是通过高影响力的人工智能研究和工程为人类做出贡献。

    欢迎加入QQ群-->: 979659372 Python中文网_新手群

    推荐PyPI第三方库


热门话题
java如何从Android本地存储获取媒体文件(图像、视频、音频)?   toarray Java对象数组项到字符串数组   java读取逗号分隔的配置文件的最佳方式是什么?   多线程当需要多次设置和取消时,如何在Java中使用计时器?   java Tomcat:启动。蝙蝠不见了   java通过将子路径映射到不同的控制器来拆分Spring控制器   java如何使用加密算法创建自己的安全提供者?   java如何在给定执行时间的情况下,在每个固定的时间段调用该方法   java使用Tomcat运行Servlet   java Apache poi项目符号和编号   java如何在没有毫秒的情况下打印DateTime   java在springdatajpa中按一个字段过滤而不键入query时,如何为另一个字段编写两个条件?   java为什么@Transactional在另一个提交失败时不回滚一个提交?   java为什么浏览器会将大写字母转换为小写字母?   Ajax请求的javascript问题(Liferay)   java如何在选择其他jList时更新jList   JavaSpring,XMLCOnfiguration:不在xml文件中指明注释是如何工作的?   java,包括web中的文件。xml