【转】VTK与Qt整合的示例

 VTK与Qt整合的示例

VTK附带的程序示例中大多是基于控制台的,作为可视化开发工具包,VTK也可以与很多流行的GUI开发工具整合,比如MFC、Qt(题外话:Qt已经被Digia从诺基亚手中收购了,Qt现在的链接是:http://qt-project.org/,也有已经编译好的版本:http://code.google.com/p/qt-msvc-installer/downloads/list直接下载安装。可能因为大学课程里会教授MFC的内容,一些非计算机专业的会偏向于采用MFC,个人觉得,对于非计算机专业而言,如果一定要选择一种GUI工具做开发的话,建议用Qt,容易上手,学习周期短)、FLTK(http://www.fltk.org/,FLTK也是跨平台的,是一种比较轻便的GUI工具,VTK官方发布版本没有提供对FLTK的接口,但可以借助类vtkFlRenderWindowInteractor,来实现VTK与FLTK的整合)等等,VTK的源码目录里(VTK-5.10\Examples\GUI)包含有VTK与Qt、MFC、Tcl等工具的整合。考虑到VTK对Qt的特殊照顾(VTK提供了很多针对Qt的类可以非常方便地与Qt整合),以及Qt自身的一些性质(如易用性、跨平台等),我们参考了VTK自带的一些例子,给出了VTK与Qt整合的详细步骤。

1.   CMakeLists.txt文件

我们已经知道了VTK工程的管理是用CMake的,而Qt自身有qmake工具,如果对于一些小工程而言,单纯的Qt程序用qmake来构建工程,确实很方便,但如果随着工程复杂度的增加以及工程依赖其他的函数库时,使用CMake来管理工程或许是一个明智的选择。而且随着你对CMake语法的了解,你会发现用CMake来管理工程是一件非常棒的事情。

我们先看看对于单纯的Qt工程,怎么来写CMakeLists.txt脚本文件。

1.1 用CMake来管理Qt工程

官方对于这个话题给出的解释在这里。我们引用一下这篇博文的图,然后给出每句CMakeLists.txt脚本的注释,结合这个图以及脚本的注释,相信你应该能明白了。

 

#----------------------------------------------

# 下面这两行,没什么好解释的

cmake_minimum_required( VERSION 2.8 )

project( YourProjectName )

 

#----------------------------------------------

# 下面这两行,也没什么好解释的

find_package( Qt4 REQUIRED )

include( ${QT_USE_FILE} )

 

#----------------------------------------------

# 程序所有源文件。<TODO:在此处添加源文件>

# 定义变量Project_SRCS,其值为所列的文件列表

SET( Project_SRCS

    main.cpp

  )

 

#----------------------------------------------

# 程序所有UI文件。<TODO:在此处添加UI文件>

# 定义变量Project_UIS,其值为所列的文件列表

SET( Project_UIS

    YourQtWindows.ui

)

 

#----------------------------------------------

# 所有包含Q_OBJECT的头文件。<TODO:在此处添加头文件>

# 定义变量Project_MOC_HDRS,其值为所列的文件列表

SET( Project_MOC_HDRS

    YourQtProjectFiles.h

)

 

#-----------------------------------------------

# 通过Qt的uic.exe生成UI文件对应的ui_XXXX.h文件

# 将生成的ui_XXXX.h文件放在变量Project_UIS_H里,

# QT4_WRAP_UI就是干这个事情。

QT4_WRAP_UI( Project_UIS_H ${Project_UIS} )

 

#-----------------------------------------------

# 通过Qt的moc.exe生成包含Q_OBJECT的头文件对应的

# moc_XXXX.cxx文件,将生成的moc_XXXX.cxx文件放在

# 变量Project_MOC_SRCS里。QT4_WRAP_CPP就是干这个事情。

QT4_WRAP_CPP( Project_MOC_SRCS ${Project_MOC_HDRS} )

 

#-----------------------------------------------

# Qt的MOC和UIC程序生成的moc_XXXX.cxx和ui_XXXX.h

# 等文件是存放在CMake的“Where to build the binaries"

# 里指定的目录里,所以必须都这些路径包含进来。

INCLUDE_DIRECTORIES( ${Project_SOURCE_DIR}

                     ${CMAKE_CURRENT_BINARY_DIR}

                   )

 

#-----------------------------------------------                          

# Qt程序如果有资源文件(*.qrc),要包含资源文件,

# 然后用Qt的rcc.exe生成相应的qrc_XXXX.cpp文件。

# QT4_ADD_RESOURCES就是干这个事情。

SET( Project_RCCS YourProject.qrc)

QT4_ADD_RESOURCES( Project_RCC_SRCS ${Project_RCCS})

 

#-----------------------------------------------

# 根据程序的cpp文件、头文件以及中间生成的ui_XXXX.h、

# moc_XXXX.cxx、qrc_XXXX.cxx等生成可执行文件,并链接

# Qt的动态库(Qt的动态库都定义在QT_LIBRARIES变量里了)

ADD_EXECUTABLE( YourProjectName

                ${Project_SRCS}

                ${Project_UIS_H}

                ${Project_MOC_SRCS}

                ${Project_RCC_SRCS}                           

              )

TARGET_LINK_LIBRARIES ( YourProjectName ${QT_LIBRARIES} )

1.2 用CMake来管理Qt与VTK工程

我们在上面的基础上添加VTK相关的CMake脚本文件,如下:

#----------------------------------------------------------------------------------

cmake_minimum_required( VERSION 2.8 )

project( CombineQtAndVTK )

 

#----------------------------------------------------------------------------------

find_package( VTK REQUIRED )

find_package( Qt4 REQUIRED )

 

include( ${VTK_USE_FILE} )

include( ${QT_USE_FILE} )

 

#----------------------------------------------------------------------------------

SET( PROJECT_SRCS

    main.cpp

    ProjectMainWindow.cpp

    )

 

SET( PROJECT_UIS

    ProjectMainWindow.ui

)

 

SET( PROJECT_MOC_HDRS

  ProjectMainWindow.h

)

 

#----------------------------------------------------------------------------------

QT4_WRAP_UI( PROJECT_UIS_H

             ${PROJECT_UIS}

           )

 

QT4_WRAP_CPP( PROJECT_MOC_SRCS

              ${PROJECT_MOC_HDRS}

            )

 

#----------------------------------------------------------------------------------

INCLUDE_DIRECTORIES( ${PROJECT_SOURCE_DIR}

                     ${CMAKE_CURRENT_BINARY_DIR}

                     ${VTK_DIR}

                   )

 

ADD_EXECUTABLE( CombineQtAndVTK

                ${PROJECT_SRCS}

                ${PROJECT_UIS_H}

                ${PROJECT_MOC_SRCS}

              )

 

TARGET_LINK_LIBRARIES ( CombineQtAndVTK

  ${VTK_LIBRARIES}

  QVTK

  )

以上的脚本除了红色字体标注的跟1.1注释的不太像之外,其他的都一样,不再解释。

1.3 CMake脚本里增加工程环境变量的加载

很多非计算机专业的用户在使用VTK进行编程时,经常会碰到类似下图所示的一些错误。

碰到这样的错误以后,可能很多用户就不知道怎么处理了,其实上面的提示信息已经写得非常清楚了,就是缺少“vtkCommon.dll”文件。但是又有人会说:我的电脑里明明有这个文件存在啊,为什么会找不到呢?

一般的解决方法可能是:

方法一:将缺少的dll文件全部拷贝的工程的Debug或者Release目录下(拷贝的时候要注意你编译的VTK是Debug版本的还是Release版本的,如果拷错的话,又会出现其他不可预知的错误了)。但是这个方法是你每建一个工程,运行工程之前得把缺少的动态库文件又要拷贝过去,如果你不嫌麻烦的话,可以采用。

方法二:将缺少的dll文件全部拷贝到Windows系统的目录下,即C:\Windows\system32或者C:\Windows\system目录下,这个方法是你拷贝一次,以后再基于你拷贝的VTK动态库的工程运行的时候问题都解决了。但它同样有一个问题,假如你电脑里的VTK升级成别的版本,重新编译了一份动态库,或者是同时在你电脑里编译了好几个版本的VTK,这个时候就有点凌乱了。

为什么这两种方法都可以解决问题?原来动态编译的程序在启动的时候,会搜索程序所在的目录以及系统环境变量PATH所列的目录,如果这些目录有该程序需要的动态库时,就加载它们,如果没有,就提示无法加载相应动态库的错误。

可以在工程的CMakeLists.txt文件里添加一些脚本,把系统的PATH环境变量作一些更改,在工程启动之前加载这些环境变量。也就是(在工程的CMakeLists.txt最后添加):

#-----------------------------------------------------------------------------------

# Construct a list of paths containing runtime directories for project applications on Windows

set(PROJECT_RUNTIME_PATH  "${VTK_LIBRARY_DIRS}/@VS_BUILD_TYPE@;

${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/@VS_BUILD_TYPE@"

    )

if(QT4_FOUND)

  set(PROJECT_RUNTIME_PATH "${PROJECT_RUNTIME_PATH};${QT_LIBRARY_DIR}/../bin")

endif()

 

include(CreateWindowsBatchScript.cmake)

 

# If we are under Windows, create two batch files which correctly

# set up the environment for the application and for Visual Studio

if(WIN32)

  set(VS_SOLUTION_FILE "${PROJECT_BINARY_DIR}/${PROJECT_NAME}.sln")

  foreach(VS_BUILD_TYPE debug release)

    CreateWindowsBatchScript("${CMAKE_SOURCE_DIR}/StartVS.bat.in"

      ${PROJECT_BINARY_DIR}/StartVS_${VS_BUILD_TYPE}.bat

      ${VS_BUILD_TYPE})

  endforeach()

endif(WIN32)

 

以上的脚本也不是特别复杂,但提到了两个文件:CreateWindowsBatchScript.cmake以及StartVS.bat.in。这两个文件的内容分别是:

CreateWindowsBatchScript.cmake:

function(CreateWindowsBatchScript in out build_type)

  if(VTK_DIR)

    set(VTK_BIN_DIR "${VTK_DIR}/bin/${build_type}")

  else()

    set(VTK_BIN_DIR)

  endif()

 

  set(VS_BUILD_TYPE ${build_type})

  configure_file(${in} ${out} @ONLY)

  # substitute again

  configure_file(${out} ${out} @ONLY)

endfunction()

 

StartVS.bat.in

@set CL=/D_CRT_SECURE_NO_DEPRECATE /D_CRT_NONSTDC_NO_DEPRECATE

@set LINK=/LARGEADDRESSAWARE

 

PATH=@PROJECT_RUNTIME_PATH@;%PATH%

"@VS_SOLUTION_FILE@"

 

将工程通过CMake的configure->generate以后,即可生成StartVS_debug.bat和StartVS_release.bat两个脚本文件。如果你要编译、运行Debug版本的工程,即双击StartVS_debug.bat文件打开对应的工程,同理,Release版本的也一样。一旦按这种方式打开相应的工程,就不用再担心类似“无法加载***.dll文件”的错误了。如果你的程序还增加了ITK等函数库,也可以照着上面的脚本作相应的修改。

注意:使用时将CreateWindowsBatchScript.cmakeStartVS.bat.in两个文件与工程的CMakeLists.txt放在同一级目录里。即类似下图的目录结构:

2.   用QVTKWidget整合Qt&VTK

Qt与VTK的整合可以使用VTK提供的类QVTKWidget,看这个类名就知道这个类其实就是一个Qt里的Widget (QVTKWidget派生自QWidget),所以可以把它当作普通的Qt里的Widget来使用,甚至可以在Qt Designer里像Qt的其他标准控件一样拖来拖去。

2.1 在Qt Designer里集成

要实现QVTKWidget在Qt Designer里像Qt的其他标准控件一样拖来拖去,需要把编译生成的QVTKWidgetPlugin.dll/QVTKWidgetPlugin.lib(Release版本)复制到Qt的安装目录里的plugins\designer目录下。完了以后,你会在Qt Designer里面看到如下的控件:

 

2.2 读入一幅图像,并在Qt界面上显示

接下来,我们来完成一个小功能,就是读入一幅JPG图像,然后在Qt界面上,用VTK来显示。功能非常简单,程序也非常简单。上代码:

ProjectMainWindow.h:

#ifndef Project_MainWindow_H

#define Project_MainWindow_H

 

#include <QMainWindow>

#include "ui_ProjectMainWindow.h"

 

#include <vtkSmartPointer.h>

 

class vtkImageViewer2;

class vtkRenderer;

 

 

class ProjectMainWindow : public QMainWindow, public Ui::ProjectMainWindow

{

       Q_OBJECT

 

public:

       ProjectMainWindow();

       ~ProjectMainWindow();

 

private slots:

       //响应打开图像文件的槽函数

       void onOpenSlot();

 

private:

       vtkSmartPointer< vtkImageViewer2 > m_pImageViewer;

       vtkSmartPointer< vtkRenderer > m_pRenderder;

};

 

#endif

 

ProjectMainWindow.cpp:

#include "ProjectMainWindow.h"

 

#include <QFileDialog>

#include <QDir>

 

#include <vtkRenderWindow.h>

#include <vtkRenderer.h>

#include <vtkImageViewer2.h>

#include <QVTKWidget.h>

#include <vtkJPEGReader.h>

#include <vtkImageActor.h>

 

ProjectMainWindow::ProjectMainWindow()

{

       setupUi(this);

 

       m_pImageViewer  = vtkSmartPointer< vtkImageViewer2 >::New();

       m_pRenderder      = vtkSmartPointer< vtkRenderer >::New();

 

       // 设置m_QVTKWidget的渲染器

       m_QVTKWidget->GetRenderWindow()->AddRenderer(m_pRenderder);

 

       //连接打开的信号与相应的槽

       connect( m_OpenAction, SIGNAL( triggered() ), this, SLOT( onOpenSlot() ) );

}

 

ProjectMainWindow::~ProjectMainWindow()

{

}

 

void ProjectMainWindow::onOpenSlot()

{

       QString filter;

       filter = "JPEG p_w_picpath file (*.jpg *.jpeg)";

 

       QDir dir;

       QString fileName = QFileDialog::getOpenFileName( this, 

                                 QString(tr("打开图像")), dir.absolutePath() , filter );

       if ( fileName.isEmpty() == true ) return;

 

       // 支持带中文路径的读取

       QByteArray ba = fileName.toLocal8Bit();

       const char *fileName_str = ba.data();

 

       // 用vtkJPEGReader读取JPG图像

       vtkSmartPointer<vtkJPEGReader> reader = vtkSmartPointer<vtkJPEGReader>::New();

       reader->SetFileName(fileName_str);

 

       // 将reader的输出作为m_pImageViewer的输入,并设置m_pImageViewer与渲染器m_pRenderer的关联

       m_pImageViewer->SetInput(reader->GetOutput());

       m_pImageViewer->UpdateDisplayExtent();

       m_pImageViewer->SetRenderWindow(m_QVTKWidget->GetRenderWindow());

       m_pImageViewer->SetRenderer(m_pRenderder);

       m_pImageViewer->SetupInteractor(m_QVTKWidget->GetRenderWindow()->GetInteractor());

       m_pImageViewer->SetSliceOrientationToXY(); //默认就是这个方向的

       m_pImageViewer->GetImageActor()->InterpolateOff();

       m_pRenderder->ResetCamera();

       m_pRenderder->DrawOn();

       m_QVTKWidget->GetRenderWindow()->Render();

}

 

程序运行结果:

2.3 用vtkEventQtSlotConnect实现VTK事件与Qt槽的连接

类vtkEventQtSlotConnect可以实现VTK的事件与Qt的槽函数的连接,VTK的事件主要在vtkCommand.h文件里定义,包括鼠标单击、鼠标双击、鼠标移动等等,如:

vtkCommand::ProgressEvent

vtkCommand::ErrorEvent

vtkCommand::WarningEvent

vtkCommand::PickEvent

vtkCommand::StartPickEvent

vtkCommand::EndPickEvent

vtkCommand::CharEvent

vtkCommand::KeyPressEvent

vtkCommand::KeyReleaseEvent

vtkCommand::LeftButtonPressEvent

vtkCommand::LeftButtonReleaseEvent

vtkCommand::MouseMoveEvent

……

具体的代码实现:

private slots:

       //响应鼠标移动的消息,实时输出鼠标的当前位置

       void updateCoords(vtkObject* obj);

 

private:

       vtkEventQtSlotConnect* m_Connections;

源文件:

//构造函数里:

       m_Connections = vtkEventQtSlotConnect::New();

       m_Connections->Connect(m_QVTKWidget->GetRenderWindow()->GetInteractor(),

              vtkCommand::MouseMoveEvent,

              this,

              SLOT(updateCoords(vtkObject*)));

 

//槽函数的实现

void ProjectMainWindow::updateCoords(vtkObject* obj)

{

       // 获取交互器

       vtkRenderWindowInteractor* iren = vtkRenderWindowInteractor::SafeDownCast(obj);

 

       // 获取鼠标的当前位置

       int event_pos[2];

       iren->GetEventPosition(event_pos);

 

       QString str;

       str.sprintf("x=%d : y=%d", event_pos[0], event_pos[1]);

       m_StatusBar->showMessage(str);

}

程序运行结果:

示例代码及该博文文档下载地址:http://download.csdn.net/detail/www_doling_net/5137375

 

本文来源: http://blog.csdn.net/www_doling_net/article/details/8668870

转载于:https://blog.51cto.com/2845385/1157522

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/436386.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WinCE驱动调试助手V2.5

http://www.cnblogs.com/we-hjb/archive/2008/12/15/1280822.html http://blog.chinaunix.net/u1/49088/showart.php?id1279989 工欲善其事&#xff0c;必先利其器。做WinCE驱动的开发已有一段时间了&#xff0c;WinCE驱动调试助手也跟着更新了很多功能。现在只要做驱动&#…

Web应用系统中数据传递的方式汇总

本文转载自sina_blog(siangzhang) 目录 1 Socket方式 2 ftp/文件共享服务器方式 3 数据库共享数据方式 4 message方式 5 案例 随着近年来SOA&#xff08;面向服务技术架构&#xff09;的兴起&#xff0c;越来越多的应用系统开始进行分布式的设计和部署。 系统由原来单一…

【转】CT (电子计算机断层扫描)

CT(Computed Tomography)&#xff0c;即电子计算机断层扫描&#xff0c;它是利用精确准直的X线束、γ射线、超声波等&#xff0c;与灵敏度极高的探测器一同围绕人体的某一部位作一个接一个的断面扫描&#xff0c;具有扫描速度快&#xff0c;图像清晰等特点&#xff0c;可用于多…

Linux:chmod命令-修改文件或目录的权限

给新安装的tomcat/bin目录下的所有文件增加执行权限&#xff08;所有用户、组&#xff09; chmod -R ax /usr/local/tomcat/bin ------------------------------------------------------------------------------------------------------------------- 关于具体的chmod命令…

【转】详解冠状面_水平面_矢状面_窗宽_窗位

在接触人工智能医疗方面时&#xff0c;单是学习算法和代码原理还不够&#xff0c;需要一定的医学影像知识储备。 B超、CT、MR等都算是医疗影像&#xff0c;在现实生活中&#xff0c;从医院检查身体后拿到的胶片是处理过后的二维图像。这些医疗影像其实是三维的。 最常见的图片格…

js+ asp.Net ajax开发163邮箱效果(列表底色、多选拖动等)--checkBox多选

163邮件一个比较爽的功能就是可以通过多选邮件&#xff0c;拖动到左侧的文件夹列表&#xff0c;实现邮件归类的功能关于我对拖动分配的实现将在后文写出这里说说在CheckBox的选择中做得尝试和实现的效果、方法1。点击表格Title实现全选每行这个早有人做了,我这里借鉴一下 一块贴…

【转】医学图像中的窗宽、窗位!!

在CT等医学影像显示领域&#xff0c;我们经常会听到窗宽&#xff08;Window Width,简写WW&#xff09;、窗位&#xff08;Window Level,简写WL&#xff09;的概念&#xff0c;那么到底什么是窗宽、窗位&#xff0c;它们跟医学图像之间的关系又是什么&#xff1f; 先说一下CT值…

【Excel】使用VLOOKUP+IF实现多列条件匹配查询

excel中vlookup函数为精准匹配查找&#xff0c;但此函数局限于单列的精准匹配&#xff0c;如果需求是多列条件进行匹配&#xff0c;怎么通过vlookup函数实现呢&#xff1f; 思路&#xff1a;通过if函数将多列拼成一列再通过vlookup函数进行精准匹配 具体公式为VLOOKUP($F2&…

【转】解密Qt安装目录的结构

转自&#xff1a;C语言中文网 强力推荐 网址&#xff1a;http://c.biancheng.net/view/3866.html 了解 Qt 安装目录的结构虽然不是编程必须的&#xff0c;但是它能练就我们的内功&#xff0c;让我们对 Qt 的编程环境了如指掌。Windows 和 Linux 下 Qt 安装目录的结构非常相似…

发一个自己写的2440驱动1602的资料(电路+代码)

上个星期把MINI2440板上的富余数据线引了出来&#xff0c;看着以前丢下的1602突然有了想用ARM9驱动它的冲动&#xff0c;于是就开始干了。 代码是从以前刚学C51的时候改的&#xff0c;呵呵&#xff0c;看见以前写的代码真觉得很烂&#xff0c;现在已经整理好了。 虽说有点牛刀…

【转】10.Qt编程涉及的术语和名词

本节我们来介绍一下使用 Qt 编程过程中常用的术语和名字&#xff0c;它们不一定专属于 Qt&#xff0c;在其它的 C/C 开发过程中也会使用到。 Project Project 的中文翻译是“项目”或者“工程”&#xff0c;这里的项目是指为实现某个相对独立功能的程序代码合集&#xff0c;这…

【转】17.Qt界面布局管理详解

在上一节&#xff0c;通过一个简单的应用程序&#xff0c;分析了 Qt 创建的 GUI 应用程序中各个文件的作用&#xff0c;剖析了可视化设计的UI文件是如何被转换为 C 的类定义&#xff0c;并自动创建界面的。这些是使用 Qt Creator 可视化设计用户界面&#xff0c;并使各个部分融…

SQL Server 清空或删除所有数据库表中的数据

方法一&#xff1a; --生成数据库脚本的方法最快,处理的也最好 sql2000企业管理器 --右键要清理的数据库 --所有任务 --生成SQL脚本 --<常规>里选择"生成全部对象脚本"","在脚本文件中包含说明性标题&quo…

【转】QT介绍

一、Qt介绍 Qt&#xff0c;坦白来说&#xff0c;并不只是一个界面库&#xff0c;他是C编程思想的集大成者。它是一个经过完善的C应用程序框架。使用Qt&#xff0c;在一定程度上你获得的是一个“一站式”、“全方位”的解决方案&#xff0c;STL、string、XML、数据库、网络这些…

二叉树序列化

文件的大小尽可能的小。 想了四种方法&#xff1a; 第一种方法&#xff1a;把二叉树按前序和中序遍历一遍&#xff0c;存两次二叉树。 第二种方法&#xff1a;将二叉树按左枝为0&#xff0c;右枝为1进行路径编码&#xff0c;那么每个节点都可以表示成&#xff0c;节点信息和路径…

【转】OWIN是什么?

OWIN的英文全称是Open Web Interface for .NET。 如果仅从名称上解析&#xff0c;可以得出这样的信息&#xff1a;OWIN是针对.NET平台的开放Web接口。 那Web接口是谁和谁之间的接口呢&#xff1f;是Web应用程序与Web服务器之间的接口&#xff0c;OWIN就是.NET Web应用程序与W…

java 切换panel会闪烁_【19期】为什么Java线程没有Running状态?

Java虚拟机层面所暴露给我们的状态&#xff0c;与操作系统底层的线程状态是两个不同层面的事。具体而言&#xff0c;这里说的 Java 线程状态均来自于 Thread 类下的 State 这一内部枚举类中所定义的状态&#xff1a;什么是 RUNNABLE&#xff1f;直接看它的 Javadoc 中的说明&am…

【转】PSTools工具使用方法

转自&#xff1a;https://blog.csdn.net/hongkaihua1987/article/details/85230082 https://blog.51cto.com/winhe/1742633 本篇文章是基于pstools 2.7版本。pstools是sysinternals出的一个功能强大的nt/2k远程管理工具包。 它的主页为http://www.sysinternals.com/ 下载地址…

多标签文本分类数据集_标签感知的文档表示用于多标签文本分类(EMNLP 2019)...

原文&#xff1a;Label-Specific Document Representation for Multi-Label Text Classification&#xff08;EMNLP 2019&#xff09;多标签文本分类摘要&#xff1a;本文使用标签相关的注意力网络学习文档表示。该方法在构建文档表示时使用了标签的语义信息来决定标签和文档的…

a.pop啥意思python_python中pop什么意思

python中pop什么意思,赋值,移除,元素,位置,变量python中pop什么意思易采站长站&#xff0c;站长之家为您整理了python中pop什么意思的相关内容。python中pop()将列表指定位置的元素移除&#xff0c;同时可以将移除的元素赋值给某个变量&#xff0c;不填写位置参数则默认删除最后…