基于ChEMBL数据库的文本分类器

本文介绍了一种基于ChEMBL数据库的文本分类器,它通过PipelinePilot和Naïve Bayes/Randam Forest算法,自动区分化学相关和非化学相关文献,加速类化学物数据提取。这种方法已在毒理基因组学中验证,适用于大规模科学出版物的筛选和分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

摘要:某些科学家和将大数据提取整理到公共数据库这一过程都需要对文本进行数据挖掘,科学出版物的大量发行则要求可以实现半自动和全自动文本挖掘。作者开发了一种文档分类器,可以成功区分“类化学物” (即与小分子药物发现相关且可能包含定量生物活性数据的出版物)和“非类化学物”。

基于ChEMBL数据库的文本分类器

refJournal of Cheminformatics 2014, 6:40IF=3.893

链接: http://www.jcheminf.com/content/6/1/40.

ChEMBL数据库存储了大量化合物结构、生物靶标生物活性数据以及药物类药分子的分子性质数据人工提取了原始文献中实验结果,并进行了整理和集成,保证了数据的一致性和数据质量。基于ChEMBL数据库来源,作者用Pipeline Pilot构建了分档分类算法,使用朴素贝叶斯(Naïve BayesianNB)随机森林(Random ForestRF)算法,对文献中的标题和摘要做了文本分类,用于快速提取类化学物数据,从大量文献数据中提取关键的文献进行研究。算法毒理基因组学中获得验证。

 数据处理和模型构建流程

 

 

图二 Pipeline Pilot模型评价结果

MaXFlow生物医药智能创新平台,由创腾科技自主研发,旨为不同领域的一线创新科技工作者提供一个合作共享的B-S架构平台。以“数据自由,模型自由”为理念,在结构模型与预测模型进行融合的基础上,实现模拟与AI需求的合并,为研发赋能。

  • 填补数据产生保存与数据使用赋能断层
  • 打通空间结构模型与数据预测模型壁垒
  • 合并经典模拟计算与新兴AI预测需求
  • 降低背景知识储备与复杂软件使用门槛

通过便捷的网页端操作,可实现大、小分子模型的构建与优化,动力学模拟,分子对接,分子间相互作用展示。小分子药物方面,通过分子性质计算以及多种机器学习与深度学习的方法,在工作流中帮助用户实现数据的挖掘以及相关构效关系的搭建,同时可以通过一键部署的方式实现药代动力学及不同目的的AI预测与共享。对于大分子,基于流行AI模型的运用,更加准确的实现大分子间相互作用预测。多样的APPs为大分子药物研发提供可靠保障。

