精华内容
下载资源
问答
  • 软件系统分析模型文档

    千次阅读 2019-11-06 08:27:31
    以下是学生选课系统的系统分析模型文档 系统分析模型 ...

    以下是学生选课系统的系统分析模型文档                                                                              

                                                                                            系统分析模型

     

     

     

     

     

     

     

       

                                                                       项目名称       XXXX大学学生选课系统                   

                                                                       班    级:           软件工程XX X                 

                                                                       组                                      

                                                                       组                      

     

     

     

     

     

     

     

     

     

    目 录

    1系统分析模型…….....................................................................................................1

    1.1用例图…............................................................................................................1

    1.2类图……............................................................................................................2

     

     

     

    1系统分析模型

    1.1用例图

    本系统为XXXX大学学生选课系统,系统中用户分为4类,分别是:学生、教师、教务处课程管理员以及外部排课系统。

    (1)学生通过身份验证后进入主界面。主界面为学生提供5种选择:查看课程总览、查看课表(其中包括个人课表和推荐课表)、选择课程、退选课程、成绩查询、查看个人信息、退出登录。

    (2)教师通过身份验证后进入主界面,主界面为教师提供5种选择:查看课程、查看学生名单、成绩录入、个人信息查看、退出登录。

    (3)教务处课程管理员通过身份验证后进入主界面,主界面为管理员提供4种选择:学生信息管理、教师信息管理、课程信息管理、退出登录。

    (4)外部排课系统生成推荐课表。

    系统用例图,如图1-1

    hello

     

    1.2类图

    本系统中实体类共有7种,分别是:学生类、教师类、教务处课程管理员类、课程类、个人课表类、推荐课表类、成绩类。

    各个类的属性如图1-2,类图如图1-3。

     

     

    展开全文
  • 文档对象模型DOM

    千次阅读 2016-03-13 15:55:02
    DOM=DocumentObjectModel,文档对象模型,DOM可以以一种独立于平台和语言的方式访问和修改一个文档的内容和结构。换句话说,这是表示和处理一个HTML或XML文档常用方法。有一点很重要,DOM的设计是以对象管理组织...
    

            DOM=DocumentObjectModel,文档对象模型,DOM可以以一种独立于平台和语言的方式访问和修改一个文档的内容和结构。换句话说,这是表示和处理一个HTML或XML文档的常用方法。有一点很重要,DOM的设计是以对象管理组织(OMG)的规约为基础的,因此可以用于任何编程语言。最初人们把它认为是一种让JavaScript在浏览器间可移植的方法,不过DOM的应用已经远远超出这个范围。Dom技术使得用户页面可以动态地变化,如可以动态地显示或隐藏一个元素,改变它们的属性,增加一个元素等,Dom技术使得页面的交互性大大地增强。[1]DOM实际上是以面向对象方式描述的文档模型。DOM定义了表示和修改文档所需的对象、这些对象的行为和属性以及这些对象之间的关系。可以把DOM认为是页面上数据和结构的一个树形表示,不过页面当然可能并不是以这种树的方式具体实现。通过JavaScript,您可以重构整个HTML文档。您可以添加、移除、改变或重排页面上的项目。要改变页面的某个东西,JavaScript就需要获得对HTML文档中所有元素进行访问的入口。这个入口,连同对HTML元素进行添加、移动、改变或移除的方法和属性,都是通过文档对象模型来获得的(DOM)。在1998年,W3C发布了第一级的DOM规范。这个规范允许访问和操作HTML页面中的每一个单独的元素。所有的浏览器都执行了这个标准,因此,DOM的兼容性问题也几乎难觅踪影了。DOM可被JavaScript用来读取、改变HTML、XHTML以及XML文档。DOM被分为不同的部分(核心、XML及HTML)和级别(DOMLevel1/2/3):
                      
                什么是 DOM?
           
                    DOM是W3C(万维网联盟)的标准。DOM定义了访问HTML和XML文档的标准:"W3C文档对象模型(DOM)是中立于平台和语言的接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式。"W3CDOM标准被分为3个不同的部分:编者注:DOM是DocumentObjectModel(文档对象模型)的缩写。
           
                什么是 XML DOM?
           
                    XMLDOM是:[2]XMLDOM定义了所有XML元素的对象和属性,以及访问它们的方法(接口)。换句话说:XMLDOM是用于获取、更改、添加或删除XML元素的标准。
             
                什么是 HTML DOM?
           
                    HTMLDOM是:[3]HTMLDOM定义了所有HTML元素的和,以及访问它们的。
                 
                
            2 
    DOM的分级
                  
            编辑根据W3CDOM规范,DOM是HTML与XML的应用编程接口(API),DOM将整个页面映射为一个由层次节点组成的文件。有1级、2级、3级共3个级别。
                  
                1级DOM
           
                    1级DOM在1998年10月份成为W3C的提议,由DOM核心与DOMHTML两个模块组成。DOM核心能映射以XML为基础的文档结构,允许获取和操作文档的任意部分。DOMHTML通过添加HTML专用的对象与函数对DOM核心进行了扩展。
                
                2级DOM
           
                    鉴于1级DOM仅以映射文档结构为目标,DOM2级面向更为宽广。通过对原有DOM的扩展,2级DOM通过对象接口增加了对鼠标和用户界面事件(DHTML长期支持鼠标与用户界面事件)、范围、遍历(重复执行DOM文档)和层叠样式表(CSS)的支持。同时也对DOM1的核心进行了扩展,从而可支持XML命名空间。2级DOM引进了几个新DOM模块来处理新的接口类型:DOM视图:描述跟踪一个文档的各种视图(使用CSS样式设计文档前后)的接口;DOM事件:描述事件接口;DOM样式:描述处理基于CSS样式的接口;DOM遍历与范围:描述遍历和操作文档树的接口;   
                
                3级DOM
           
                    3级DOM通过引入统一方式载入和保存文档和文档验证方法对DOM进行进一步扩展,DOM3包含一个名为“DOM载入与保存”的新模块,DOM核心扩展后可支持XML1.0的所有内容,包扩XMLInfoset、XPath、和XMLBase。
                  
                "0级"DOM
           
                    当阅读与DOM有关的材料时,可能会遇到参考0级DOM的情况。需要注意的是并没有标准被称为0级DOM,它仅是DOM历史上一个参考点(0级DOM被认为是在InternetExplorer4.0与NetscapeNavigator4.0支持的最早的DHTML)。
                      
                节点
           
                    根据DOM,HTML文档中的每个成分都是一个节点。DOM是这样规定的:整个文档是一个文档节点每个HTML标签是一个元素节点包含在HTML元素中的文本是文本节点每一个HTML属性是一个属性节点注释属于注释节点
                  
          
     Node 层次
           节点彼此都有等级关系。HTML文档中的所有节点组成了一个文档树(或节点树)。HTML文档中的每个元素、属性、文本等都代表着树中的一个节点。树起始于文档节点,并由此继续伸出枝条,直到处于这棵树最低级别的所有文本节点为止。下面这个图片表示一个文档树(节点树):
         
                文档树(节点树)
           
                    请看下面这个HTML文档:DOMLessononeHelloworld!上面所有的节点彼此间都存在。除文档节点之外的每个节点都有。举例,和的父节点是节点,文本节点"Helloworld!"的父节点是节点。大部分元素节点都有。比方说,节点有一个子节点:节点。节点也有一个子节点:文本节点"DOMTutorial"。当节点分享同一个父节点时,它们就是。比方说,和是同辈,因为它们的父节点均是节点。节点也可以拥有,后代指某个节点的所有子节点,或者这些子节点的子节点,以此类推。比方说,所有的文本节点都是节点的后代,而第一个文本节点是节点的后代。节点也可以拥有。先辈是某个节点的父节点,或者父节点的父节点,以此类推。比方说,所有的文本节点都可把节点作为先辈节点。   
                
     3   查找并访问节点        
            编辑你可通过若干种方法来查找您希望操作的元素:通过使用getElementById()和getElementsByTagName()方法通过使用一个元素节点的parentNode、firstChild以及lastChild属性getElementById()和getElementsByTagName()这两种方法,可查找整个HTML文档中的任何HTML元素。这两种方法会忽略文档的结构。假如您希望查找文档中所有的元素,getElementsByTagName()会把它们全部找到,不管元素处于文档中的哪个层次。同时,getElementById()方法也会返回正确的元素,不论它被隐藏在文档结构中的什么位置。这两种方法会向您提供任何你所需要的HTML元素,不论它们在文档中所处的位置!getElementById()可通过指定的ID来返回元素:
                  
                getElementById() 语法
           
                    document.getElementById("ID");注释:getElementById()无法工作在XML中。在XML文档中,您必须通过拥有类型id的属性来进行搜索,而此类型必须在XMLDTD中进行声明。getElementsByTagName()方法会使用指定的标签名返回所有的元素(作为一个节点列表),这些元素是您在使用此方法时所处的元素的后代。getElementsByTagName()可被用于任何的HTML元素:

         
                getElementsByTagName() 语法
           
                    document.getElementsByTagName("标签名称");或者:document.getElementById('ID').getElementsByTagName("标签名称");       
                实例 1
           
                    下面这个例子会返回文档中所有元素的一个节点列表:document.getElementsByTagName("p");
                实例 2
           
                    下面这个例子会返回所有元素的一个节点列表,且这些元素必须是id为"maindiv"的元素的后代:document.getElementById('maindiv').getElementsByTagName("p");
          节点列表(nodeList)
                    当我们使用节点列表时,通常要把此列表保存在一个变量中,就像这样:varx=document.getElementsByTagName("p");现在,变量x包含着页面中所有元素的一个列表,并且我们可以通过它们的索引号来访问这些元素。注释:索引号从0开始。您可以通过使用length属性来循环遍历节点列表:varx=document.getElementsByTagName("p");for(vari=0;i要访问第三个元素,您可以这么写:vary=x[4];parentNode、firstChild以及lastChild这三个属性parentNode、firstChild以及lastChild可遵循文档的结构,在文档中进行“短距离的旅行”。请看下面这个HTML片段:[5]JohnDoeAlaska在上面的HTML代码中,第一个是元素的首个子元素(firstChild),而最后一个是元素的最后一个子元素(lastChild)。此外,是每个元素的父节点(parentNode)。对firstChild最普遍的用法是访问某个元素的文本:varx=[aparagraph];vartext=x.firstChild.nodeValue;parentNode属性常被用来改变文档的结构。假设您希望从文档中删除带有id为"maindiv"的节点:varx=document.getElementById("maindiv");x.parentNode.removeChild(x);首先,您需要找到带有指定id的节点,然后移至其父节点并执行removeChild()方法。[6]
                  
    4 优点和缺点     
            编辑DOM的优势主要表现在:易用性强,使用DOM时,将把所有的XML文档信息都存于内存中,并且遍历简单,支持XPath,增强了易用性。DOM的缺点主要表现在:效率低,解析速度慢,内存占用量过高,对于大文件来说几乎不可能使用。另外效率低还表现在大量的消耗时间,因为使用DOM进行解析时,将为文档的每个element、attribute、processing-instrUCtion和comment都创建一个对象,这样在DOM机制中所运用的大量对象的创建和销毁无疑会影响其效率。

    展开全文
  • Lucene主要有两种文档模型:Document和Field,一个Document可能包含若干个Field。 每一个Field有不同的策略: 1.被索引 or not,将该字段(Field)经过分析(Analyisi)后,加入索引中,并不是原文 ...

    Lucene主要有两种文档模型:Document和Field,一个Document可能包含若干个Field。

    每一个Field有不同的策略:

    1.被索引 or not,将该字段(Field)经过分析(Analyisi)后,加入索引中,并不是原文

    2.如果被索引,可选择是否保存“term vector”(向量),用于相似检索。

    3.可选择是否存储(store),将原文直接拷贝 ,不做索引,用于检索后的取出。

    Lucene中的文档模型类似于数据库,但是又不完全相同,体现在如下几方面:

    1.无规范格式,即无需固定的Schema,无列等预先设计,同一个索引中加入的Document可包含不同的Field

    2.非正规化,Lucene中的文档模型是一个平面化 的结构,没有递归定义,自然连接等等复杂的结构。

    2.2  理解索引过程

    总体来说,索引过程为:

    1.提取摘要:从原文提取,并创建Document和Field对象。Tika 提供了PDF、Word等非文本的文本提取。

    2.分析:Analysis,首先对Document的Field进行分解,产生token流,然后经过一系列Filter(如小写化)等。

    3.建立索引:通过IndexWriter的addDocument写入到索引中。Lunece使用了反向索引 ,即“那个Document包含单词X”,而不是“Document包含哪些Word”

    索引文件组成

    为了保证效率,每个索引由若干segments组成:

    _X.cfs  每个segments由若干个cfs组成,X为0,1,2….如果开启了useCompoundFile,则只有一个.cfs文件。

    segments_<N>:记载每个分区对应的cfs文件。

    每个一段时间后,在调用IndexWriter时,会自动合并这些segment

    2.3  索引的基本操作

    首先创建IndexWriter

    IndexWriter(dir,new WhiteSpaceAnalyser(),IndexWriter.MaxField.UNLIMITED);

    dir是索引的保存路径,WhiteSpaceAnalyser是基于空白的分词 ,最后部限定Field的数量。

    依次创建文档Document和Field

    Document doc = new Document();

    doc.add(new Filed(key,value,STORE?,INDEX?)

    key就是field的检索字段名,value就是待写入/分析的文本。

    STORE ,与索引无关,是否额外存储原文 ,可以在搜索结果后调用出来,NO不额外存储;YES,额外存储。

    INDEX ,NO,不索引;ANALYZED,分词后索引;NOT_ANALYZED,不分词索引;ANALYZED_NO_NORMS,分词索引,不存储NORMS;NOT_ANALYZED_NO_NORMS,不分词,索引,不存储NORMS。除了NO外都算索引,可以搜索 。NORMS存储了boost所需信息,包含了NORM可能会占用更多内存?

    删除索引

    IndexWriter提供了删除Document的功能:

    deleteDocumen(Term) 

    deleteDocumen(Term[])

    deleteDocumen(Query)

    deleteDocumen(Query [])

    特别注意Term不一定是唯一的,所以有可能误删除多个 。另外最好选择唯一的、非索引的Term 以防混乱(比如唯一ID)。

    删除后commit()然后close才能真正写入索引文件中。

    删除后只是标记为删除,maxDoc()返回所有文档(含已经删除,但未清理的);numDocs:未删除的文档数量

    使用delete后,再optimize():压缩删除的空间、再commit才真正的删除释放空间。

    更新索引

    updateDocument(Term,Document),Lunce只支持全部替换,即整个Docuemnt要被替换掉,没法更新单独的Field。

    2.4  Field的选项

    选项分为三类:index、storing和term vector。

    Index选项

    Index.ANALYZED :分词后索引

    Index.NOT_ANALYZED : 不分词直接索引,例如URL、系统路径等,用于精确检索

    Index.ANALYZED_NO_NORMS : 类似Index.ANALYZED,但不存储NORM TERMS,节约内存但不支持Boost。

    Index.NOT_ANALYZED_NO_NORMS : 类似Index.NOT_ANALYZED,但不存储NORM TERMS,节约内存但不支持Boost,非常常用

    Index.NO : 根本不索引,所以不会被检索到

    默认情况,Luncene会存储所有单词的出现位置,可以用Field.setOmitTermFreqAndPositions(true)关闭,但是会影响PhraseQuery和SpanQuery。

    Store选项

    Store.YES :存储原始value数值,可在检索后被提取

    Store.NO :不存储原始数值,检索后无法重新提取。

    CompressionTools 可用于压缩、解压缩byte数组。

    Term Vector选项

    Term Vector主要用于为相似搜索 提供支持 ,例如搜索cat,返回cat。

    TermVector.YES :记录Term Vector

    TermVector.WITH_POSITIONS :记录Term Vector以及每个Term出现的位置

    TermVector.WITH_OFFSETS :记录Term Vector以及每个Term出现的偏移

    TermVector.WITH_POSITIONS_OFFSETS :记录Term Vector以及出现的位置+偏移

    TermVector.NO :不存储TermVector

    如果Index选择了No,则TermVector必须选择No

    将String外的类型作为Field的数据源

    Reader:无法被STORE,默认TokenStream始终被分词和索引。

    TokenStream:分词之后的结果作为源,无法被Store,始终analyzed并索引。

    byte[] :无法被索引,没有TermVector,必须被Store.YES

    与排序相关选项

    数字Field可以用NumericField,如果是文本Field必须Field.Index.NOT_ANALYZED,才能排序,即保证这个Field只含有一个Token才能排序

    多值Field(Multi-valued Fields)

    比如一本书有多个作者,怎么办呢?

    一种方法是,添加多个同一key,不同value的Field

      Document doc = new Document();
        for (int i = 0; i < authors.length; i++) {
          doc.add(new Field(“author”, authors[i],
                            Field.Store.YES,
                            Field.Index.ANALYZED));
        }

    还有一种方法在第4章中提出。

    2.5  Boost(提升)

    boost可以对影响搜索返回结果的排序

    boost可以在index或者搜索时候完成,后者更具有灵活性可独立制定但耗费更多CPU。

    Booost Doument

    index时候boost将存储在NORMS TERM中。默认情况下,所有Document有相等的Boost,即1.0,可以手动提升一个Docuemnt的Boost数值。

    Document.settBoost(float bei),bei是1.0的倍数。

    Boost Field

    也可以对Field进行索引,使用Document的Boost,对下属的Field都执行相同的Field。

    单独对Field进行Boost

    Field.boost(float)

    注意:Lucene的Rank算法由多种因素组成,Boost只是一个因素之一,不是决定性因素

    Norms

    boost的数值存储在Norms中,可能会导致Search时占用大量内存。因此可将其关闭:

    设置NO_NORMS,或者再Field中指定Field.setOmitNorms(true)。

     2.6  对数字、日期、时间等进行索引

    索引数字

    有两种场景:

    1.数字嵌入在Text中,例如“Be sure to include Form 1099 in your tax return”,而你想要搜索1099这个词。此时需要选择不分解数字的Analyzer ,例如WhitespaceAnalyzer或者StandardAnalyzer。而SimpleAnalyzer和StopAnalyzer会忽略数字,无法通过1099检出。

    2.数字式单独的Field,2.9之后,Lucene支持了数字类型,使用NumericField即可:doc.add(new NumericField(“price”).setDoubleValue(19.99));此时,对数字Field使用字典树存储,

    可向document中添加一样的NumericField数值,在NumericRangeQuery、NumericRangeFilter中以or的方式支持,但是排序中不支持。因此如果要排序,必须添加唯一的NumericField。

    precisionStep控制了扫描精度,越小越精确但速度越慢。

    索引日期和时间

    方法是:将日期转化为时间戳(长整数) ,然后按照NumericField进行处理。

    或者,如果不需要精确到毫秒,可以转化成秒处理

      doc.add(new NumericField(“day”) .setIntValue((int) (new Date().getTime()/24/3600)));

    甚至对某一天进行索引而不是具体时间。

        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        doc.add(new NumericField(“dayOfMonth”)
                .setIntValue(cal.get(Calendar.DAY_OF_MONTH)));

     2.7  Field截断

       Lucene支持对字段的截断。IndexWriter.MaxFieldLength表示字段的最大长度,默认为MaxFieldLength.UNLIMITED,无限。

    而MaxFieldLength.LIMITED表示有限制,可以通过setMaxFieldLength(int n)进行指定。

    上述设定之后,只保留前n个字符。

    可以通过setInfoStream(System.out)获得详细日志信息。

    2.8  实时搜索

    2.9后支持实时搜索,或者说很快的入索引–检索过程

    IndexReader  IndexWriter.getReader()

    本方法将立即刷新Index的缓存,生效后立即返回IndexReader用于搜索。

    2.9  优化索引

    索引优化可以提升搜索速度 ,而非索引速度。它指的是将小索引文件合并成几个。

    IndexWriter提供了几个优化方法:

    optimize():将索引合并为一个段,完成前不会返回。但是太耗费资源。

    optimize(int maxNumSegments):部分优化,优化到最多maxNumSegments个段?是优化于上述极端情况的这种,例如5个。

    optimize(boolean doWait):通optimize(),但是它将立即返回。

    optimize(int maxNumSegments, boolean doWait):同optimize(int maxNumSegments),但是将立即返回。

    另外:在优化中会耗费大量的额外空间 。即旧的废弃段直到IndexWriter.commit()之后才能被移除

    2.10  Directory

    Directory封装了存储的API,向上提供了抽象的接口,有以下几类:

    SimpleFSDirectory:存储于本地磁盘使用java.io,不支持多线程,要自己加锁

    NIOFSDirectory:多线程可拓展,使用java.nio,支持多线程安全,但是Windows下有Bug

    MMapDirectory:内存映射存储(将文件映射到内存中进行操作,类似nmap)。

    RAMDirectory:全部在内存中存储。

    FileSwitchDirectory:使用两个目录,切换交替使用。

    使用FSDirectory.open将自动挑选合适的Directory。也可以自己指定:

    Directory ramDir = new RAMDirectory();
    IndexWriter writer = new IndexWriter(ramDir, analyzer,  IndexWriter.MaxFieldLength.UNLIMITED);

    RAMDirectory适用于内存比较小的情况。

    可以拷贝索引以用于加速:

    Directory ramDir = new RAMDirectory(otherDir);

    或者

    Directory.copy(Directory sourceDir,
                   Directory destDir,
                   boolean closeDirSrc);

    2.11  线程安全、锁

    线程、多JVM安全

    任意多个IndexReaders可同时打开,可以跨JVM。

    同一时间 只能打开一个 IndexWriter,独占写锁 。内建线程安全机制。

    IndexReaders可以在IndexWriter打开的时候打开。

    多线程间可共享IndexReader或者IndexWriter,他们是线程安全的,内建同步机制且性能较高。

    通过远程文件系统共享IndexWriter

    注意不要反复打开、关闭,否则会影响性能。

    Index的锁

    以文件锁的形式,名为write.lock。

    如果在已经被锁定的情况下再创建一个IndexWriter,会遇到LockObtainFailedException。

    也支持其他锁定方式,但是一般情况下无需改变它们。

    IndexWriter.isLocked(Directory):检查某目录是否被锁。

    IndexWriter.unlock(Directory):对某目录解锁,危险!。

    注意!每次IndexWriter无论执行了什么操作,都要显示的close !不会自动释放锁的!

    2.12  调试索引

    2.14  高级的索引选项

    IndexReader可以用来彻底删除已经去除的Index,优点如下:

    1.通过Document的具体Number来删除,更精确而IndexWriter不行。

    2.IndexReader可以在删除后立即显示出来,而IndexWriter必须重新打开才能显示出来。

    3.IndexReader拥有undeleteAll,可以撤销所有删除的索引(只对尚未merged的有效 )。

    释放删除索引后的空间

    可以调用expungeDeletes显示的释放空间,它将执行merge从而释放删除但仅仅做了标记,尚未释放的空间。

    缓存和刷新

    当添加索引、删除索引时候,在内存中建立了一个缓存以减少磁盘I/O,Lucene会定期把这些缓存中的改动放入Directory中便形成了一个segment (段)。

    IndexWriter刷新缓存的条件是:

    当内存中数据已经大于setRAMBufferSizeMB的指定。

    当索引中的Document数量多于setMaxBufferedDocs的指定。

    当索引被删除的数量多于setMaxBufferedDeleteTerms的指定。

    上述条件之一发生时,即触发缓存刷进,它将建立新的Segment但不存入磁盘,只有当commit后才写入磁盘的index。

    索引的commit

    commit将改动持久化到本次索引中。只有调用commit后,再打开的IndexReader或者IndexSearcher才能看到最近一次commit之后的结果。

    关闭close也将间接调用commit。

    与commit相对的是rollback方法,它将撤销上次commit之后的所有改动。

    commit非常耗时,不能经常调用。

    “双缓冲”的commit

    在图形界面开发中,经常有双缓冲技术,即一个用于被刷新,一个用于显示,两个之间互换使用。Lucene也支持这样的机制。

    Lucene暴露了两个接口:

    prepareCommit

    Commit

    prepareCommit比较慢,而调用prepareCommit后再调用Commit则会非常快。

    删除策略

    IndexDeletionPolicy决定了删除策略。可以决定是否保留之前的commit版本。

    Lucene对ACID的事务支持

    这主要是通过“同时只能打开一个IndexWriter”来实现的。

    如果JVM、OS或者机器挂了,Lucene会自动恢复到上一个commit版本。

    合并Merge

    当索引有过多的Segnmnet的时候,需要进行合并Merge。优点:

    1.减少了Segnment的文件数量

    2.减少索引文件占用的空间大小。

    MERGEPOLICY决定何时需要执行合并Merge

    MERGEPOLICY

    选择那些文件需要被合并,默认有两种策略:

    LogByteSizeMergePolicy :根据Index大小决定是否需要合并

    LogDocMergePolicy :根据Document的数量决定是否需要合并

    分别通过

    setMergeFactor

    和setMaxMergeDocs来指定,具体参数见API。

    MERGESCHEDULER

    决定如何进行合并:

    ConcurrentMergeScheduler,后台额外线程进行合并,可通过waitForMerges得知合并完成。

    SerialMergeScheduler,在addDocument时候串行合并,使用统一线程。

    展开全文
  • 数据挖掘常用模型如下: 3.1 监督学习模型 就是人们常说的分类,通过已有的训练样本(即已知数据以及其对应的输出)去训练得到一个最优模型(这个模型属于某个函数的集合,最优则表示在某个评价准则下是最佳的),...

    机器学习和数据挖掘是紧密相关的,要进行数据挖掘需要掌握一些机器学习所用的方法和模型知识,通过模型的训练可以得到处理数据的最优的模型。数据挖掘常用的模型如下:

    3.1 监督学习模型

    就是人们常说的分类,通过已有的训练样本(即已知数据以及其对应的输出)去训练得到一个最优模型(这个模型属于某个函数的集合,最优则表示在某个评价准则下是最佳的),再利用这个模型将所有的输入映射为相应的输出,对输出进行简单的判断从而实现分类的目的,也就具有了对未知数据进行分类的能力。

    3.1.1决策树:

    决策树是用于分类和预测的主要技术之一,决策树学习是以实例为基础的归纳学习算法,它着眼于从一组无次序、无规则的实例中推理出以决策树表示的分类规则。构造决策树的目的是找出属性和类别间的关系,用它来预测将来未知类别的记录的类别。它采用自顶向下的递归方式,在决策树的内部节点进行属性的比较,并根据不同属性值判断从该节点向下的分支,在决策树的叶节点得到结论。

    主要的决策树算法有ID3、C4.5(C5.0)、CART、PUBLIC、SLIQ和SPRINT算法等。它们在选择测试属性采用的技术、生成的决策树的结构、剪枝的方法以及时刻,能否处理大数据集等方面都有各自的不同之处。

    3.1.2 贝叶斯方法:

    贝叶斯(Bayes)分类算法是一类利用概率统计知识进行分类的算法,如朴素贝叶斯(Naive Bayes)算法。这些算法主要利用Bayes定理来预测一个未知类别的样本属于各个类别的可能性,选择其中可能性最大的一个类别作为该样本的最终类别。由于贝叶斯定理的成立本身需要一个很强的条件独立性假设前提,而此假设在实际情况中经常是不成立的,因而其分类准确性就会下降。为此就出现了许多降低独立性假设的贝叶斯分类算法,如TAN(Tree Augmented Native Bayes)算法,它是在贝叶斯网络结构的基础上增加属性对之间的关联来实现的。

    3.1.3 神经网络

    神经网络是一种应用类似于大脑神经突触联接的结构进行信息处理的数学模型。在这种模型中,大量的节点(称”神经元”)之间相互联接构成网络,即”神经网络”,以达到处理信息的目的。神经网络通常需要进行训练,训练的过程就是网络进行学习的过程。训练改变了网络节点的连接权的值使其具有分类的功能,经过训练的网络就可用于对象的识别。目前,神经网络已有上百种不同的模型,常见的有BP神经网络、径向基RBF网络、Hopfield网络、随机神经网络(Boltzmann机)、竞争神经网络(Hamming网络,自组织映射网络)等。但是当前的神经网络仍普遍存在收敛速度慢、计算量大、训练时间长和不可解释等缺点。

    3.1.4 支持向量机(SVM)

    支持向量机(SVM,Support Vector Machine)是根据统计学习理论提出的一种新的学习方法,它的最大特点是根据结构风险最小化准则,以最大化分类间隔构造最优分类超平面来提高学习机的泛化能力,较好地解决了非线性、高维数、局部极小点等问题。对于分类问题,支持向量机算法根据区域中的样本计算该区域的决策曲面,由此确定该区域中未知样本的类别。

    3.1.5 集成学习分类模型

    集成学习是一种机器学习范式,它试图通过连续调用单个的学习算法,获得不同的基学习器,然后根据规则组合这些学习器来解决同一个问题,可以显著的提高学习系统的泛化能力。主要采用(加权)投票的方法组合多个基学习器,常见的算法有装袋(Bagging)、提升/推进(Boosting)、随机森林等。集成学习由于采用了投票平均的方法组合多个分类器,所以有可能减少单个分类器的误差,获得对问题空间模型更加准确的表示,从而提高分类器的分类准确度。

    3.1.6 其他分类学习模型

    此外还有logistics回归模型、隐马尔科夫分类模型(HMM)、基于规则的分类模型等众多的分类模型,对于处理不同的数据、分析不同的问题,各种模型都有自己的特性和优势。

    3.2 无监督学习模型

    在非监督式学习中,数据并不被特别标识,学习模型是为了推断出数据的一些内在结构,应用场景包括关联规则的学习以及聚类等。常见的聚类算法如下所示:

    3.2.1 K-means聚类

    K-means算法的基本思想是初始随机给定K个簇中心,按照最邻近原则把待分类样本点分到各个簇。然后按平均法重新计算各个簇的质心,从而确定新的簇心。一直迭代,直到簇心的移动距离小于某个给定的值。

    3.2.2 基于密度的聚类

    根据密度完成对象的聚类。它根据对象周围的密度(如DBSCAN)不断增长聚类。典型的基于密度方法包括:DBSCAN(Densit-based Spatial Clustering of Application with Noise):该算法通过不断生长足够高密度区域来进行聚类;它能从含有噪声的空间数据库中发现任意形状的聚类。此方法将一个聚类定义为一组“密度连接”的点集。OPTICS(Ordering Points To Identify the Clustering Structure):并不明确产生一个聚类,而是为自动交互的聚类分析计算出一个增强聚类顺序。

    3.2.3 层次聚类方法

    层次聚类方法对给定的数据集进行层次的分解,直到某种条件满足为止。层次凝聚的代表是AGNES算法,层次分裂的代表是DIANA算法。具体又可分为凝聚的,分裂的两种方案。

    凝聚的层次聚类是一种自底向上的策略,首先将每个对象作为一个簇,然后合并这些原子簇为越来越大的簇,直到所有的对象都在一个簇中,或者某个终结条件被满足,绝大多数层次聚类方法属于这一类,它们只是在簇间相似度的定义上有所不同。

    分裂的层次聚类与凝聚的层次聚类相反,采用自顶向下的策略,它首先将所有对象置于同一个簇中,然后逐渐细分为越来越小的簇,直到每个对象自成一簇,或者达到了某个终止条件。

    3.2.4 谱聚类

    谱聚类(Spectral Clustering, SC)是一种基于图论的聚类方法——将带权无向图划分为两个或两个以上的最优子图,使子图内部尽量相似,而子图间距离尽量距离较远,以达到常见的聚类的目的。其中的最优是指最优目标函数不同,可以是割边最小分割, 也可以是分割规模差不多且割边最小的分割。谱聚类能够识别任意形状的样本空间且收敛于全局最优解,其基本思想是利用样本数据的相似矩阵(拉普拉斯矩阵)进行特征分解后得到的特征向量进行聚类。

    此外常用的聚类方法还有基于网格的聚类、模糊聚类算法、自组织神经网络SOM、基于统计学的聚类算法(COBWeb、AutoClass)等。

    3.3 半监督学习

    3.3.1 半监督学习概述

    半监督学习算法要求输入数据部分被标识,部分没有被标识,这种学习模型可以用来进行预测,但是模型首先需要学习数据的内在结构以便合理的组织数据来进行预测。应用场景包括分类和回归,算法包括一些对常用监督式学习算法的延伸,这些算法首先试图对未标识数据进行建模,在此基础上再对标识的数据进行预测。如图论推理算法(Graph Inference)或者拉普拉斯支持向量机(Laplacian SVM.)等。

    3.3.2 Multi-view algorithm(多视角算法)

    一般多用于可以进行自然特征分裂的数据集中.考虑特殊情况(每个数据点表征两个特征):每一个数据点看成是两个特征的集合,然后利用协同训练(Co-training algorithm)进行处理.协同训练(co-training)算法,此类算法隐含地利用了聚类假设或流形假设,它们使用两个或多个学习器,在学习过程中,这些学习器挑选若干个置信度高的未标记示例进行相互标记,从而使得模型得以更新。

    3.3.3 Graph-Based Algorithms(基于图的算法)

    基于图的算法是基于图正则化框架的半监督学习算法,此类算法直接或间接地利用了流形假设,它们通常先根据训练例及某种相似度度量建立一个图,图中结点对应了(有标记或未标记)示例,边为示例间的相似度,然后,定义所需优化的目标函数并使用决策函数在图上的光滑性作为正则化项来求取最优模型参数。

    3.4 文本处理模型

    3.4.1 分词模型

    分词模型主要在处理文本过程中使用,在此特指中文分词模型。中文分词算法现在一般分为三类:基于字符串匹配,基于理解,基于统计的分词。

    基于字符串匹配分词:

    机械分词算法。将待分的字符串与一个充分大的机器词典中的词条进行匹配。分为正向匹配和逆向匹配;最大长度匹配和最小长度匹配;单纯分词和分词与标注过程相结合的一体化方法。所以常用的有:正向最大匹配,逆向最大匹配,最少切分法。实际应用中,将机械分词作为初分手段,利用语言信息提高切分准确率。优先识别具有明显特征的词,以这些词为断点,将原字符串分为较小字符串再机械匹配,以减少匹配错误率;或将分词与词类标注结合。

    基于理解分词:

    分词同时进行句法语义分析等模拟人对句子的理解,包括分词子系统,句法语义系统,总控部分。总控部分协调下,分词字系统可以获得有关词,句子等的句法和语义信息对分词歧义进行判断。需要大量的语言知识信息。

    基于统计分词:

    相邻的字同时出现的次数越多,越有可能构成一个词语,对语料中的字组频度进行统计,不需要切词字典,但错误率很高。可以考虑:使用基本词典进行关键词分词,使用统计方法识别新词组,两者结合。

    3.4.2 TF-IDF模型

    TF-IDF(term frequency–inverse document frequency)是一种用于资讯检索与资讯探勘的常用加权技术。TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。TF-IDF加权的各种形式常被搜寻引擎应用,作为文件与用户查询之间相关程度的度量或评级。除了TF-IDF以外,因特网上的搜寻引擎还会使用基于连结分析的评级方法,以确定文件在搜寻结果中出现的顺序。

    TFIDF的主要思想是:如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。TFIDF实际上是:TF * IDF,TF词频(Term Frequency),IDF反文档频率(Inverse Document Frequency)。TF表示词条在文档d中出现的频率(另一说:TF词频(Term Frequency)指的是某一个给定的词语在该文件中出现的次数)。IDF的主要思想是:如果包含词条t的文档越少,也就是n越小,IDF越大,则说明词条t具有很好的类别区分能力。如果某一类文档C中包含词条t的文档数为m,而其它类包含t的文档总数为k,显然所有包含t的文档数n=m+k,当m大的时候,n也大,按照IDF公式得到的IDF的值会小,就说明该词条t类别区分能力不强。(另一说:IDF反文档频率(Inverse Document Frequency)是指果包含词条的文档越少,IDF越大,则说明词条具有很好的类别区分能力。)但是实际上,如果一个词条在一个类的文档中频繁出现,则说明该词条能够很好代表这个类的文本的特征,这样的词条应该给它们赋予较高的权重,并选来作为该类文本的特征词以区别与其它类文档。这就是IDF的不足之处.

    3.4.3 LDA模型

    LDA(Latent Dirichlet Allocation)是一种文档主题生成模型,也称为一个三层贝叶斯概率模型,包含词、主题和文档三层结构。所谓生成模型,就是说,我们认为一篇文章的每个词都是通过“以一定概率选择了某个主题,并从这个主题中以一定概率选择某个词语”这样一个过程得到。文档到主题服从多项式分布,主题到词服从多项式分布。

    LDA是一种非监督机器学习技术,可以用来识别大规模文档集(document collection)或语料库(corpus)中潜藏的主题信息。它采用了词袋(bag of words)的方法,这种方法将每一篇文档视为一个词频向量,从而将文本信息转化为了易于建模的数字信息。但是词袋方法没有考虑词与词之间的顺序,这简化了问题的复杂性,同时也为模型的改进提供了契机。每一篇文档代表了一些主题所构成的一个概率分布,而每一个主题又代表了很多单词所构成的一个概率分布。

    4 模型评价指标

    4.1 模型评价概述

    建模构建过程中会得出一系列的分析结果、模式或模型。同一个采样数据可以利用多种数据分析方法和模型进行分析,模型评价的目的之一就是从这些模型中自动找出一个最好的模型出来,另外就是要针对业务对模型进行解释和应用。

    模型效果评价通常分两步,第一步是直接使用原来建立模型的样本数据来进行检验。假如这一步都通不过,那么所建立的决策支持信息价值就不太大了。一般来说,在这一步应得到较好的评价。这说明你确实从这批数据样本中挖掘出了符合实际的规律性。第一步通过后,第二步是另外找一批数据,已知这些数据是反映客观实际的、规律性的。这次的检验效果可能会比前一种差,差多少是要注意的,若是差到所不能容忍程度,那就要考虑第一步构建的样本数据是否具有充分的代表性,或是模型本身是否够完善。这时候可能要对前面的工作进行反思了。若这一步也得到了肯定的结果时,那所建立的数据挖掘模型应得到很好的评价了。

    人工智能、大数据、云计算和物联网的未来发展值得重视,均为前沿产业,多智时代专注于人工智能和大数据的入门和科谱,在此为你推荐几篇优质好文:
    1.一分钟了解互联网数据挖掘流程
    2.数据挖掘、人工智能、模式识别等学科的公共数学基础有哪些?
    3.模式识别和机器学习、数据挖掘的区别与联系

    展开全文
  • 十四、文档对象模型 原文:The Document Object Model 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 部分参考了《JavaScript 编程精解(第 2 版)》 Too bad! Same old story! Once you...
  • 深度学习常用框架和基础模型

    千次阅读 2020-06-14 08:52:57
    目录一、深度学习框架1、解释2、常用的框架二、常用的深度神经网络基础模型(视觉)1、AlexNet模型2、VGG模型3、GoogLeNet模型4、ResNet模型5、MobileNet模型6、BERT模型 一、深度学习框架 参考链接: ...
  • 互联网运营常用8大数据分析模型

    千次阅读 2019-05-27 17:06:37
    1、用户模型 “不仅要知道用户当下在想什么,更要知道用户背后在想什么,以及用户正在经历着什么。” 传统用户模型构建方式 用户模型:基于对用户的访谈和观察等研究结果建立,严谨可靠但费时; 临时用户模型:基于...
  • 搜索引擎的检索模型-查询与文档的相关度计算1. 检索模型概述 搜索结果排序时搜索引擎最核心的部分,很大程度度上决定了搜索引擎的质量好坏及用户满意度。实际搜索结果排序的因子有很多,但最主要的两个因素是用户...
  • 常用的几种软件生命周期模型

    千次阅读 2019-09-27 12:15:08
    一、瀑布模型 瀑布模型各个阶段为:计划,需求分析,设计,程序编码,软件测试,运行维护。 瀑布模型将软件生命周期的各项活动自上而下如瀑布流水依次连接,上一阶段的输出作为下一阶段的输入,同时,在每一个...
  • Visual C++中基于多文档视窗模型的重叠图象拼接技术 辽宁省抚顺石油学院计算机科学与技术系 李志刚 摘要: 图象拼接是在全景视频系统、地理信息系统等应用中经常遇到的一个问题,本文基于网格匹配的方法对边界部分...
  • 搜索引擎的检索模型-查询与文档的相关度计算1. 检索模型概述      搜索结果排序时搜索引擎最核心的部分,很大程度度上决定了搜索引擎的质量好坏及用户满意度。实际搜索结果排序的因子有很...
  •   软件的生命周期分为6个阶段,即需求分析、计划、设计、编码、测试、运行维护。 1. 瀑布模型   瀑布模型是最早出现的软件开发模型,是所有其他软件开发模型的基础框架。与软件的生命周期不同的是,它缺少了软....
  • 软件工程中五种常用的软件开发模型整理

    万次阅读 多人点赞 2019-12-10 20:28:23
    为了使软件生命周期中的各项任务能够有序地按照规程进行,需要一定的工作模型对各项任务给予规程约束,这样的工作模型被称为软件过程模型。 1.瀑布模型 瀑布模型是将软件生存周期中的各个活动规定为依线性顺序连接的...
  • 通俗理解LDA主题模型

    万次阅读 多人点赞 2014-11-17 16:11:58
    通俗理解LDA主题模型 0 前言 印象中,最开始听说“LDA”这个名词,是缘于rickjin在2013年3月写的一个LDA科普系列,叫LDA数学八卦,我当时一直想看来着,记得还打印过一次,但不知是因为这篇文档的...
  • 开发流程模型

    千次阅读 2016-10-18 10:15:11
    描述:每个软件过程顺序衔接、一次性通过,最常用。 优点:由文档和风险驱动,利于提高大型项目开发的质量和效率。 缺点:建设周期长、风险大、难以满足用户需求。 适用场合:需求明确且很少变更的项目,如二次...
  • 性能测试过程及模型构建

    千次阅读 2017-10-30 21:02:47
    在性能测试过程中,建模实际上可分为两个过程,性能测试过程和模型构建过程,性能测试过程主要完成对系统进行性能测试,并搜集相应的测试结果,形成测试过程文档模型构建主要是根据搜集到的性能测试需求和生产系统...
  • Naive Bayes Classifier)是以贝叶斯定理为基础并且假设特征条件之间相互独立的方法,先通过已给定的训练集,以特征词之间独立作为前提假设,学习从输入到输出的联合概率分布,再基于学习到的模型,输入X,求出使得...
  • 概念模型和数据模型 课堂练习和习题 精品文档 精品文档 收集于网络如有侵权请联系管理员删除 收集于网络如有侵权请联系管理员删除 精品文档 收集于网络如有侵权请联系管理员删除 概念模型和数据模型 课堂练习和习题 ...
  • 最近做一些关于Faster R-CNN、SSD和YOLO模型选择和优化的项目,之前只了解Faster R-CNN系列目标检测方法,于是抽空梳理一下这几个检测模型。先上两张简单的精确度和运算量的对比图,有个粗略的了解,虽然图中缺了...
  • 参考文献 [1] Dilated CNN:CV中常用的图像编码方式,可拓宽模型编码时的感受野。paper原文链接:https://arxiv.org/abs/1511.07122。另可参考知乎讨论“如何理解空洞卷积(dilated convolution)?”,链接:...
  • 一,机器学习常用性能指标总结 (转载并稍作修改和补充) 在机器学习中,性能指标(Metrics)是衡量一个模型好坏的关键,通过衡量模型输出y_predict 和 y_true之间的某种"距离"得出的。 性能指标往往是...
  • 软件开发模型(SoftwareDevelopment Model)是指软件开发全部过程、活动和任务的结构框架。软件开发包括需求、设计、编码和测试等阶段,有时也包括维护阶段。  软件开发模型能清晰、直观地表达软件开发全过程,明确...
  • UML 元模型

    千次阅读 2009-06-22 00:53:00
    解释在这些文档描述的UML 语义模型的结构。UML 使用元模型正式定义——也就是说,UML 中的构成物的模型。元模型本身在UML 中表达。这是元循环解释的一个例子——即用其自身来定义的一种语言。事物不是完全循环的。...
  • 要求制定企业范围的工程化标准,而且无论是管理还是工程开发都需要一套文档化的标准,并将这些标准集成到企业软件开发标准过程去。 4)管理级: 软件过程和产品质量有详细的度量报告,软件产品和过程得到了定量的...
  • Keras Model模型Keras 中文文档Keras 模型Sequential 顺序模型Sequential使用方法一个简单的Sequential示例构建方法input shape 输入的形状(格式)complication 编译training 训练Model 模型Model 使用方法compile ...
  • 软件开发模型2:增量模型/螺旋模型/敏捷模型

    千次阅读 热门讨论 2019-01-07 08:43:04
    文章目录4 增量模型(Incremental Model)4.1 优点4.2 缺点5 螺旋模型(Spiral Model)6 敏捷模型(Agile Modeling) 转载自博文: 软件开发的11种模式 https://blog.csdn.net/xi_gua_gua/article/details/53107283 ...
  • 九、Deep Learning的常用模型或者方法 9.1、AutoEncoder自动编码器  Deep Learning最简单的一种方法是利用人工神经网络的特点,人工神经网络(ANN)本身就是具有层次结构的系统,如果给定一个神经网络,我们假设...
  • 一、瀑布模型 1.1什么是瀑布模型 1.2特点 1.3优缺点 1.4客户需求 二、快速原型模型 2.1什么是快速原型模型 2.2优缺点 2.3快速原型模型的思想产生、原理及运用方式 2.4类型 2.5开发步骤 三、增量模型 3.1...
  • **瀑布模型,原型模型,增量模型,螺旋模型,喷泉模型**,在实际项目中,通常数个模型方法共同使用

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 157,278
精华内容 62,911
关键字:

常用的文档模型分为