精华内容
下载资源
问答
  • 关系抽取常用方法
    万次阅读
    2019-03-01 08:32:39

    关系抽取通常会基于以下几种方式去做:

    • 基于规则
    • 监督学习
    • 半监督 & 无监督学习
      • Bootstrap
      • Distant Supervision
      • 无监督学习

    下面分别举例去说明方法的实现方式。

    1.基于规则的方法,表示 “is - a”

    目的:找出尽可能多的拥有"is - a"关系的实体对(实体1,is - a,实体2)
    比如我们有一些文章:

    1. " … apple is a fruit … "
    2. " … fruit such as apple … "
    3. " … fruit including apple , banala … "

    拿到上述文章时,我们要先设计一些规则,例如:

    • X is a Y
    • Y such as X
    • Y including X

    然后通过这些规则我们可以对上述文章进行关系抽取,建立以下关系:

    实体1实体2
    applefruit
    banalafruit
    • 方法优点
      • 比较准确
      • 对于垂直场景,比较适合(具有针对性)
    • 方法缺点
      • 信息缺乏覆盖率(low recall rate)
      • 人力成本较高
      • 很难设计(规则冲突、重叠)

    2.监督学习

    在使用监督学习的方法时,需要做以下准备:

    • 定义关系类型
    • 定义好实体类型
    • 准备训练数据
      • 实体标注
      • 实体之间的关系标注

    下面拿一个经典的例子用以说明:
    例子:American Airlines, a unit of AMR, immediately matched the move, spokesman Tim Wagner said.

    首先我们需要运用命名实体识别(NER)工具来分析这句话,可以找到:

    • ORG : American Airlines
    • PER:Tim Wagner

    然后我们需要提取特征,将(特征(American Airlines),特征(Tim Wagner))放入分类算法。
    特征提取部分可以有以下方式:

    1. Bag-of-words
      例如我们可以用unigram提取出(American Airlines,Tim Wagner),或者使用Bi-gram提取出(American Airlines a,Tim Wagner said)
    2. pos-tagging
      提取出American Airlines和Tim Wagner的词性
    3. Bag-of-words feature
      a ,unit, of, AMR, immediately, matched, the, move, spokesman
    4. between words pos-tagging
      抽取(a ,unit, of, AMR, immediately, matched, the, move, spokesman)的词性
    5. head feature
      (Airlines,Wagner)
    6. 实体类别
      (ORG,PER)
    7. 句法分析

    以上都是词相关的特征,还可以抽取一些位置特征:例如“两个单词间有多少单词”,“单词是否在句子的第一位”,“句子在文不能中的位置”等。

    在特征提取完后,可以将训练数据放入LR,SVM或者神经网络模型中进行训练。

    3.Bootstrap方法

    Bootstrap的大致思路如下:

    • 目标关系:burial place
    • Seed tuple: [Mark Twain, Elmira]
    • 寻找包含Mark Twain, Elmira的句子
      • " Mark Twain is burind in Elmira, NY."
        -> X is burind in Y
      • " The grave of Mark Twain is in Elmira"
        -> TH grave of X is in Y
      • " Elmira is Mark Twain’s final resting place"
        -> Y is X’s final resting place
    • 利用这些pattern去搜索更多的Tuple

    它有以下缺点:

    • 对于每一种关系都需要sed tuples
      • 对seed tuples比较敏感
    • 循环会导致错误的叠加
    • 精确率不高
    • 没有概率的解释如confidence score

    所以在传统的Bootstrap的框架下,我们引申出了snowball

    • step1 : 生成模板(Pattern)
      比如我们有一个 [LOC] based [ORG]模板,如果文本中出现了 xxx base xxx ,此时在Bootstrap中是匹配不到的。snowball在此时做了优化,将模板部分进行向量化,然后将匹配的文本的实体间的内容,做相似度的对比。具体细节就不在这里多展开了,感兴趣的同学可以阅读原论文.
    • step2: 生成Tuples
      遍历文本数据,将相似度超过设定阈值的tuple保存下来
    • step3:评估Patterns和Tuples
      使用已有的Tuples去评估Patterns的准确率
      使用已有的Patterns评估Tuples的准确率
      Confidence(Tuple) = 1 - (1-Conf(pi))* … *(1-Conf(pk)) # 多个靠谱的Patterns的乘积
    4.半监督学习

    一般在半监督学习的方法中,我们会有一个少量标注label的数据Freebase以及大量未进行任何标注的Corpus text(Unlabel Text)
    在这里插入图片描述
    比如,在上述例子中,我们知道了Bill Gates 和 Micrrosoft是Founder的关系。所以通过第一条text,我们可以给Founder建立一个X founded Y 的Feature。
    在这里插入图片描述
    然后继续往下,同理我们也可以给Founder建立一个X, founded of Y 的Feature。
    这样当Feature足够多的时候,我们的traning data就会有一定的容错率。
    在这里插入图片描述
    继续往下,到第三句时,我们可以给CollegeAttended建立一个X attended Y 的Feature。
    在这里插入图片描述
    然后到第四句,我们可以新建一个sample,给Founder建立一个Y was founded by X 的Feature。
    此时我们就可以开始建立如下的Training data:

    XY
    X founded Y , X founder of YFounder
    X attended YCollegeAttended
    Y was founded by XFounder

    以上都是postive training data,我们可以找一些不存在与Freebase中的关系的实体,标记label为NO_RELATION,作为nagtive training data,然后将训练数据放入机器学习模型中建立模型。

    更多相关内容
  • sqlalchemy 常用数据类型有哪些?

    万次阅读 2018-08-09 16:45:47
     sqlalchemy常用数据类型 数据类型 python数据类型 说明 Integer int 整形 String str 字符串 Float float 浮点型 DECIMAL decimal.Decimal 定...

     

                                                       sqlalchemy常用数据类型

    数据类型python数据类型说明
    Integerint整形
    Stringstr字符串
    Floatfloat浮点型
    DECIMALdecimal.Decimal定点型
    Booleanbool布尔型
    Datedatetime.date日期
    DateTimedatetime.datetime日期和时间
    Timedatetime.time时间
    Enumstr枚举类型
    Textstr文本类型
    LongTextstr长文本类型

    既然我们知道sqlalchemy常用数据类型有哪些,下面我们就来看看这些数据类型的用法。

    首先,打开我们py代码编辑神器(pycharm),因为之前跟大家讲了许多关于数据库基本配置及连接的文章,在这里我就不在阐述了。而是直接在此基础上讲解sqlalchemy数据类型的用法。

    from sqlalchemy import create_engine,Column,Integer
    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy.orm.session import sessionmaker
    DIALCT = "mysql"
    DRIVER = "pymysql"
    USERNAME = "root"
    PASSWORD = "admin"
    HOST = "127.0.0.1"
    PORT = "3306"
    DATABASE = "test"
    DB_URI = "{}+{}://{}:{}@{}:{}/{}?charset=utf8".format(DIALCT,DRIVER,USERNAME,PASSWORD,HOST,PORT,DATABASE)
    engine = create_engine(DB_URI)
    Base = declarative_base(engine)
    session = sessionmaker(engine)()
    
    class Person(Base):
        __tablename__ = "person"
        id = Column(Integer , primary_key=True , autoincrement=True)
    
    
    Base.metadata.drop_all()
    Base.metadata.create_all()

    在讲解前,我们先测试下模型是否能够成功映射到数据库中,运行上述代码

    没有报错,我们在打开mysql命令行工具,输入以下命令

    嗯,person库表已成功映射到数据库中。

    OK,万事俱备。下面我们就逐一来讲类型的用法。

    第一种:Integer

    我们在Person模型中新增一个age字段

    class Person(Base):
        __tablename__ = "person"
        id = Column(Integer , primary_key=True , autoincrement=True)
        age = Column(Integer)

    然后向表中插入一条数据

    p = Person(age = 22)
    session.add(p)
    session.commit()

    运行上述代码,然后输入下方命令检查数据是否插入到表中以及该字段是否为int类型

    第二种:String

    我们先将age字段注释掉,然后从sqlalchemy导入String类型(使用某种数据类型前,记得将该数据类型从sqlalchemy导入,由于篇幅太长,我们下方数据类型省略该步骤),再新增一个name字段(括号中的20表示该字符串最大长度为20)

    class Person(Base):
        __tablename__ = "person"
        id = Column(Integer , primary_key=True , autoincrement=True)
        # age = Column(Integer)
        name = Column(String(20))

    插入一条数据试试

    p = Person(name = "tom")
    session.add(p)
    session.commit()

    运行上述代码,然后输入下方命令检查数据是否插入到表中以及该字段是否为string类型(映射到数据库,对应varchar类型)

    第三种:Float

    什么情况下会用到Float类型?比如存储体重、价格等.....

    class Person(Base):
        __tablename__ = "person"
        id = Column(Integer , primary_key=True , autoincrement=True)
        # age = Column(Integer)
        # name = Column(String(20))
        price = Column(Float)

    插入测试数据

    p = Person(price = 123.456789)
    session.add(p)
    session.commit()

    运行上述代码,然后输入下方命令检查数据是否插入到表中以及该字段是否为float类型

    嗯!!我明明写的是123.456789,但是存储到数据库中却变成了123.457,为什么会这样呢?原因我之前说过:float单精度类型,单精度数据类型存储到表中容易被丢失。既然我们知道了原因,哪如何解决呢??方法就是用接下来要讲的定点类型(DECIMAL)。

    第四种:DECIMAL

    DECIMAL可以防止数据jingd

    class Person(Base):
        __tablename__ = "person"
        id = Column(Integer , primary_key=True , autoincrement=True)
        # age = Column(Integer)
        # name = Column(String(20))
        # price = Column(Float)
        price = Column(DECIMAL(7,3))

    DECIMAL有两个参数,第一个参数用于指定一共多少位数,第二个参数用于指定小数点后最多多少位数

    例如:DECIMAL(4,2)表示一共存储4位数字,小数点后最多有两位

    如果传入不符合规则数值时会报如下错误:

    所以我们在插入数据时一定要遵守参数规则

    p = Person(price = 1234.567)
    session.add(p)
    session.commit()

    运行上述代码,然后输入下方命令检查数据是否插入到表中以及该字段是否为decimal类型

    第五种:Boolean

    class Person(Base):
        __tablename__ = "person"
        id = Column(Integer , primary_key=True , autoincrement=True)
        # age = Column(Integer)
        # name = Column(String(20))
        # price = Column(Float)
        # price = Column(DECIMAL(7,3))
        delete = Column(Boolean)

    插入数据试试。我们知道,1代表true,0代表false

    p = Person(delete = 1)
    session.add(p)
    session.commit()

    运行上述代码,然后输入下方命令检查数据是否插入到表中(存储到数据库中对应tinyint类型)

    第六种:Enum

    什么情况下会用到枚举类型呢?比如用户填写性别时,固定只能选男或者女,不可能不男不女,对吧!

    Enum()括号中为枚举列表,在这个里面可以罗列出可输入的值!

    class Person(Base):
        __tablename__ = "person"
        id = Column(Integer , primary_key=True , autoincrement=True)
        # age = Column(Integer)
        # name = Column(String(20))
        # price = Column(Float)
        # price = Column(DECIMAL(7,3))
        # delete = Column(Boolean)
        sex = Column(Enum("男","女"))

    我们先插入一条错误数据试试

    p = Person(sex="不男不女")
    session.add(p)
    session.commit()
    运行代码、结果报如下错误:
    

    我们再输入一条正确数据试试

    嗯,数据成功插入到表中,且数据类型为enum。

    第七种:Date

    Date只能存储指定的年月日,不能存储时分秒

    说到日期类型,相信大家都熟悉,比如某年某月某日生。嗯、下面咱们就谈谈这个Date类型。

    class Person(Base):
        __tablename__ = "person"
        id = Column(Integer , primary_key=True , autoincrement=True)
        # age = Column(Integer)
        # name = Column(String(20))
        # price = Column(Float)
        # price = Column(DECIMAL(7,3))
        # delete = Column(Boolean)
        # sex = Column(Enum("男","女"))
        create_time = Column(Date)

    然后从datetime导入datetime这个包,将数据添加至数据库

    from datetime import datetime
    p = Person(create_time = datetime(2018,8,8))
    session.add(p)
    session.commit()

    datetime()中的数值用于传递指定的年月日

    运行并查看数据结果如下:

    第八种:DateTime

    DateTime存储指定的年月日时分秒

    class Person(Base):
        __tablename__ = "person"
        id = Column(Integer , primary_key=True , autoincrement=True)
        # age = Column(Integer)
        # name = Column(String(20))
        # price = Column(Float)
        # price = Column(DECIMAL(7,3))
        # delete = Column(Boolean)
        # sex = Column(Enum("男","女"))
        # create_time = Column(Date)
        create_time = Column(DateTime)

    添加测试数据

    p = Person(create_time = datetime(2018,8,8,16,11,50))
    session.add(p)
    session.commit()

    datetime()括号中传递指定的年月日时分秒

    运行并查看数据结果如下:

    第九种:Time

    Time只能存储时分秒,不能存储年月日

    class Person(Base):
        __tablename__ = "person"
        id = Column(Integer , primary_key=True , autoincrement=True)
        # age = Column(Integer)
        # name = Column(String(20))
        # price = Column(Float)
        # price = Column(DECIMAL(7,3))
        # delete = Column(Boolean)
        # sex = Column(Enum("男","女"))
        # create_time = Column(Date)
        # create_time = Column(DateTime)
        create_time = Column(Time)

    插入测试数据,time()后面传递关键字参数,用于指定时分秒

    from datetime import datetime,time
    p = Person(create_time=time(hour=12,minute=20,second=50))
    session.add(p)
    session.commit()

    运行并查看结果:

     

    第十中:Text

    这个没什么好讲的啊,当字符串长度比较长时就可以使用Text类型

    class Person(Base):
        __tablename__ = "person"
        id = Column(Integer , primary_key=True , autoincrement=True)
        # age = Column(Integer)
        # name = Column(String(20))
        # price = Column(Float)
        # price = Column(DECIMAL(7,3))
        # delete = Column(Boolean)
        # sex = Column(Enum("男","女"))
        # create_time = Column(Date)
        # create_time = Column(DateTime)
        # create_time = Column(Time)
        content = Column(Text)

    插入数据:

    p = Person(content = "人最需要的是学习")
    session.add(p)
    session.commit()

    运行并查看结果:

    第十一种:LongText

    由于Text的存储长度有限,我们就可以使用LongText来存储数据。

    由于LongText类型在mysql数据库才有,其它数据库没有该数据类型,在使用前,记得从mysql数据库导入该数据类型

    from sqlalchemy.dialects.mysql import LONGTEXT

    插入数据:

    p = Person(content = "我要给它做广告,让它在人群中最闪耀!")
    session.add(p)
    session.commit()

    运行上述代码并查看结果:

    文章篇幅有点长,由于时间关系,写的有点不太详细。文章若有不当之处,望大家指出!

     

    展开全文
  • 常用的图表类型有哪些?

    千次阅读 2020-11-05 18:51:17
    今天我们就针对于常见的几图表类型来为大家做简单介绍,如此就能够更好的帮助我们进行数据分析,实现一些抽象化思维的完美转换。 大家都听过“数据可视化”,也知道要用直观的图表让受众理解复杂多变的数据。但...

    ​图表可以说在企业当中运用相当广泛,每到月度、季度、年度总结的时候,用到最多的、最有说服力的就是数据了。让数据说话,摆事实、讲道理才能赢得上级的肯定。今天我们就针对于常见的几个图表类型来为大家做简单介绍,如此就能够更好的帮助我们进行数据分析,实现一些抽象化思维的完美转换。

    大家都听过“数据可视化”,也知道要用直观的图表让受众理解复杂多变的数据。但很多人往往只注重让图表看上去“高大上”,而忽视了“这些的数据究竟适合哪些图表来表达”。结果很多人花了大力气做可视化图表,却没达到想要的效果。

    那么,如何让数据“说人话”,让受众更快速地懂你呢?本文梳理了可视化的相关内容,分享给大家。

    一、你的数据适合哪种可视化图表

    数据可视化有很多既定的图表类型,下面我们分别来谈谈这些图表类型,他们的使用场景,以及使用的优势和劣势。

    1、图表类型—柱状图

    11.jpg

    使用场景:它的适用场合是二维数据集(每个数据点包括两个值 x 和 y),但只有一个维度需要比较。

    优势:柱状图利用柱子的高度,反映数据的差异。肉眼对高度差异很敏感,辨识效果非常好。

    劣势:柱状图的局限在于只适用中小规模的数据集。

    2、图表类型—折线图

    22.jpg

    使用场景:折线图适合二维的大数据集,尤其是那些趋势比单个数据点更重要的场合。它还适合多个二维数据集的比较。

    优势:容易反应出数据变化的趋势。

    3、图表类型—饼图

    33.jpg

    使用场景:适用简单的占比图,在不要求数据精细的情况下可以使用。

    优势:可以清晰表达同一个整体中,不同成分的比例关系。

    劣势:肉眼对面积大小不敏感。

    饼状图是面积图的一种,但是因为其劣势明显,所以在使用饼状图及其他类型面积图时,注意用数字标明占比情况。

    4、图表类型—漏斗图

    44.jpg

    使用场景:漏斗图适用于业务流程比较规范、周期长、环节多的流程分析,通过漏斗各环节业务数据的比较,能够直观地发现和说明问题所在。

    优势:能够直观地发现和说明问题所在。

    在网站分析中,通常用于转化率比较,它不仅能展示用户从进入网站到实现购买的最终转化率,还可以展示每个步骤的转化率。

    劣势:单一漏斗图无法评价网站某个关键流程中各步骤转化率的好坏。

    5、图表类型—地图

    55.jpg

    使用场景:适用于有空间位置的数据集。

    优劣势:特殊状况下使用。

    6、图表类型—雷达图

    66.jpg

    雷达图是一种类似蜘蛛网的网状图,可以对两组项目的多种变量的项目进行对比,它可以反映数据相对中心点和其他数据点的变化情况,可以清楚地反映事物的整体情况。

    使用场景:雷达图适用于多维数据(四维以上),且每个维度必须可以排序。

    但是,它有一个局限,就是数据点最多6个,否则无法辨别,因此适用场合有限。

    劣势:需要注意的时候,用户不熟悉雷达图,解读有困难。使用时尽量加上说明,减轻解读负担。

    其实想要实现炫酷的数据可视化,工具只是其中一方面,如何结合自身的需求和场景选择适合自己的工具才是最重要的;而Smartbi作为一款数据分析工具,最大的好处就是简单容易上手,而且不需要你有编码和程序基础,就可以实现超炫的图表效果,让你的老板看傻眼!

    销售沙盘情况分析.png

    某4S店汽车营销大屏.png

    下面,我们来探讨下如何用Smartbi来制作一个可视化的大屏吧。

    现在我们仔细来看下这些可视化图表,他们是由一个个简单的表格、环形饼图、地图、横条柱图、词云图等组成。

    44.png

    我们将整体目标划分一个个小计划进行的话,只要我们会制作这些单独的图表,然后放到同一个界面进行展示,然后再进行各个组件排版与整体可视化仪表盘的风格调整就可以形成一个炫酷的可视化数据仪表盘了。

    那可能这时候大家会有所顾虑,像图表所展示的折线图和柱状图这么好看,我们平常再excel等工具做很单一且不好看,如何处理。这个时候smartbi可以帮到你,Smartbi 支持完整ECharts 图形库,支持各种各样的图形,包含瀑布图、关系图、雷达图、油量图、热力图、树图等等几十种动态交互的图形;支持3D动态图形效果,如3D航线图、3D散点图、3D柱图用于数据可视化展示。

    55.png

    图:Echarts效果示例

    另外自助仪表盘还支持丰富的Echarts图形控件如轮播控件、跑马灯、TAB页控件、URL控件。 只需要我们选择其中的控件组件,将需要分析的字段进行关联再制作成相应的图表即可实现各种图形组件的轮播,且还可设置轮播的时长。

    在将我们需要分析的维度与对应的组件完成之后,以及各个组件所在位置调整之后,系统提供四套默认主题:浅色主题、深色主题、三色渐变色、炫彩风格。另还可以设置项来自定义主题,并将自定义主题保存以便后续使用,或者覆盖当前主题。

    66.png

    用户通过拖拉拽的方式,系统提高灵活方便的操作界面,允许客户任意选择指标、维度和过滤条件等,快速生成多维分析表,仪表盘看板。

    77.png

    Smartbi作为成熟的大数据分析平台,具备可复用、 动静结合独特的展示效果,使得数据可视化灵活强大,动静皆宜,为广大用户提供了无限的应用能力和想象空间。使用Smartbi的自助仪表盘功能,让你的工作汇报增添精彩。数据可视化不仅丰富且美观,更重要是操作简洁,使用方便。适应多变的分析场景。大大的提高了业务部门用数效率,减少技术部门的人员投入。

    展开全文
  • 个常用的UML关系

    万次阅读 2018-04-10 16:52:48
    本文转自UML常用图的几种关系的总结 - 拥抱变化 - 博客频道 - CSDN.NET http://blog.csdn.net/suxinpingtao51/article/details/8011335在UML的类图中,常见的有以下几种关系: 泛化(Generalization), 实现...

    本文转自UML常用图的几种关系的总结 - 拥抱变化 - 博客频道 - CSDN.NET http://blog.csdn.net/suxinpingtao51/article/details/8011335

    在UML的类图中,常见的有以下几种关系: 泛化(Generalization),  实现(Realization), 关联(Association), 聚合(Aggregation), 组合(Composition), 依赖(Dependency)


    1.       泛化(Generalization

    【泛化关系】:是一种继承关系表示一般与特殊的关系它指定了子类如何特化父类的所有特征和行为. 例如:老虎是动物的一种, 即有老虎的特性也有动物的共性.

    【箭头指向】:带三角箭头的实线,箭头指向父类

     

     

    2. 实现(Realization

    【实现关系】:是一种类与接口的关系表示类是接口所有特征和行为的实现.

    【箭头指向】:带三角箭头的虚线,箭头指向接口

     

    3. 关联(Association)

    【关联关系】:是一种拥有的关系它使一个类知道另一个类的属性和方法;如:老师与学生,丈夫与妻子

    关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。

    【代码体现】:成员变量

    【箭头及指向】:带普通箭头(或实心三角形箭头)的实心线,指向被拥有者

     

    上图中,老师与学生是双向关联,老师有多名学生,学生也可能有多名老师。但学生与某课程间的关系为单向关联,一名学生可能要上多门课程,课程是个抽象的东西他不拥有学生。

     

    上图为自身关联:

     

    4. 聚合(Aggregation

    【聚合关系】:是整体与部分的关系且部分可以离开整体而单独存在如车和轮胎是整体和部分的关系, 轮胎离开车仍然可以存在.

    聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。

    【代码体现】:成员变量

    【箭头及指向】:带空心菱形的实心线,菱形指向整体

     

     

    5. 组合(Composition)

    【组合关系】:是整体与部分的关系但部分不能离开整体而单独存在. 如公司和部门是整体和部分的关系, 没有公司就不存在部门.

           组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期

    【代码体现】:成员变量

    【箭头及指向】:带实心菱形的实线,菱形指向整体

     

     

    6. 依赖(Dependency)

    【依赖关系】:是一种使用的关系,  即一个类的实现需要另一个类的协助所以要尽量不使用双向的互相依赖.

    【代码表现】:局部变量、方法的参数或者对静态方法的调用

    【箭头及指向】:带箭头的虚线,指向被使用者

     

     

     

    各种关系的强弱顺序:

    泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖

    下面这张UML图,比较形象地展示了各种类图关系:

     

     

    ====================================================

    序列图主要用于展示对象之间交互的顺序。

    序列图将交互关系表示为一个二维图。纵向是时间轴,时间沿竖线向下延伸。横向轴代表了在协作中各独立对象的类元角色。类元角色用生命线表示。当对象存在时,角色用一条虚线表示,当对象的过程处于激活状态时,生命线是一个双道线。

    消息用从一个对象的生命线到另一个对象生命线的箭头表示。箭头以时间顺序在图中从上到下排列。

     

    序列图中涉及的元素:

    1.   生命线:

    生命线名称可带下划线。当使用下划线时,意味着序列图中的生命线代表一个类的特定实体。

     

     

    2.       同步消息

    发送人在它继续之前,将等待同步消息响应

     

    3.       异步消息

    在发送方继续之前,无需等待响应的消息

     

    4.       注释

     

    5.       约束

    约束的符号很简单;格式是: [Boolean Test]

     

    6.       组合片段

    组合片段 用来解决交互执行的条件及方式。 它允许在序列图中直接表示逻辑组件,用于通过指定条件或子进程的应用区域,为任何生命线的任何部分定义特殊条件和子进程。

    常用的组合片段有:

    a.       抉择(Alt)

    抉择用来指明在两个或更多的消息序列之间的互斥的选择,相当于经典的if..else..。

    抉择在任何场合下只发生一个序列。 可以在每个片段中设置一个临界来指示该片段可以运行的条件。 else 的临界指示其他任何临界都不为 True 时应运行的片段。 如果所有临界都为 False 并且没有 else,则不执行任何片段。

     

    b.       选项(Opt)

    包含一个可能发生或不发生的序列

    c.       循环(Loop)

    片段重复一定次数。 可以在临界中指示片段重复的条件。

     

    d.       并行(Par)

     

    下表列出了常用的组合片段:

    片段类型

    名称

    说明

    Opt

    选项

    包含一个可能发生或可能不发生的序列。 可以在临界中指定序列发生的条件。

    Alt

    抉择

    包含一个片段列表,这些片段包含备选消息序列。 在任何场合下只发生一个序列。

    可以在每个片段中设置一个临界来指示该片段可以运行的条件。 else 的临界指示其他任何临界都不为 True 时应运行的片段。 如果所有临界都为 False 并且没有 else,则不执行任何片段。

    Loop

    循环

    片段重复一定次数。 可以在临界中指示片段重复的条件。

    Loop 组合片段具有“Min”“Max”属性,它们指示片段可以重复的最小和最大次数。 默认值是无限制。

    Break

    中断

    如果执行此片段,则放弃序列的其余部分。 可以使用临界来指示发生中断的条件。

    Par

    并行

    并行处理。 片段中的事件可以交错。

    Critical

    关键

    用在 Par 或 Seq 片段中。 指示此片段中的消息不得与其他消息交错。

    Seq

    弱顺序

    有两个或更多操作数片段。 涉及同一生命线的消息必须以片段的顺序发生。 如果消息涉及的生命线不同,来自不同片段的消息可能会并行交错。

    Strict

    强顺序

    有两个或更多操作数片段。 这些片段必须按给定顺序发生。

     

    有关如何解释序列的片段

    默认情况下,序列图表明可能发生的一系列消息。 在运行的系统中,可能会出现您未选择显示在关系图上的其他消息。

    以下片段类型可用于更改此释义:

    片段类型

    名称

    说明

    Consider

    考虑

    指定此片段描述的消息列表。 其他消息可发生在运行的系统中,但对此描述来说意义不大。

    “Messages”属性中键入该列表。

    Ignore

    忽略

    此片段未描述的消息列表。 这些消息可发生在运行的系统中,但对此描述来说意义不大。

    “Messages”属性中键入该列表。

    Assert

    断言

    操作数片段指定唯一有效的序列。 通常用在 Consider 或 Ignore 片段中。

    Neg

    否定

    此片段中显示的序列不得发生。 通常用在 Consider 或 Ignore 片段中。

     


    ====================================================

    用例图主要用来描述 用户、需求、系统功能单元 之间的关系。它展示了一个外部用户能够观察到的系统功能模型图。

    【用途】:帮助开发团队以一种可视化的方式理解系统的功能需求。

     

    用例图所包含的元素如下:

    1.       参与者(Actor)

    表示与您的应用程序或系统进行交互的用户、组织或外部系统。用一个小人表示。

     

    2.       用例(Use Case)

     用例就是外部可见的系统功能,对系统提供的服务进行描述。 用椭圆表示

    3.       子系统(Subsystem)

    用来展示系统的一部分功能,这部分功能联系紧密。

     

    4.       关系

    用例图中涉及的关系有:关联、泛化、包含、扩展;

    如下表所示:

    关系类型

    说明

    表示符号

    关联

    参与者与用例间的关系

    泛化

    参与者之间或用例之间的关系

    包含

    用例之间的关系

    扩展

    用例之间的关系

    a.       关联(Association)

    表示参与者与用例之间的通信,任何一方都可发送或接受消息。

    【箭头指向】:指向消息接收方

     

     

    b.      泛化(Inheritance)

    就是通常理解的继承关系,子用例和父用例相似,但表现出更特别的行为;子用例将继承父用例的所有结构、行为和关系。子用例可以使用父用例的一段行为,也可以重载它。父用例通常是抽象的。

    【箭头指向】:指向父用例

    c.       包含(Include)

    包含关系用来把一个较复杂用例所表示的功能分解成较小的步骤;

    【箭头指向】:指向分解出来的功能用例

     

    d.      扩展(Extend)

        扩展关系是指 用例功能的延伸,相当于为基础用例提供一个附加功能。

       【箭头指向】:指向基础用例

     

     

    e.       依赖(Dependency)

    以上4中关系,是UML定义的标准关系。 但VS2010的用例模型图中,添加了依赖关系,用带箭头的虚线表示

    表示源用例依赖于目标用例;

    【箭头指向】:指向被依赖项

     

    5.       项目(Artifact)

    用例图虽然是用来帮助人们形象地理解功能需求,但却没多少人能够通看懂它。很多时候跟用户交流甚至用Excel都比用例图强,VS2010中引入了“项目”这样一个元素,以便让开发人员能够在用例图中链接一个普通文档。

    用依赖关系把某个用例依赖到项目上

     

    然后把项目-》属性 的Hyperlink 设置到你的文档上

    这样当你在用例图上 双击项目时,就会打开相关联的文档。

     

    6.       注释(Comment)

     

     

    包含(include)、扩展(extend)、泛化(Inheritance) 的区别:

    条件性:泛化中的子用例和include中的被包含的用例会无条件发生,而extend中的延伸用例的发生是有条件的;

    直接性:泛化中的子用例和extend中的延伸用例为参与者提供直接服务,而include中被包含的用例为参与者提供间接服务。

    对extend而言,延伸用例并不包含基础用例的内容,基础用例也不包含延伸用例的内容。

    Inheritance而言,子用例包含基础用例的所有内容及其和其他用例或参与者之间的关系;

     

    一个用例图示例:

     

     

    牢骚:

    感觉用例图还不成熟,并不能很好地表达系统的需求, 没有UML背景的用户几乎不知道画的些什么。

    其次,包含关系、扩展关系 的箭头符号竟然是同样的箭头,仅靠上方写个文字来加以区别,翻译成其他语言的话,几乎就不知道代表什么意思。  扩展关系的箭头朝向也很难理解,为何要指向基用例,而不指向扩展用例

    VS2010添加的“项目”元素,是个很好的创新,能够在用例图中关联word,excel这些文档。但为什么不把这些功能直接集成到用例里面,双击用例就弹出一份文档岂不更容易理解,非要画蛇添足地加一个元件,仅仅为了提供个链接功能。

     

     

    用例描述表:

    鉴于用列图并不能清楚地表达功能需求,开发中大家通常用描述表来补充某些不易表达的用例,下图的表给大家提供一个参考:

    展开全文
  • 常用集合的结构关系

    千次阅读 2020-06-12 16:02:19
    常用容器的结构关系: 标小红旗表示最为常用。 容器的存取: Collection: collection使用add()方法添加数据,取数据list与set都可用iterator迭代器,list有单独的get(i)方法可以取指定索引的值。 Map: 1.通过...
  • OSPF中常用的LSA类型

    千次阅读 2020-07-30 16:02:09
    LSA-1由每一台运行OSPF的路由器为每区域产生一份LSA,描述本区域内的链路状态信息 描述P2P网络:   描述MA网络: 二、Network-LSA(LSA-2)区域内 LSA-2由MA网络中的DR设备产生,描述MA共享网段或者MA...
  • 图像种基本类型简介

    万次阅读 2019-05-05 14:28:25
    在计算机中,按照颜色和灰度的多少可以将图像分为种基本类型。  1. 二值图像  2. 灰度图像  3. 索引图像  4. 真彩色RGB图像 1. 二值图像 一幅二值图像的二维矩阵仅由0、1两值构成,“0”代表黑色,...
  • 盘点数据分析中常用的图表类型

    万次阅读 2019-01-14 08:30:00
    ♚极客猴,热衷于 Python,目前擅长利用 Python 制作网络爬虫以及 Django 框架。2019 年已悄然过去两星期,不知你是否有新的收获?今天给大家分享的内...
  • 本文将主要讲解了数据库的一些基础知识,介绍了MySql的存储引擎,最后讲了MySql常用的数据类型
  • Oracle常用字段类型

    千次阅读 2016-05-19 16:42:57
    oracle 字段类型  CHAR 固定长度字符串 最大长度2000 bytes  VARCHAR2 可变长度的字符串 最大长度4000 bytes 可做索引的最大长度749  NCHAR 根据字符集而定的固定长度字符串 最大长度2000 bytes
  • redis 常用数据类型以及操作

    万次阅读 2021-11-09 15:00:42
    文章目录一、String 数据类型1. SET/GET/APPEND/STRLEN2. INCR/DECR/INCRBY/DECRBY3. GETSET4. SETEX5. SETNX6. MSET/MGET/MSETNX二、List 数据类型1. LPUSH/LPUSHX/LRANGE2. LPOP/LLEN3. LREM/LSET/LINDEX/LTRIM4. ...
  • java几个常用

    万次阅读 2018-07-12 10:33:01
    引用类型String和StringBufferString类型的赋值理解Int a=3;a = 5;这段代码的含义是:首先申请内存单元,命名为a 同时将3这值存储内存单元中,然后又将5这只存入内存单元中,这内存单元的之前的只在被赋值后就...
  • [Unity Shader] 常用的数值类型和语义

    千次阅读 2018-07-06 18:24:35
    [Unity Shader] 常用的数值类型和语义Posted on 2017-08-11 17:39 珍蜗蜗 阅读(1149) 评论(0) 编辑 收藏 书看到第八章,跟随写了一些例子,但有些数值类型的使用还是需要特别注意,经常需要查阅,在这里做一下...
  • UML常用图的几种关系的总结

    千次阅读 2017-09-08 11:08:46
    在UML的 类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization), 关联(Association), 聚合(Aggregation), 组合...【泛化关系】:是一种继承关系, 表示一般与特殊的关系, 它指定
  • 知识图谱(关系网络)概念及常用算法

    万次阅读 多人点赞 2019-11-27 15:05:56
    假设,4个网站之间的跳转入左图,抽象出来就是转移矩阵M,假设一个人最开始访问这四个网站的概率都是1/4,那经过第一轮跳转 终止点问题&陷阱问题 在计算PR时,增加空值随机跳出的阻尼系数β,可以...
  • java中常用的几集合类

    万次阅读 多人点赞 2019-06-10 20:19:24
    //包含Collection(集合),List,Set,Map(图),以及其Iterator,Comparator,Cloneable,还有常用的具体实现类 //List<List<String>>集合的嵌套使用 //1、是否允许空 //2、是否允许重复数据 //3、...
  • COLLATE※、查询COLLATE二、删除数据库DROP DATABASE三、创建数据表CREATE TABLEⅠ、创建Ⅱ、常用数据类型1、数值2、日期/时间3、字符(串)※、可选特殊类型四、删除数据表DROP TABLE五、插入数据INSERT INTO六、...
  • 常用的自动化测试框架

    千次阅读 2018-08-17 10:17:55
    一直想仔细研究框架,写流水账似的测试程序不难,写低维护成本的测试框架就很难了,所以研究多种测试框架还是很有必要的,知道孰优孰劣,才能在开始编写框架的时候打好基础,今天读到了KiKi Zhao的翻译文章,...
  • 数据库的设计通常需要经历四个部分: 需求收集与分析(Requirements Collection and Analysis) 概念设计(Conceptual Design) —— 设计实体关系模型 (ER Model) 逻辑设计(Logical Design)—— 实现从 ER ...
  • 关系抽取数据集介绍

    千次阅读 2020-03-05 16:55:24
    最近由于实验需要,收集整理了关系抽取方向的数据集,主要包括SemEval、Wiki80、NYT10。目前来说全监督的关系抽取任务一般在SemEval上做,远程监督的关系抽取任务一般在NYT10上做。 SemEval 数据集来源 SemEval数据...
  • 数据库的简介与类型

    万次阅读 多人点赞 2018-03-23 10:04:26
    简单的说,数据库(英文Database)就是一存放数据的仓库,这仓库是按照一定的数据结果(数据结构是指数据的组织形式或数据之间的联系)来组织、存储的、我们可以通过数据库提供的多种方法来管理数据库里的数据更...
  • 关系数据库中常用的数据结构

    万次阅读 2017-06-26 14:38:39
    数据结构是元素之间的一种关系。...1.数组:array,关系数据库中数组的应用非常广泛,一table就可以看作是一二维数组。但是数组的访问效率较低,需要遍历所有数据才能找到满足条件的数据。 2.
  • 数据库实体联系模型与关系模型

    千次阅读 2020-03-02 19:11:33
    数据库设计是指根据用户的需求,在某一具体...这就需要规划课程、学生、老师、学习资料等数据构成以及相互之间的关系。因此,规划数据构成及数据间关系,并应用某一具体的数据库管理系统如MySQL构建数据库的过程就是...
  • Java 十大常用框架

    千次阅读 2019-07-16 07:50:14
    十大常用框架: 一、SpringMVC 二、Spring 三、Mybatis 、Dubbo 五、Maven 六、RabbitMQ 七、Log4j 八、Ehcache 九、Redis 十、Shiro 延展阅读: 一、SpringMVC Spring Web MVC是一种基于Java的实现...
  • 大家好,我是魔王哪吒,话不多说,今天带来的是一篇《考前复习必备MySQL数据库(关系型数据库管理系统)》文章,欢迎大家喜欢。前言MySQL是一个关系型数据库管理系统,在web应用方面,M...
  • 布尔类型(boolean)常量与变量

    千次阅读 2020-07-22 10:23:59
    boolean类型有两常量值,true和false,在内存中占一位(不是一字节),不可以使用0或非0整数替代true或false。Boolean类型用于判断逻辑条件,一般用于程序流程控制。 boolean flag; flag = true; //或者flag=...
  • 常用的微服务架构拆分方式

    万次阅读 多人点赞 2022-02-28 00:17:15
    微服务架构并无标准架构,不然什么架构师大会也不会各个系统架构百花齐放了。虽然没有固定的套路,却有一些经验,今天就来做一总结。基于角色拆分这种拆分方式常见于基础设施以及其PaaS层的架构,...
  • python基础3 ---python数据类型

    千次阅读 2020-12-16 02:25:11
    ython基础一、python数据类型 ------列表(list)1、定义:[]内以逗号分隔,按照索引,存放各种数据类型,每位置代表一元素特性:可存放多不同类型的值;可修改指定索引位置对应的值,可变;按照从左到右的顺序...
  • 文章目录1、数据类型1.1、数值类型1.1.1、整型(整数类型)1.1.2、浮点型(小数类型)1.1.3、复数1.2、bool类型(布尔类型)1.3、字符串类型1.3.1、定义字符串1.3.2、字符串拼接符“+”1.3.3、字符串实现基于 UTF-8 ...
  • VB讲课笔记04:数据类型、运算符与表达式、常用函数一、标识符VB6.0中,标识符分两类,一类是系统内部定义的标识符, 一类是用户定义的标识符。 系统内部定义的标识符又称关键字或保留字,主要用于标识内部符号常量、...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 360,379
精华内容 144,151
关键字:

常用关系的四个类型