<think>我们有一个明确的任务:使用ArcGISPro的模型构建批量按字段将面数据转换为栅格。根据用户需求,我们需要按字段值(可能是某个属性字段)来分别转换面要素为栅格。这通常意味着对于同一个面图层,根据不同的属性值(例如,不同类别)生成多个栅格,每个栅格代表该类别。由于在模型构建中,我们无法直接使用迭代字段值(除非使用迭代),因此我们需要设计一个模型,该模型能够迭代一个字段的唯一值,然后对每个唯一值进行面转栅格操作。步骤:1.获取字段的唯一值列表。2.对每个唯一值,先选择出该值对应的面要素。3.将选择的面要素转换为栅格。但是,在模型构建中,我们可以使用“迭代要素选择”或“迭代行选择”来获取唯一值?实际上,我们可以使用“迭代字段值”工具(在模型构建中称为“迭代多值”可能不够直接)。更常用的方法是使用“计算值”工具结合“迭代行选择”来获取唯一值列表,然后迭代这个列表。然而,ArcGIS Pro模型构建提供了一个迭代“迭代字段值”(IterateField Values),它可以直接迭代一个字段的所有值(但包括重复值)。我们想要的是唯一值。因此,我们可以先使用“计算值”工具获取唯一值列表,然后使用“迭代多值”来迭代这个唯一值列表。但是,在模型构建中,有一个更直接的方法:使用“迭代行选择”迭代一个包含唯一值的表。我们可以先通过“删除相同项”工具(DeleteIdentical)来生成一个包含唯一字段值的表,然后使用“迭代行选择”迭代这个表,每次迭代得到一个唯一值。具体步骤:1.使用“删除相同项”工具,基于指定字段,生成一个只包含唯一值的表(这个表只有一列,即该字段的唯一值)。2.使用“迭代行选择”迭代这个表,每次迭代得到一行(即一个唯一值)。3.在迭代内部,使用“按属性选择图层”工具,从原始面要素中选择当前迭代的字段值对应的要素。4.将选择出来的要素转换为栅格(使用“面转栅格”工具)。注意:在模型构建中,我们需要将迭代得到的值作为变量传递。另外,由于每次迭代都会生成一个栅格,我们需要为每个栅格指定一个唯一的输出名称(例如,基于字段值来命名)。另外,根据引用[1]中的信息,ArcGISPro不支持交互式绘制,所以我们的模型必须使用已有的数据层作为输入。下面我们详细描述模型构建的步骤:步骤1:准备-添加“面要素”作为模型的输入参数(这样用户可以在运行模型时选择输入的面要素)。-添加“字段”作为模型的输入参数(用户可以选择要按哪个字段进行转换)。步骤2:获取唯一值-使用“删除相同项”工具(在数据管理工具->常规工具下),输入为面要素,字段为选择的字段,输出为一个表(例如,命名为UniqueValueTable)。这个表将包含指定字段的唯一值。步骤3:迭代唯一值-在模型构建中添加“迭代行选择”迭代(在迭代工具中,选择“行选择”迭代)。设置要迭代的表为上一步生成的UniqueValueTable。-在迭代内部,我们可以获取当前行的字段值(假设字段名为“Field1”,那么迭代会输出一个变量,比如“Value”,代表当前迭代行的字段值)。步骤4:按值选择要素-在迭代内部,添加“按属性选择图层”工具(或“选择图层按属性”工具)。输入的面要素是原始面要素(注意,这里需要先使用“创建要素图层”工具将输入的面要素转换为图层,因为选择工具操作的是图层)。-选择表达式为:字段名 =当前迭代的值(注意:需要根据字段类型来构造表达式,如果是字符串,需要加单引号;如果是数字,则不需要)。这里我们可以使用模型变量来构造表达式。步骤5:面转栅格-将上一步选择出来的要素(即一个选择集)作为“面转栅格”工具的输入。-设置“面转栅格”的参数,包括输出栅格的位置和名称。注意输出名称需要包含当前迭代的值(例如,使用“%Value%”来插入变量,形成类似“OutputRaster_%Value%”的名称)。-其他参数(像像元大小、字段等)需要用户指定或设置默认值。我们可以将“面转栅格”工具的一些关键参数(如像元大小、值字段等)也设置为模型参数,以便用户输入。步骤6:输出-将每次迭代生成的栅格设置为模型输出(可以收集到一个多值输出中,但模型构建默认每次迭代输出一个栅格,我们可以使用“收集值”工具来收集所有迭代生成的栅格,然后将其作为多值输出)。但是,在模型构建中,我们需要将迭代内部的输出收集起来。我们可以在迭代外部添加一个“收集值”工具,将每次迭代生成的栅格路径收集到一个列表中,然后将这个列表作为模型的输出。具体构建流程:1.创建模型,添加变量:-输入要素(数据类型:要素图层)-字段(数据类型:字段,从输入要素获取)-像元大小(数据类型:值,可选,设置为模型参数)-值字段(数据类型:字段,可选,设置为模型参数,用于面转栅格时选择哪个字段的值作为栅格值)2.添加工具:-删除相同项:输入表=输入要素,字段=字段(上一步的字段变量),输出表=内存表(或指定路径)-添加迭代行选择:输入表=删除相同项输出的表,获取每一行的字段值(假设唯一值字段就是用户指定的字段,那么表里只有这一列,所以我们可以直接获取该列的值,变量名设为“UniqueValue”)3.在迭代内部:-先创建要素图层:输入要素(原始输入要素),输出图层命名为“InputLayer”-选择图层按属性:输入图层=“InputLayer”,表达式为:`"字段名" ='UniqueValue'`?但是这里字段名是变量,UniqueValue也是变量。在模型构建中,我们需要使用动态表达式。-表达式构造:由于字段名和值都是变量,我们可以使用`"%字段%"= '%UniqueValue%'`?但是要注意数据类型(字符串需要引号,数字不需要)。因此,我们需要判断字段类型,然后动态构造表达式。这可以通过“计算值”工具来构造表达式字符串。-或者,我们可以使用更简单的方法:在“选择图层按属性”工具中,表达式类型选择“添加变量到表达式”,然后选择字段变量和UniqueValue变量。但是,在模型构建中,表达式是字符串,我们可以这样写:`"%字段%"= '%UniqueValue%'`(如果字段是字符串类型)。但是如果是数字,则应该去掉引号。所以,我们需要知道字段类型?这可能会复杂化。4.替代方案:不使用表达式构造的麻烦,我们可以使用“按属性选择”工具时,将表达式写为:`"%字段%"= %UniqueValue%`,但是这样对于字符串会出错(因为缺少引号)。因此,我们需要在模型构建中使用一个分支来判断字段类型,然后分别构造表达式。5.为了避免复杂化,我们可以假设用户输入的字段是字符串类型?或者,我们可以使用一个技巧:在“删除相同项”生成的表中,字段类型和原始字段相同。我们可以用“计算值”工具来生成表达式。但是,这需要编写Python代码片段,可能会增加复杂度。6.更简单的方法:在“选择图层按属性”工具中,表达式使用:`"字段名" ='UniqueValue'`,但是字段名和UniqueValue都是变量。我们可以这样写表达式:`"{}" ='{}'`.format(字段,UniqueValue)?但是模型构建不支持这种格式化。我们可以使用“计算值”工具来生成表达式字符串,表达式代码块如下(使用Python):表达式类型:Python代码块:expression= "\"{0}\"= '{1}'".format(%字段%, %UniqueValue%)但是,这里假设UniqueValue是字符串。如果是数字,则应该去掉引号:expression ="\"{0}\" ={1}".format(%字段%, %UniqueValue%)那么如何判断字段类型?我们可以通过另一个工具获取字段类型,然后分支处理,这会使模型变得复杂。7.考虑到时间,我们可以采用一种折中方式:要求用户输入的字段是字符串类型,或者数字类型,我们在模型参数中让用户指定字段类型?这样增加了用户负担,但简化了模型。8.另一种折中:在模型构建中,我们使用“字段计算”将字段值转换为字符串,然后按字符串处理。这样,无论原始字段是什么类型,我们都将其转换为字符串,然后按字符串选择。这样,表达式可以统一写成:`"字段名"= '字符串值'`。具体步骤:-在原始输入要素上添加一个文本字段(例如TempField),然后计算该字段的值等于原字段的字符串表示(使用字段计算:`str(!原字段!)`)。-然后,我们使用这个临时字段作为分组字段。这样,我们就可以统一使用字符串表达式了。9.但是,添加字段并计算会修改原始数据,这是不可取的。我们可以使用“添加字段”和“计算字段”工具,但这样会增加处理步骤,而且需要修改数据(或者创建临时数据)。我们可以使用“创建要素图层”后,在内存中计算字段?但是模型构建中的字段计算工具会修改原始数据吗?不会,它修改的是图层(临时)。所以我们可以:-在迭代内部,先创建要素图层(原始输入要素)。-然后添加一个字段(临时,仅对该图层)并计算(使用计算字段工具,表达式为`str(!原字段!)`)。-然后使用这个临时字段进行选择。10.这样,我们就可以使用字符串表达式了:`"TempField" ='%UniqueValue%'`。注意,UniqueValue也是字符串(因为我们在唯一值表中也是用同样的转换得到的)。11.但是,这样每一步迭代都要计算字段,效率较低。另一种方法是在模型一开始就创建一个临时图层,并添加一个字符串类型的字段,然后计算该字段。然后在后续步骤中使用这个临时图层。这样只需要计算一次。12.我们选择在模型开始处创建一个临时图层并添加文本字段:-使用“创建要素图层”工具创建原始要素的图层(命名为TempLayer)。-使用“添加字段”工具给TempLayer添加一个文本字段(比如TempField,长度足够)。-使用“计算字段”工具将原始字段的值转换为字符串并存入TempField。13.然后,在获取唯一值时,我们使用这个临时图层,并且使用TempField作为字段。这样,后续的选择和迭代都基于这个字符串字段。14.步骤调整:a.输入:输入要素(原始要素)、字段(原始字段,但后续我们将用临时字段替代)b.创建临时图层:创建要素图层(输入要素 ->输出:TempLayer)c.添加字段:给TempLayer添加一个文本字段(TempField)d.计算字段:将原始字段的值转换为字符串存入TempField(表达式:`str(!原始字段!)`)e.删除相同项:输入表=TempLayer,字段=TempField,输出表=UniqueValueTablef.迭代行选择:迭代UniqueValueTable,每次迭代得到一行,该行有一个TempField的值(变量名为UniqueValue)g.在迭代内部:-选择图层按属性:输入图层=TempLayer,表达式:`"TempField"= '%UniqueValue%'`-面转栅格:输入要素=选择后的图层(注意,选择后,TempLayer中只有选中的要素),输出栅格名称包含%UniqueValue%(例如:OutputRaster_%UniqueValue%),其他参数(像元大小、值字段)由用户指定。h.收集值:将每次迭代的面转栅格输出收集起来(在迭代外部添加“收集值”工具,输入为面转栅格的输出,然后收集值输出作为模型的最终输出)。15.清理:由于我们创建了临时图层,并且添加了临时字段,但因为是图层,所以不会修改原始数据,当模型运行结束后,临时图层会被释放。所以不需要额外清理。16.但是,添加字段和计算字段操作是在图层上进行的,不会影响原始数据,所以是安全的。17.将“面转栅格”工具中的“值字段”参数设置为模型参数(用户可以选择用哪个字段的值来转换,这个字段可以是原始字段,也可以是其他字段。注意,这个字段不需要转换类型,因为面转栅格工具自己会处理)。18.注意:在迭代内部,我们使用的是临时图层(TempLayer),并且每次选择都是在这个图层上进行。所以每次选择后,图层中只有当前值对应的要素。然后我们将其转换为栅格。19.模型参数:我们将以下变量设置为模型参数(用户可见):-输入要素-分组字段(即原始字段,用于分组的字段,我们将创建临时字符串字段)-像元大小-值字段(面转栅格时,每个要素使用哪个字段的值作为栅格值)-输出位置(可选,或者让用户在面转栅格工具中设置输出路径)20.输出:收集值工具输出的栅格列表(多值栅格数据)。由于构建模型的过程较为复杂,且无法在此处直接构建,我将提供文字描述和关键步骤截图(无法提供截图,但可以描述每一步使用的工具)。但是,考虑到用户可能需要具体的操作步骤,我们将详细描述每一步在模型构建中如何添加工具和设置参数。由于在文本中详细描述每一步的界面操作非常繁琐,我建议用户按照以下流程在模型构建中操作:步骤:1.打开模型构建。2.添加变量:-右键画布,选择“创建变量”->数据类型为“要素图层”,命名为“输入要素”,并设置为模型参数(右键变量,选择“模型参数”)。-同样,创建“字段”变量(数据类型为字段),并设置为模型参数。注意,这个字段是分组字段(原始字段)。-创建“值字段”变量(数据类型为字段),设置为模型参数,这是面转栅格时使用的值字段(可以是另一个字段,不一定是分组字段)。-创建“像元大小”变量(数据类型为值,可以是双精度),设置为模型参数。-创建“输出工作空间”变量(数据类型为工作空间或文件夹,用于设置输出栅格的路径),设置为模型参数(可选,也可以在面转栅格中直接写路径)。3.添加工具“创建要素图层”:-输入要素:输入要素变量-输出图层:命名为“TempLayer”(或者作为中间变量,不暴露为参数)4.添加工具“添加字段”:-输入表:上一步的“TempLayer”-字段名称:例如“TempField”-字段类型:文本-字段长度:根据实际情况设置(如50)5.添加工具“计算字段”:-输入表:上一步的“TempLayer”(即添加字段后的图层)-字段名称:TempField-表达式:`str(!分组字段!)`#注意,这里分组字段就是用户输入的字段变量(在表达式中,用百分号引用变量:%字段%)-表达式类型:Python36.添加工具“删除相同项”:-输入表:TempLayer-字段:选择“TempField”(注意,这里不是变量,而是直接选择,因为TempField是固定的字段名。但也可以使用变量,不过我们这里固定了字段名,所以直接输入字段名)-输出表:可以输出到内存(如“memory\\UniqueValueTable”)7.添加迭代“迭代行选择”:-右键画布,选择“插入->迭代->行选择”-设置要迭代的表为“删除相同项”输出的表-在迭代内部,我们得到每一行,并且可以获取该行的字段值(在迭代的输出变量中,有一个“字段值”变量,我们将其重命名为“UniqueValue”)8.在迭代内部:-添加工具“选择图层按属性”:输入图层:TempLayer(注意,这是整个模型的临时图层,在迭代过程中,这个图层会被多次选择,所以我们需要确保每次选择前清除之前的选择?实际上,迭代每次迭代时,我们可以重新选择。但注意,选择图层按属性工具默认会清除之前的选择,所以没问题)选择类型:NEW_SELECTION表达式:`"TempField"= '%UniqueValue%'`#注意,这里UniqueValue是迭代输出的变量(字符串),所以直接使用%UniqueValue%来引用。因为是字符串,所以用单引号括起来。-添加工具“面转栅格”:输入要素:上一步“选择图层按属性”输出的图层(即选择后的图层)值字段:用户输入的“值字段”变量(注意:这个值字段是原始字段,不是TempField。因为我们只是用TempField来分组,实际转换的值字段可以是其他字段)输出栅格数据集:使用一个包含%UniqueValue%的名称,例如:`%输出工作空间%\Raster_%UniqueValue%`(需要确保输出工作空间变量已经设置)像元大小:用户输入的像元大小变量其他参数根据需要设置(如栅格类型等)9.在迭代外部,添加工具“收集值”:-右键画布,添加工具“收集值”(在实用工具下)-输入:将迭代内部的“面转栅格”工具的输出栅格数据集连接到收集值工具(注意,在模型构建中,将鼠标从面转栅格的输出拖到收集值工具的输入上)-收集值工具输出一个列表(命名为“输出栅格列表”),将其设置为模型输出(右键,添加为输出参数)。10.连接整个流程。注意:在迭代内部,我们使用TempLayer,并且每次选择都会改变这个图层。但是,由于我们每次选择都是基于当前迭代的唯一值,并且面转栅格工具会基于当前选择集生成栅格,所以是可行的。但是,由于模型构建中的图层是共享的,所以每次选择都会影响下一次迭代?实际上,在迭代内部,每次迭代都是独立的,但是TempLayer图层是同一个,所以下一次选择会覆盖上一次的选择。不过,这并不影响,因为每次迭代我们只需要当前选择集。但是,在迭代结束后,TempLayer图层会保留最后一次迭代的选择集。不过,由于是临时图层,模型结束就释放了,所以没关系。11.运行模型:用户提供输入要素、分组字段、值字段、像元大小、输出工作空间,运行模型即可得到按分组字段唯一值分组的多个栅格。注意:这个模型可能对大型数据效率较低,因为每次迭代都要执行一次选择和面转栅格。如果唯一值很多,运行时间会很长。另外,如果用户希望按原始字段(可能是数字)来命名输出栅格,那么使用UniqueValue(字符串)作为名称的一部分是可行的。但如果原始字段是字符串,则要注意UniqueValue中是否有特殊字符(如空格、斜杠等)导致路径无效。需要确保在输出栅格名称中过滤掉非法字符,但模型构建本身不会处理,所以用户需要确保字段值中没有非法字符。由于模型构建过程较为复杂,用户可能需要根据实际数据测试调整。根据引用[3]中的信息,模型构建可以批量处理,所以这个模型应该能够满足用户需求。最后,由于在回答中无法展示模型构建的截图,建议用户参考ArcGISPro的官方文档关于模型构建的使用,特别是迭代和动态命名的部分。相关问题:1.如何解决模型构建中迭代字段值时的表达式构造问题?2.在模型构建中如何收集迭代过程中生成的多个输出?3.如何提高批量面转栅格的效率?</think>### ArcGIS Pro模型构建:批量按字段将面数据转换为栅格 在ArcGIS Pro中使用模型构建实现批量按字段面转栅格的操作,主要通过**迭代字段唯一值**和**条件选择**实现。以下是详细步骤: --- ### 方法步骤 #### 1. **创建初始模型结构** - 打开模型构建 → 添加"要素图层"变量 → 重命名为`输入面要素`并设为参数 - 添加"字段"变量 → 重命名为`分组字段`并设为参数(用于按字段值分组) - 添加"面转栅格"工具(搜索`PolygonToRaster`) #### 2. **生成唯一值列表** ```python # 使用"删除相同项"工具获取唯一值 工具位置: 地理处理工具箱 → 数据管理工具 → 常规 → 删除相同项 输入: `输入面要素` 字段: `分组字段` 输出表: 内存表(如`Memory/UniqueValues`) ``` > 此步骤生成分组字段的唯一值表,作为后续迭代基础[^1]。 #### 3. **设置迭代** ```python # 添加"迭代行选择"迭代 输入表: 上一步输出的唯一值表 字段输出变量: 命名为`UniqueValue`(存储当前迭代值) ``` ![迭代设置示意图](https://pro.arcgis.com/shared/help/analyze/gp-tool-reference/modelbuilder/images/iter-row-selection.png) #### 4. **按值选择要素** ```python # 添加"按属性选择"工具 输入要素: `输入面要素` SQL表达式: `"分组字段" = '%UniqueValue%'` (注意:文本字段需加单引号,数字字段直接写值) ``` > 表达式动态引用当前迭代值`%UniqueValue%`实现按值筛选[^3]。 #### 5. **面转栅格配置** ```python 输入要素: 上一步的选择结果 值字段: 指定栅格值的字段(如面积字段) 输出栅格数据集: `输出路径\Raster_%UniqueValue%.tif` (动态命名确保唯一性) 像元大小: 设置分辨率(如10米) ``` #### 6. **收集输出结果** ```python # 添加"收集值"工具(Utilities工具集) 输入: 连接"面转栅格"的输出 输出多值变量: 命名为`输出栅格组` ``` > 将所有生成的栅格路径汇总到单个变量[^3]。 --- ### 完整模型流程 ```mermaid graph TD A[输入面要素] --> B(删除相同项) C[分组字段] --> B B --> D[迭代行选择] D --> E(按属性选择) A --> E E --> F(面转栅格) F --> G(收集值) G --> H[输出栅格组] ``` --- ### 关键注意事项 1. **字段类型处理**: - 文本字段:SQL表达式需加单引号 → `"Type" = 'Forest'` - 数值字段:直接引用值 → `"Code" = 100` 2. **动态输出路径**: - 使用`%UniqueValue%`在输出名称中嵌入字段值 - 示例:`C:\Data\LandUse_%UniqueValue%.tif` 3. **性能优化**: - 对输入面要素建立属性索引 - 将中间表保存在内存中(`Memory/...`) - 分批处理超过1000个唯一值的数据 > **替代方案**:若需更高灵活性,可结合ArcPy脚本实现循环处理: > ```python > import arcpy > fields = set(row[0] for row in arcpy.da.SearchCursor("输入面要素", ["分组字段"])) > for value in fields: > sql = f""""分组字段" = '{value}'""" > arcpy.SelectLayerByAttribute_management("输入面要素", "NEW_SELECTION", sql) > arcpy.PolygonToRaster_conversion("输入面要素", "值字段", f"Raster_{value}.tif") > ``` --- ### 常见问题解决 - **错误000864**:迭代值包含非法字符 → 在输出路径中添加`str(%UniqueValue%)`清除特殊符号 - **空栅格生成**:检查字段值匹配是否精确(大小写/空格敏感) - **Pro版本限制**:ArcGIS Pro 3.0+ 需启用"地理处理 → 选项 → 覆盖地理处理输出"避免写入冲突 > 此方法适用于土地利用分类、分区统计等场景,可扩展用于批量生成按行政区划、地类编码的栅格数据集[^2][^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值